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