1

無線で ROS ノードと通信している DDS システム (OMG DDS) を入手しました。受信される情報は、速度、状態、経度、緯度などを含む構造体です。これはうまく機能し、私の DDS クライアントはノードから無線で送信される情報を問題なく出力します。これで、Qt で記述された GUI アプリケーションができました。モデルを作成し、定義済みのマップに配置します。これらのモデルには一連の情報関数が定義されており、トリガーされるとマップを更新して、受信した情報をスムーズに視覚化します。

ここに問題があります。GUI アプリケーションを DDS クライアントと通信させる方法がわかりません。DDS クライアントと送信側を動作させ、ROS でコンパイルするだけで十分な問題が発生したため、これら 2 つを絡み合わせたくはありません。DDSクライアントとGUIアプリケーションに含めることができる別のキューシステムについて考えましたが、これが機能するかどうかはわかりません. また、SQL データベースを作成し、新しいデータをプッシュし、GUI アプリケーションで検出されたときに新しいデータをプルすることについても検討しました。プル関数をトリガーするある種の on_data_available 関数。継続的に更新されている 1 つのデータ セット (モデルは 1 つの USV を表す) のみを使用して作業しているため、最後のものは悪い考えだと聞いたことがあります。 .

これが十分な情報でない場合は申し訳ありませんが、さまざまな理由でコード例を実際に提供することはできません. 誰かが意見を持っている場合は、大声で言ってください。ぜひ聞いてください。そして、私が十分に具体的でない場合は、できる限り最善を尽くして書き直そうとします.

4

1 に答える 1

0

GUI アプリケーションを DDS クライアントと通信させる方法がわかりません

あなたの質問は、DDS または GUI アプリケーションに固有のものではありません。基本的に、シンプルで便利なプロセス間通信 (IPC)メカニズムを求めています。リンクをたどるとわかるように、さまざまなオプションがたくさんあります。

DDS で使用可能なデータと関連する型定義が既にあることを考えると、このタスクに DDS を使用することが依然として最も簡単な方法であると思います。共有メモリまたはローカル ループバックを介して通信するように設定できます。DDS は、(クロス言語の) デシリアライゼーションを含め、内部ですべての検出と通信を行います。別のメカニズムを選択すると、より多くの作業を自分で行うことになる可能性があります。

別の方法として、一部の DDS 実装は (商業的に) SQL データベースとのネイティブ統合をサポートしています。これらは、DDS データ定義をイントロスペクトし、必要なすべてのテーブルを作成します。DDS からの更新はデータベースに自動的に転送され、その逆も同様です。そのデータベースから GUI をフィードできます。

于 2015-07-09T22:37:10.350 に答える