一、准备工作:安装ROS2
1. 确认系统版本
ROS2 Humble 仅适配 Ubuntu 22.04 LTS(Jammy),执行命令校验系统:
bash
lsb_release -a
输出信息需包含 Ubuntu 22.04 (Jammy Jellyfish)。
2. 更新系统并安装基础工具
bash
sudo apt update
sudo apt upgrade -y
3. 解决 apt 公钥缺失报错(NO_PUBKEY F42ED6FBAB17C654)
- 导入缺失公钥
bash
gpg --keyserver hkp://keyserver.ubuntu.com:80 --recv F42ED6FBAB17C654
- 将公钥写入 apt 信任列表
bash
gpg --export --armor F42ED6FBAB17C654 | sudo apt-key add -
注意:命令末尾
-不可省略
- 刷新软件源
bash
sudo apt update
4. 鱼香 ROS 一键安装脚本
bash
wget http://fishros.com/install -O fishros && . fishros
交互选项统一选择:1(安装 ROS2 Humble),连续确认全部 1 号选项完成安装。
5. 配置永久 ROS 环境变量
- 写入 bashrc 配置文件
bash
echo "source /opt/ros/humble/setup.bash" >> ~/.bashrc
- 立刻加载环境变量,无需重启终端
bash
source ~/.bashrc
- 验证 ROS 发行版
bash
echo $ROS_DISTRO
正常输出:humble
二、验证 ROS2 完整安装
1. 话题通信测试(talker/listener)
终端 1(发布节点):
bash
ros2 run demo_nodes_cpp talker
终端 2(订阅节点):
bash
ros2 run demo_nodes_cpp listener
listener 持续打印接收字符串即代表通信正常。
2. 图形海龟仿真测试
终端 1(海龟画布):
bash
ros2 run turtlesim turtlesim_node
终端 2(键盘控制):
bash
ros2 run turtlesim turtle_teleop_key
选中控制终端,通过上下左右方向键可操控海龟移动,图形功能正常即安装完整。
ROS2和Ardupilot的通信(基于MAVROS,本质上还是UDP转发)
1.安装Mavros
安装MAVROS。这是连接ROS2和Ardupilot飞控的桥梁
bash
# 创建工作空间
mkdir -p ~/ros2_mavros_ws/src
cd ~/ros2_mavros_ws/src
# 克隆mavros和相关的mavlink包
git clone https://github.com/mavlink/mavros.git
git clone https://github.com/mavlink/mavlink.git
# 安装依赖并编译
cd ~/ros2_mavros_ws
rosdep install --from-paths src --ignore-src -r -y
colcon build --symlink-install
可能遇到的问题
bash
RROR: pip's dependency resolver does not currently take into account all the packages that are installed. This behaviour is the source of the following dependency conflicts.
colcon-core 0.20.1 requires setuptools<80,>=30.3.0, but you have setuptools 82.0.1 which is incompatible.
---
Finished <<< mavlink [15.8s]
Starting >>> libmavconn
解决
bash
pip3 install "setuptools<80.0.0"
降级完成后,再次运行编译命令即可:
bash
colcon build --symlink-install
装好 ROS2 后写入 bashrc
bash
echo "source /opt/ros/humble/setup.bash" >> ~/.bashrc
echo "source ~/ros2_mavros_ws/install/setup.bash" >> ~/.bashrc
source ~/.bashrc
2.启动gazebo和ardupilot
启动gazebo
bash
cd ardupilot_gazebo
gz sim -v4 -r iris_runway.sdf --render-engine ogre

启动ardupilot 将数据通过14550端口转发出去,并可以通过该端口接受命令,双向通信
bash
cd ardupilot
sim_vehicle.py -v ArduCopter -f gazebo-iris --model JSON --map --console --out=udp:172.22.46.xx:14550
等待传感器初始化完成后解锁执行任务
bash
mode guided // 切换到引导模式
arm throttle //解锁
3.进入ros2_mavros_ws执行ros连接
bash
cd ros2_mavros_ws
ros2 run mavros mavros_node --ros-args -p fcu_url:=udp://:14550@ -p system_id:=1 -p component_id:=240 -p target_system_id:=1 -p target_component_id:=1 -p dialect:=ardupilotmega
4.查看通信话题
任意打开中断执行
bash
source /opt/ros/humble/setup.bash
source ~/ros2_mavros_ws/install/setup.bash
ros2 topic echo /uas1/mavros/state
成功通信

ROS2和Ardupilot的通信(基于DDS转发,极致的性能)
建议基于WSL安装
1.下载已经编译完成的ROS2和Ardupilot整合包
假设下载路径为d/vm_transfer/

2.拷贝文件至WSL
bash
cp /mnt/d/vm_transfer/ardupilot_ros_image.tar.gz ~/
cp /mnt/d/vm_transfer/ROS2_ardupilot_Iris_docker.zip ~/
unzip ROS2_ardupilot_Iris_docker.zip #解压到当前目录
3.借用windows已存在的Docker Desktop导入镜像
- 打开 Docker Desktop 设置 - Resources WSL Integration
- 开启ubuntu-20.04开关,Apply & restart
3. 关闭当前WSL终端,重新打开WSL窗口 或打开powershell bash wsl --shutdown 4. 再执行导入命令: bash gunzip -c ardupilot_ros_image.tar.gz | docker load docker images # 能看到原镜像名+标签即迁移完成
4.启动docker容器
-
进入ROS2_ardupilot_Iris_docker目录(方案一)
bashdocker compose down docker compose up -d docker compose exec ardupilot_ros bash启动成功

-
使用Docker Desktop启动(方案二,推荐!!!)
点击右边的启动按钮即可
5.Vscode进行容器操作及二次开发
-
确保DockerDesktop开启且docker容器启动成功
-
打开Vscode,连接

-
连接成功

6.仿真测试
-
进入ros2_ws目录,启动带有摄像头的gazebo仿真
bashcd ~/ros2_ws rm -rf build/ install/ log/ colcon build source /opt/ros/humble/setup.bash source ~/ros2_ws/install/setup.bash ros2 launch ardupilot_gz_bringup iris_runway.launch.py -
新建终端启动mavproxy
bashsource /opt/ros/humble/setup.bash source ~/ros2_ws/install/setup.bash mavproxy.py --console --map --aircraft test --master=:14550 -
控制飞行并且接收到视频画面
