Raspberry Pi でシリアル GPS/GNSS デバイスを使用しているときに問題が発生しました。問題のデバイスは、にシンボリック リンクされた u-blox GNSS レシーバーです/dev/gps
。
このデバイスからの出力データをログに記録し、同時に補正データをデバイスに送信しようとしています。
具体的には、RTKLIB ( http://www.rtklib.com/ )str2str
ツールを使用して NTRIP/RTCM 補正データを GNSS 受信機に送信し、DGNSS/RTK を使用してより正確な位置推定を取得します。受信機の出力データは、GPS デーモン (gpsd) に基づく Python スクリプトによってログに記録されます。
ただし、主な問題はシリアルポート制御に関連していると思います。最初に書き込みプロセス (str2str) を実行し、その後に読み取りプロセス (私の python スクリプト/gpsd フロントエンド (例: cgps) /cat) を同時に実行すると、読み取りプロセスは数秒間データを出力し、その後フリーズします。データの読み取りに使用するツールは関係ありません。
この質問を見つけました: https://superuser.com/questions/488908/sharing-a-serial-port-between-two-processes。したがって、プロセスがデバイスに rw アクセスできることを確認し、スーパーユーザーとして実行することさえ試みました。さらに、socat と仮想シリアル ポートを偶然見つけましたが、その用途が見つかりませんでした。( Linux用仮想シリアルポート)
あるプロセスでシリアルポートからデータを読み取り、別のプロセスで書き込む方法はありますか? 私が現在知っている唯一の解決策は、pySerial を使用して Python で読み取りおよび書き込みプロセスを書き直すことです。これにより、シリアル デバイスにアクセスできるプロセスは 1 つだけになりますが、多くの作業が必要になります。