硬件连接
Pixhawk 和 Jetson 板块必须分别通过各自的电源端口供电。套件附带的电源模块支持 2S-12S 电池输入,并为 Pixhawk 部分提供稳定供电。其另一个输出通常连接到(供电的)配电板,从那里为电机、伺服等提供电力,同时也为 Jetson( 直接或通过 UBEC)供电。
Jetson 部件可用 7V-21V 输入供电,对应 3S 或 4S 电池。如果使用电压高于 Jetson 允许的电池,你可以选择用 UBEC 提供较低的稳定电源,或者用独立电池供电。
Tip
官网还提供了很多方案
https://docs.px4.io/main/en/companion_computer/holybro_pixhawk_jetson_baseboard#hardware-setup
Jeston烧录
烧录Ubuntu22.04系统
Title
注意进入Recovery模式

Jetson SSH连接
用wifi连接局域网
1 | ip addr show |

Tip
- eth0 = enP8p1s0(同一个有线网口)
- wlan0 = wlP1p1s0(同一个 WiFi)
然后使用MobaXterm等SSH工具连接wlP1p1s0的inet 192.168.31.7地址即可
Jeston初始化配置
1 | sudo apt update |
在 Jetson 上组装 PX4(方案一)
1 | git clone https://github.com/PX4/PX4-Autopilot.git --recursive |
容易遇到FLASH编译错误不推荐
1 | ● FLASH 溢出错误 |
解决方法
1 | ● 我来修改 linker script 增加 FLASH 分区大小。先确认一下当前配置: |
组装成功,你可以像下面所示将 Pixhawk 的 USB-C 端口连接到 Jetson USB 端口

然后通过构建上传参数的固件上传到 Pixhawk
1 | make px4_fmu-v6x_default upload |
从开发电脑部署(方案二【推荐】)
1 | git clone https://github.com/PX4/PX4-Autopilot.git --recursive |
- 你也可以用 px4-dev 的 Docker 容器构建,而不用本地安装工具链。摘自 PX4-Autopilot 目录:./Tools/docker_run.sh ‘make px4_fmu-v6x_default’

固件烧录到飞控板,USB-C连接飞控板,USB-A连接开发电脑
1 | make px4_fmu-v6x_default upload |

QGroundControl烧录预构建的二进制文件(方案三)
https://docs.px4.io/main/zh/config/firmware
PX以太网配置
https://docs.px4.io/main/zh/advanced_config/ethernet_setup#px4-mavlink-serial-port-configuration
- 将飞行控制器通过USB线连接到计算机。
- Open QGroundcontrol > Analyze Tools > MAVLink Console
- 在 MAVLink 控制台中输入命令(将值写入配置文件):
1 | echo DEVICE=eth0 > /fs/microsd/net.cfg |
- 一旦设置了网络配置,您可以断开 USB 电缆。
- 重启飞行控制器以应用设置。
使用 Netplan 进行以太网设置
Holybro Jetson Pixhawk 运营商在 Pixhawk 和 Jetson 之间设有内部网络交换机,可用于 MAVLink 或 ROS 2 通信(或其他任何协议)。虽然不需要连接任何外部线缆,但你仍然需要配置以太网连接,使 Jetson 和 PX4 都在同一子网。
PX4 的默认 IP 地址是 10.41.10.2(PX4 v1.15 及更早版本使用 192.168.0.3),而 Jetson 通常配置为不同子网的默认 IP 地址。为了让这些板子能够通信,它们必须在同一子网。
安装netplan
1 | sudo apt update |
检查 system_networkd 正在运行:
1 | sudo systemctl status systemd-networkd |
如果出现上述情况,说明未运行,执行下列命令
1 | sudo systemctl start systemd-networkd |

打开 Netplan 配置文件(这样我们就能为 Jetson 设置静态 IP)
1 | sudo nano /etc/netplan/01-netcfg.yaml |
这使得 Jetson 在以太网接口上获得了 10.41.10.1 的静态 IP 地址
使用以下命令应用这些更改:
1 | sudo netplan apply |
Pixhawk 以太网地址默认设置为 10.41.10.2,属于同一子网。我们可以在上面测试更改,方法是从 Jetson 终端内 pingPixhawk:
1 | ping 10.41.10.2 |
如果成功,你会看到下面的输出,若未成功则查看上一步PX以太网配置

