1. PX4 ROS2 开发环境搭建与验证
任务目标
在 Ubuntu 22.04 上完成三件事:安装 ROS2 Humble、安装 PX4 工具链并启动 SITL、配置 Micro XRCE-DDS 桥接,最后运行一个最小 ROS2 节点订阅 PX4 发布的 /fmu/out/vehicle_status 话题,确认通信链路打通。
环境与依赖
- Ubuntu 22.04(ROS2 Humble 官方支持版本)
- ROS2 Humble Desktop:
ros-humble-desktop - PX4 源码(v1.14 及以上)与
px4_msgs、px4_ros_com - Micro XRCE-DDS Agent(
MicroXRCEAgent)
安装步骤
# 1. ROS2 Humble
sudo apt update && sudo apt install -y ros-humble-desktop python3-colcon-common-extensions
echo "source /opt/ros/humble/setup.bash" >> ~/.bashrc
# 2. PX4 工具链 + 源码
git clone https://github.com/PX4/PX4-Autopilot.git --recursive ~/PX4-Autopilot
bash ~/PX4-Autopilot/Tools/setup/ubuntu.sh
# 3. Micro XRCE-DDS Agent
git clone https://github.com/eProsima/Micro-XRCE-DDS-Agent.git ~/Micro-XRCE-DDS-Agent
cd ~/Micro-XRCE-DDS-Agent && mkdir build && cd build
cmake .. && make -j$(nproc) && sudo make install
sudo ldconfig /usr/local/lib/
# 4. px4_msgs 与 px4_ros_com
mkdir -p ~/ws_px4/src && cd ~/ws_px4/src
git clone https://github.com/PX4/px4_msgs.git
git clone https://github.com/PX4/px4_ros_com.git
cd ~/ws_px4 && source /opt/ros/humble/setup.bash && colcon build
启动顺序与数据链路
最小验证节点
在 ~/ws_px4/src/px4_ros_com/src/examples/offboard 同级新建 status_listener.cpp,订阅 PX4 的 vehicle_status 并打印解锁状态与飞行模式。
// status_listener.cpp
#include <rclcpp/rclcpp.hpp>
#include <px4_msgs/msg/vehicle_status.hpp>
using px4_msgs::msg::VehicleStatus;
class StatusListener : public rclcpp::Node {
public:
StatusListener() : Node("status_listener") {
auto qos = rclcpp::QoS(rclcpp::KeepLast(10)).best_effort().durability_volatile();
sub_ = create_subscription<VehicleStatus>(
"/fmu/out/vehicle_status", qos,
[this](const VehicleStatus::SharedPtr msg) {
RCLCPP_INFO(get_logger(), "armed=%d nav_state=%d",
msg->arming_state, msg->nav_state);
});
}
private:
rclcpp::Subscription<VehicleStatus>::SharedPtr sub_;
};
int main(int argc, char** argv) {
rclcpp::init(argc, argv);
rclcpp::spin(std::make_shared<StatusListener>());
rclcpp::shutdown();
return 0;
}
在 px4_ros_com/CMakeLists.txt 末尾追加:
add_executable(status_listener src/examples/offboard/status_listener.cpp)
ament_target_dependencies(status_listener rclcpp px4_msgs)
install(TARGETS status_listener DESTINATION lib/${PROJECT_NAME})
运行与验证
# 终端 A:启动 Agent
MicroXRCEAgent udp4 -p 8888
# 终端 B:启动 PX4 SITL
cd ~/PX4-Autopilot
make px4_sitl gz_x500
# 终端 C:编译并运行监听节点
cd ~/ws_px4
source /opt/ros/humble/setup.bash
colcon build --packages-select px4_ros_com
source install/setup.bash
ros2 run px4_ros_com status_listener
通过条件:终端 C 持续打印形如 armed=1 nav_state=2 的日志,且 ros2 topic list 能看到 /fmu/out/vehicle_status。若长时间无输出,检查 Agent 是否在 8888 端口监听、PX4 启动日志中是否出现 XRCE-DDS client connected。