Skip to main content

reComputer JetsonでPX4を制御する

reComputer Mini J3010 (Jetson Orin Nano 4G) のような高性能コンパニオンコンピュータと PX4フライトコントローラ を組み合わせることで、自律走行車、ボート、ドローンを含む幅広いインテリジェント無人システムのコアアーキテクチャが構築されます。この強力な組み合わせにより、物流、科学研究、捜索救助、精密農業などの分野で革新的なアプリケーションが実現されます。

このセットアップにより、視覚ナビゲーション、物体追跡、リアルタイム障害物回避などの複雑なオンボードタスクが可能になります。これら2つの「頭脳」間の通信リンクは、システム全体のパフォーマンスと信頼性にとって重要です。

学習内容
  • JetsonをPixhawkに物理的に接続する方法。
  • uXRCE-DDS、MAVSDK、MAVROSの長所と短所。
  • 3つの通信方法すべてのステップバイステップセットアップ手順。
  • 接続を確認し、一般的な問題をトラブルシューティングする方法。

前提条件

開始する前に、以下を確認してください:

  • ハードウェア: 下記の「実験環境」表に記載されているすべてのデバイス。
  • ソフトウェア: Jetson Pack 6.2とROS 2 Humbleの新規インストール。
  • ツール: Jetsonにgitpipがインストールされていること。
  • 知識: Linuxコマンドライン、ROS 2の概念(ノード、トピック)、QGroundControlでのPX4パラメータの基本的な知識。

システム構成

実験環境

コンポーネントデバイス/ソフトウェアバージョン/モデル
コンパニオンコンピュータデバイスreComputer Mini J3010 (Jetson Orin Nano 4G)
OSUbuntu 22.04 (JetPack 6.2)
ROSROS 2 Humble
フライトコントローラMCUPixhawk 4 Mini
ファームウェアPX4 v1.15
地上局PCOSUbuntu 22.04
QGCQGroundControl v5.0以上

ハードウェア接続

Jetsonのネイティブ UARTを使用することを強く推奨します。これにより、USBポートを占有しない堅牢な接続が実現できます。

  • 配線: 4ピンJST-GHケーブルを使用して、**Pixhawk 4 MiniのTELEM1ポートをJetson Orin NanoのUART1**ヘッダーに接続します。
  • デバイスファイル: このシリアルポートは、JetsonのOSでは/dev/ttyTHS1に対応します。
Pixhawk 4 Miniポートとピン配置の詳細(クリックして展開)

UARTDeviceQGC Parameter DescriptionPort Label on FC
UART1/dev/ttyS0GPS1GPS Module
USART2/dev/ttyS1TELEM1TELEM1
USART3/dev/ttyS2TELEM2N/A
UART4/dev/ttyS3TELEM/SERIAL4UART/I2C B
USART6/dev/ttyS4N/ARC IN
UART7/dev/ttyS5N/ADebug
UART8/dev/ttyS6N/ANot connected (no PX4IO)

TELEM1, TELEM2 ポート

PinSignalVolt
1(red)VCC+5V
2(black)TX(out)+3.3V
3(black)RX(in)+3.3V
4(black)CTS(in)+3.3V
5(black)RTS(out)+3.3V
6(black)GNDGND

DSM RC ポート

PinSignalVolt
1(null)VDD_5V_SBUS_RC+5V
2(yellow)SBUS*+3.3V
3(null)RSSI**+3.3V
4(red)VDD_3V3_SPEKTRUM+3.3V
5(black)GNDGND

UART & I2C B ポート *

PinSignalVolt
1(red)VCC+5V
2(black)TX(out)+3.3V
3(black)RX(in)+3.3V
4(black)SCL2+3.3V
5(black)SDA2+3.3V
6(black)GNDGND

SBUS RC ポート

PinSignalVolt
1(red)VDD_5V_SBUS_RC+5V
2(yellow)SBUS*+3.3V
3(null)RSSI**+3.3V
4(null)VDD_3V3_SPEKTRUM+3.3V
5(black)GNDGND

脚注:

  • * (UART & I2C B ポート): シリアル通信やI2Cをサポートするセンサーを接続するための予備ポート。例えば、2番目のGPSモジュールをここに接続できます。
  • * (SBUS信号): SBUSまたはDSM/Spektrumレシーバーの信号線をここに接続します。
  • **** (RSSI信号): RC信号強度情報をオートパイロットに送信します。
重要: シリアルポートの権限設定

すべてのシリアルコマンドで sudo を使用することを避けるため、ユーザーを dialout グループに追加する必要があります。これは重要な一回限りの設定です。

sudo usermod -a -G dialout $USER

You must reboot the Jetson for this change to take effect!

Choosing Your Method: A Comparison

Before diving in, understand the trade-offs. The right choice depends entirely on your project's goals.