Jetson 和 Pixhawk 现在可以通过以太网通信。
注意
- ROS 1 + PX4:必须 MAVLink(MAVROS)PX4
- ROS 2 + PX4:优先 uXRCE‑DDS(不用 MAVLink)
MAVLink 设置(ROS1可配置)
MAVLink 是一种用于 Jetson 和 PX4 之间通信的协议。PX4 用户通常使用 MAVSDK 来管理 MAVLink 通信,因为它提供了 MAVLink 协议的简单跨平台和跨编程语言抽象。
内部串口和以太网链路默认配置为使用 MAVLink
https://docs.px4.io/main/en/companion_computer/holybro_pixhawk_jetson_baseboard#mavlink-setup
ROS2设置
为了使用 ROS 2,我们首先需要在 PX4 上运行 XRCE-DDS 中间件客户端,在 Jetson 上运行代理。指令取决于所使用的通信信道(以太网或串口)。
PX4 XRCE-DDS 客户端设置
uXRCE-DDS 客户端默认内置于 PX4 固件中,并通过 XRCE-Agent 向 ROS 2 运行的 DDS 网络暴露预定义的 uORB 主题集。这些暴露的主题集合在构建配置文件中定义
客户端用于与代理通信的信道是通过参数配置的。你可以使用内部串口连接或内部以太网交换机
XRCE-客户端串口设置
Pixhawk TELEM2 与 Jetson THS1 之间存在一条内部串行链路,默认配置为通过 MAVLink 通信。您需要禁用 MAVLink 实例并启用 UXRCE_DDS 配置
在 QGroundControl 参数编辑器中修改参数,或者在 MAVLink shell中使用参数集
Title
有多种方式可以访问 MAVLink 外壳。最简单的方法是通过 Pixhawk USB-C 连接到开发电脑,并使用 QGroundControl MAVLink 控制台 。
在 MAVLink shell 中输入命令:
1 | param set MAV_1_CONFIG 0 # Disable MAVLINK on TELEM2 (so it can be used for XRCE-DDS) |

XRCE-客户端以太网设置
Jetson 和 Pixhawk 之间有一个内部以太网交换机连接。我们配置了两块板使用上述相同的子网。不过我们需要禁用 PX4 以太网端口的 MAVLink 并启用 XRCE-DDS
输入以下命令以更改 MAVLink 壳中的值:
1 | param set MAV_2_CONFIG 0 # Disable MAVLINK on Ethernet (so Ethernet can be used for XRCE-DDS) |

用 UXRCE_DDS_AG_IP 参数将 Jetson 地址设置为 170461697。请注意,这是 10.41.10.1 的 INT32 格式版本(有关如何转换版本的信息,请参见 “启动 uXRCE-DDS 客户端 ”)。
重新启动
检查 XRCE-DDS 客户端是否运行
在 MAVLink shell 中用以下命令检查客户端是否在运行:
1 | uxrce_dds_client status |
输出
1 | INFO [uxrce_dds_client] Running, disconnected |
另外,检查客户端启动时是否已启动的另一种方法是从 MAVLINK shell 获取 dmesg 输出。下面作为 dmesg 日志的一部分的输出会提到 baudrate 和客户端运行的实例(/dev/tty/S4 等于 Holybro Pixhawk 6X 和 6X Pro 的 TELEM2)。
1 | dmesg |
之前参考的是串口模式的日志(/dev/ttyS4),但你现在配置的是以太网 UDP 模式,所以日志里是 init UDP agent,不是 init serial。完全正常
通过串口连接会显示以下信息
1 | Starting UXRCE-DDS Client on /dev/ttyS4 |

XRCE-DDS 代理与 ROS 2 设置
在Jeston安装ROS2
安装XRCE-DDS
安装px4_msg\ px4_ros_com
https://docs.px4.io/main/en/ros2/user_guide#setup-the-agent
启动 XRCE-DDS 代理
根据客户端是为串行还是以太网连接配置,你会用不同的命令启动代理。假设客户端按照上述定义设置:
(串口连接)在 /dev/ttyTHS1 启动代理:
1 | sudo MicroXRCEAgent serial --dev /dev/ttyTHS1 -b 921600 |
(以太网)在 UDP 端口 8888 上启动代理
1 | MicroXRCEAgent udp4 -p 8888 |

启动代理
每次 Jetson 重启时运行 XRCE-DDS 代理,可以创建一个守护进程服务来运行该代理。
创建一个新的服务文件:
1 | sudo nano /etc/systemd/system/microxrceagent.service |
把以下内容粘贴进去:
1 | [Unit] |
保存文件,然后在终端内运行以下操作
1 | sudo systemctl daemon-reload |
然后你可以重启你的 Jetson 主板,检查代理是否在后台运行:
1 | sudo reboot |
如果服务正在运行,你应该会看到这样的输出:

下图表示连接成功

ROS 2 传感器联合测试
可以通过上述安装的 sensor_combined 示例来测试客户端和代理。
1 | ros2 launch px4_ros_com sensor_combined_listener.launch.py |
没有连接是输出
1 | [INFO] [launch]: All log files can be found below /home/nano/.ros/log/2026-05-28-18-55-25-451087-ubuntu-2280 |
连接成功则输出
1 | [sensor_combined_listener-1] RECEIVED SENSOR COMBINED DATA |