DDSアプリケーションを起動しても通信が開始されない場合に確認する項目(何もエラーメッセージが表示されない場合)
1. Firewall/Routerの設定
->DDSがWirelevelで使用するRTPSプロトコルは、UDP port 7400番以上を使用します。ここが塞がっているとDDS通信は開始されません。
また通信相手を探す"Discovery"処理は、同じくUDP multicastを使用します。このため、UDP multicastも透過するように設定しなくてはいけません。
2. I/Fの確認
->RTI Connextは、QoSで指定しない限り、ifconfig/ipconfigで見つかったNICの最初から四番目までを使用します。このため、複数NICが存在する環境では、DDS通信に使用したいNICを使わない場合があります。(仮想ネットワークも一つのNICとして数えます。)
このような場合、QoS設定で使用するNICのIPアドレスを指定してください。
設定例
<participant_qos>
: (略)
<property>
<value>
<element>
<name>dds.transport.UDPv4.builtin.parent.allow_interfaces</name>
<value>192.168.122.*</value> <- 使用したいNICのIP、Linuxではethxも使用可
</element>
<element>
<name>dds.transport.UDPv4.builtin.parent.deny_interfaces</name>
<value>192.168.0.*</value> <- 使用しないNICのIP、Linuxではethxも使用可
</element>
: (略)
</value>
</property>
: (略)
</participant_qos>
3. 2.のallow_interfacesにVLAN構成用に使用したNICを指定すると、当該NICにはpacketが流れないため通信は開始しません。
4. large data topic (topic sizeが60KiB以上)の場合、asynchronous publisherを設定しないと通信できません。
設定例
<participant_qos>
: (略)
<publish_mode>
<kind>ASYNCHRONOUS_PUBLISH_MODE_QOS</kind>
<flow_controller_name>dds.flow_controller.token_bucket.MyFC</flow_controller_name>
</publish_mode>
: (略)
</participant_qos>
5. その他、raw levelでの通信に問題があるとDDS通信は行えません。
driver/OS/hardware設定をご確認ください。
UDP(または他のtransport plugin)レベルでの通信に問題無ければ、rtiddsping/rtiddsspy等のツールで基本的な通信が行えるか否かを確認することができます。
例えばLinux系でshared memoryを使用している場合、QoS設定でOSがディフォルトで用意しているバッファサイズを超えた通信バッファを確保しようとして、driverのbugをつついたことがあります。