本文记录 YOPO-ROS2 在 ROS 2 Humble 下的构建和运行步骤:先分别编译控制器和传感器仿真器两个工作空间,再用 5 个终端依次启动仿真器、策略节点和可视化,最后整理了三个编译和运行时的常见问题。

项目地址:https://github.com/dreamer198/YOPO-ROS2.git

环境依赖

依赖 版本要求
ROS 2 Humble
CUDA 12.6+
GCC/G++ 11
PyTorch 2.4.1+cu118
Eigen3、PCL、OpenCV、yaml-cpp 系统安装

一、构建

1. Controller 工作空间

1
2
3
4
cd ~/code/YOPO-ROS2/Controller
source /opt/ros/humble/setup.bash
colcon build --packages-select cmake_utils --symlink-install
colcon build

2. Simulator 工作空间

1
2
3
cd ~/code/YOPO-ROS2/Simulator
source /opt/ros/humble/setup.bash
colcon build

3. YOPO 的 Python 依赖

1
2
cd ~/code/YOPO-ROS2/YOPO
pip install -r requirements.txt

二、运行(5 个终端)

终端 1:四旋翼仿真器

1
2
3
4
cd ~/code/YOPO-ROS2/Controller
source /opt/ros/humble/setup.bash
source install/setup.bash
ros2 launch so3_quadrotor_simulator simulator_attitude_control.launch.py

终端 2:CUDA 传感器仿真器

1
2
3
4
cd ~/code/YOPO-ROS2/Simulator
source /opt/ros/humble/setup.bash
source install/setup.bash
ros2 run sensor_simulator sensor_simulator_cuda

终端 3:YOPO 策略节点

1
2
3
4
cd ~/code/YOPO-ROS2/YOPO
source /opt/ros/humble/setup.bash
source ~/code/YOPO-ROS2/Controller/install/setup.bash
python3 test_yopo_ros.py

终端 4:RViz 可视化

1
rviz2 -d ~/code/YOPO-ROS2/YOPO/yopo2.rviz

终端 5:发送目标点

YOPO 的默认目标是 [50, 0, 2],无人机很快就会到达。发送一个新目标点,就能让它重新飞行:

1
2
3
source /opt/ros/humble/setup.bash
ros2 topic pub --once /move_base_simple/goal geometry_msgs/msg/PoseStamped \
"{header: {frame_id: 'world'}, pose: {position: {x: 100.0, y: 20.0, z: 2.0}, orientation: {w: 1.0}}}"

目标坐标修改命令中的 x、y、z 即可。

三、常见问题

1. CUDA 版本不匹配

Simulator 的 CMakeLists.txt 默认要求 CUDA 12.8。本机 CUDA 版本不同(如 12.6)时,修改 Simulator/src/CMakeLists.txt 第 46 行:

1
2
3
4
# 将
find_package(CUDA 12.8 EXACT REQUIRED)
# 改为
find_package(CUDA REQUIRED)

2. RViz 报错找不到 uav.dae

源码中写死了原作者的本地路径。修改 Controller/src/so3_quadrotor_simulator/src/quadrotor_simulator_so3.cpp 第 377 行,改用 ament_index_cpp 动态获取包路径:

1
2
3
4
5
// 将硬编码路径
meshROS.mesh_resource = "file:///home/hu/YOPO_backup/YOPO/Controller/src/so3_quadrotor_simulator/config/uav.dae";
// 改为
std::string pkg_path = ament_index_cpp::get_package_share_directory("so3_quadrotor_simulator");
meshROS.mesh_resource = "file://" + pkg_path + "/config/uav.dae";

修改后重新编译:

1
2
cd ~/code/YOPO-ROS2/Controller
colcon build --packages-select so3_quadrotor_simulator

3. pip 依赖冲突

安装 Python 依赖时,可能出现 numpy、empy 与 ultralytics、bloom 等包的版本冲突警告。这些警告不影响 YOPO 运行,可以忽略。