概要
PX4で、DDS eProsima Fast-RTPSっぽいのを使っているという情報を聞いたので、おおよその概要を調査してみる。実際のPX4はないので、あくまでソースなどの公開情報からわかる範囲と、想像のみで調査。DDSとしては、ここにすべての仕様が公開されているので、参考にしてほしい。
結論
PX4 firmwareとDDSの世界(例えば、ROS1/ROS2、他のDDS application)を繋ぐためのbridgeを構築して、CPU側で適当な処理をすることで、PX4の制御やPX4の情報取得などを柔軟にできるようにしようとしている。
トピックス
PX4-FastRTPS Bridge
PX4-FastRTPS Bridgeが一番情報が多い。
下の図からわかる通り、PX4自体とそれを接続する先(via UART or UDP)でPX4コンポーネントが使用するuORB messageをRTPS messageに変換する責務を担っている。つまり、uORB / DDS-RTPSを接続できることで、オフロード先でRTPS applicationを開発してPX4と接続できるということ。
Client/Agentアーキテクチャによって、複数のClientがAgentに対して接続できる形をとっていることがわかる。
物理的な接続にはUART or UDPと記載されている。(UART接続のほうがデバイス間接続には一般的のような気がするが、なぜUDP??)
Client/AgentのソースコードはPX4 firmwareをbuildすることで生成されるようになっている。
- Bridge Client
- Bridge Agent
ROS1/ROS2との関係
ROS1/ROS2とも以下の図の通り、接続はアーキテクチャ的には可能だが、Real-Timeなのかはわからない。ROS1にとっては通信はできるレベルで、性能はかなり悪く実際に使える状態なのか疑問。
オフロード側のpackageとしては、px4_ros_comが必要で、px4_ros_comによってROS1/ROS2側での通信が可能となる。
eProsima Repository
PX4-FastRTPS-PoC
Proof Of Conceptでduplicateになっているが、この時点ではPX4とraspiをUARTで接続して、オフロードするようなことを想定していたよう。
SerializerとしてeProsimaが提供するFast-CDRを利用することでOMG(Object Management Group)のIDLと同じ形式をサポート。
PX4-FastRTPS-PoC-Snapdragon-UDP
こちらは、PX4とQualcomm SnapdragonをUDP接続してbridge接続をできるように試みるプロジェクト。(実際にどこまで動くかは全く不明)
そもそもUDP接続(network接続)っていうものは、PX4とSnapdragonの間では一般的な接続なのだろうか?PX4がネットワークインターフェースをもっているということか?