FeatureuXRCE-DDS (ROS 2 Native) 🚀MAVSDK (High-Level API) 🐍MAVROS (ROS Bridge) 🌉
ArchitecturePX4 and ROS 2 share a DDS data space for native communication.A standalone C++ library (with wrappers) providing a high-level API.A bridge/gateway that translates MAVLink protocol to ROS topics/services.
PerformanceHighest. Zero-copy data transfer with the lowest latency.High. The API calls directly generate efficient MAVLink messages.Good. A slight overhead exists due to the MAVLink-to-ROS translation layer.
Ease of UseModerate. Requires compiling the Agent and px4_msgs.Easiest. Intuitive, function-based API ideal for rapid prototyping.Steep learning curve but offers the deepest integration with the ROS ecosystem.
FlexibilityExcellent. Provides direct access to all internal PX4 uORB topics.Limited. Exposes common actions (takeoff, waypoints) but not raw data.Excellent. Access to nearly all MAVLink messages, parameters, and services.
ROS IntegrationNative ROS 2. The official, future-proof method for ROS 2.ROS Agnostic. Can be used in any project, easily wrapped in a ROS node.ROS Centric. The de-facto standard for ROS 1 and widely used in ROS 2.
Use CasePerformance-critical ROS 2 projects needing low-level data access.Task-level scripting, rapid prototyping, non-ROS projects, and education.Complex robotics systems integrated with ROS packages like Nav2 or MoveIt.

Method 1: uXRCE-DDS (Native ROS 2 Integration)

This is PX4's official solution for ROS 2, bridging its internal uORB messaging system directly into the ROS 2 network for zero-overhead communication.

Step 1: Compile the Micro XRCE-DDS Agent

The Agent is a small program on the Jetson that acts as a broker between the flight controller's serial connection and the ROS 2 network.

Terminal on Jetson
# 1. Clone the specific version of the Agent repository
cd ~
git clone -b v2.4.2 https://github.com/eProsima/Micro-XRCE-DDS-Agent.git
cd Micro-XRCE-DDS-Agent

# 2. IMPORTANT: Patch the Fast-DDS dependency version
# The v2.12.x tag for fastdds was removed by the vendor; we update it to a working one.
sed -i 's/v2.12.x/v2.13.x/g' SuperBuild.cmake

# 3. Build and install the Agent
mkdir build && cd build
cmake ..
make
sudo make install # Installs MicroXRCEAgent globally
PX4_dev_01PX4_dev_02PX4_dev_03PX4_dev_04

ステップ2: px4_msgs ROS 2パッケージをビルドする

ROS 2がPX4のトピックを理解できるようにするには、そのメッセージ定義をビルドする必要があります。

Terminal on Jetson
# 1. Create a ROS 2 workspace
mkdir -p ~/px4_ros_ws/src
cd ~/px4_ros_ws/src

# 2. Clone the required repositories
git clone https://github.com/PX4/px4_msgs.git
git clone https://github.com/PX4/px4_ros_com.git # Contains examples

# 3. Checkout the branch matching your firmware version
cd px4_msgs
git checkout release/1.15

# 4. Build the workspace
cd ~/px4_ros_ws
source /opt/ros/humble/setup.bash
colcon build
uXRCE-DDSのハードウェア互換性

px4_msgsのバージョンは、お使いのPX4ファームウェアのバージョンと必ず一致させる必要があります。これは互換性にとって重要です。

さらに、PX4ファームウェアv1.14以降で標準となったuXRCE-DDSによる完全なネイティブROS 2サポートには、2MBのフラッシュメモリを持つフライトコントローラー(このガイドで使用されているPixhawk 4 Miniなど)が必要です。

人気のあるPixhawk 2.4.8(およびその他のFMUv2ベースのボード)などの古い従来のハードウェアは、1MBのフラッシュしか持ちません。これらはこのuXRCE-DDS方式に必要な標準のプリビルドファームウェアを実行できません。カスタムの軽量ファームウェアを作成することは理論的には可能ですが、複雑なプロセスです。

Pixhawk 2.4.8またはその他の1MBフラッシュボードを使用している場合は、この方式をスキップして直接方式2(MAVSDK)または方式3(MAVROS)に進むことを強く推奨します。どちらもお使いのハードウェアで完全にサポートされているMAVLinkプロトコルを使用しているためです。

info

px4_msgsブランチは、メッセージ定義の互換性を確保するために、お使いのPX4ファームウェアのバージョンと必ず一致させる必要があります。

PX4_dev_01PX4_dev_02

ステップ3:PX4ファームウェアの設定

QGroundControlに接続し、以下のパラメータを設定します:

  1. UXRCE_DDS_CFGTELEM1に設定します。これによりそのポートでXRCE-DDSクライアントが有効になります。
  2. SER_TEL1_BAUD921600 8N1に設定します。
  3. MAV_1_CONFIGDisabledに設定します。これは同じポートでMAVLinkが競合することを防ぐために重要です。
  4. パラメータを保存し、フライトコントローラーを再起動します。

ステップ4:起動と確認

  1. Jetsonでエージェントを開始(1つのターミナルで):

    ターミナル1:エージェントの実行
    MicroXRCEAgent serial --dev /dev/ttyTHS1 -b 921600
  2. ROS 2トピックの確認(新しいターミナルで):

    ターミナル2:トピックの確認
    # 新しいターミナルごとにワークスペースをソースする
    source ~/px4_ros_ws/install/setup.bash

    # /fmu/で始まるトピックのリストが表示されるはずです
    ros2 topic list | grep /fmu/

    # トピックをエコーしてFCUからのライブデータストリームを確認
    ros2 topic echo /fmu/out/vehicle_odometry
PX4_dev_01PX4_dev_02

方式2:MAVSDK(高レベルAPI)

MAVSDKは、MAVLinkプロトコルの複雑さを抽象化し、ドローンをプログラムで制御するためのシンプルで現代的なAPIを提供します。高レベルのミッションスクリプトを書くのに最適です。

ステップ1:PX4ファームウェアの設定

QGroundControlで、ポート設定をDDSからMAVLinkモードに戻します。

  1. UXRCE_DDS_CFGDisabledに戻します。
  2. MAV_1_CONFIGTELEM 1に設定してポートをMAVLinkに割り当てます。
  3. MAV_1_MODEOnboardに設定してリンクがコンパニオンコンピューター用であることを指定します。
  4. SER_TEL1_BAUD:これが引き続き921600 8N1であることを確認します。
  5. パラメータを保存し、フライトコントローラーを再起動します。

ステップ2:MAVSDK-Pythonのインストール

Terminal on Jetson
pip3 install mavsdk

ステップ3: 制御スクリプトの作成と実行

このPythonスクリプトは接続し、10メートルまで離陸し、待機してから着陸します。

takeoff_and_land.py
import asyncio
from mavsdk import System

async def run():
# Create a drone object and connect to the flight controller
drone = System()
await drone.connect(system_address="serial:///dev/ttyTHS1:921600")

print("Waiting for drone to connect...")
# This is an asynchronous generator that yields connection state updates
async for state in drone.core.connection_state():
if state.is_connected:
print("--> Drone discovered!")
break

if __name__ == "__main__":
# Run the asyncio event loop
asyncio.run(run())

ターミナルからスクリプトを実行してください:python3 takeoff_and_land.py


方法3:MAVROS(強力なROSブリッジ)

MAVROSは実戦で検証されたMAVLink-to-ROSゲートウェイで、複雑なROSベースシステムに対して包括的な機能と比類のない安定性を提供します。

ステップ1:PX4ファームウェアの設定

MAVROSのPX4設定はMAVSDKセットアップと同一です。TELEM1OnboardモードでMAVLink用に設定されていることを確認してください。

ステップ2:MAVROSと依存関係のインストール

Terminal on Jetson
sudo apt update
sudo apt install ros-humble-mavros ros-humble-mavros-msgs
よくあるクラッシュを防ぐ!

MAVROSは座標変換のために地理データセットを必要とします。データセットの欠如は起動時のクラッシュの一般的な原因です。このスクリプトはそれをダウンロードしてインストールします。

Terminal on Jetson
sudo bash /opt/ros/humble/lib/mavros/install_geographiclib_datasets.sh 

ステップ3: 起動と検証

  1. MAVROSノードを起動:

    Terminal 1: Launch MAVROS
    source /opt/ros/humble/setup.bash

    # Launch mavros, specifying the FCU connection URL via a parameter
    ros2 launch mavros px4.launch fcu_url:="serial:///dev/ttyTHS1:921600"
  2. 接続を検証:

    新しいターミナルで、MAVROSステートトピックをエコーします。

    Terminal 2: Verify Connection
    ros2 topic echo /mavros/state

    出力を確認してください。connectedフィールドがtrueに変わったら、MAVROSがPX4と正常に通信しています。

PX4_dev_01PX4_dev_02

よくある問題のトラブルシューティング

問題が発生した場合は、まずこれらのよくある問題を確認してください。

  • シリアルポートで「Permission Denied」: ユーザーをdialoutグループに追加して再起動するのを忘れています。「ハードウェア接続」セクションを参照してください。
  • /dev/ttyTHS1で「No such file or directory」: 物理的な配線を再確認してください。フライトコントローラーの電源は入っていますか?ls /dev/ttyTHS*を実行してデバイス名を確認してください。
  • MAVROS起動時にクラッシュ: install_geographiclib_dataset.shステップを見逃している可能性があります。方法3のコマンドを実行してください。
  • colcon buildが失敗: 最初にROS 2環境をソースしているか確認してください(source /opt/ros/humble/setup.bash)。より複雑な依存関係の問題については、rosdep install --from-paths src --ignore-src -r -yを実行する必要があるかもしれません。

最後に

これで、Jetson OrinとPX4フライトコントローラー間の通信を可能にする3つの強力な方法を手に入れました。最適なツールは、プロジェクトのアーキテクチャ、パフォーマンス要件、開発速度によって異なります。トレードオフを理解することで、あらゆる自律ドローンアプリケーションのための堅牢な基盤を構築できます。

ハッピーフライング!🚁

技術サポートと製品ディスカッション

弊社製品をお選びいただき、ありがとうございます!弊社製品での体験が可能な限りスムーズになるよう、さまざまなサポートを提供しています。異なる好みやニーズに対応するため、複数のコミュニケーションチャンネルを提供しています。

Loading Comments...