ROS2+Ardupilot+Gazebo通信仿真基本环境搭建

一、准备工作:安装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)

  1. 导入缺失公钥
bash 复制代码
gpg --keyserver hkp://keyserver.ubuntu.com:80 --recv F42ED6FBAB17C654
  1. 将公钥写入 apt 信任列表
bash 复制代码
gpg --export --armor F42ED6FBAB17C654 | sudo apt-key add -

注意:命令末尾 - 不可省略

  1. 刷新软件源
bash 复制代码
sudo apt update

4. 鱼香 ROS 一键安装脚本

bash 复制代码
wget http://fishros.com/install -O fishros && . fishros

交互选项统一选择:1(安装 ROS2 Humble),连续确认全部 1 号选项完成安装。

5. 配置永久 ROS 环境变量

  1. 写入 bashrc 配置文件
bash 复制代码
echo "source /opt/ros/humble/setup.bash" >> ~/.bashrc
  1. 立刻加载环境变量,无需重启终端
bash 复制代码
source ~/.bashrc
  1. 验证 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导入镜像

  1. 打开 Docker Desktop 设置 - Resources WSL Integration
  2. 开启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容器

  1. 进入ROS2_ardupilot_Iris_docker目录(方案一)

    bash 复制代码
    docker compose down
    docker compose up -d
    docker compose exec ardupilot_ros bash

    启动成功

  2. 使用Docker Desktop启动(方案二,推荐!!!)

    点击右边的启动按钮即可

5.Vscode进行容器操作及二次开发

  1. 确保DockerDesktop开启且docker容器启动成功

  2. 打开Vscode,连接

  3. 连接成功

6.仿真测试

  1. 进入ros2_ws目录,启动带有摄像头的gazebo仿真

    bash 复制代码
    cd ~/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
  2. 新建终端启动mavproxy

    bash 复制代码
    source /opt/ros/humble/setup.bash
    source ~/ros2_ws/install/setup.bash
    mavproxy.py --console --map --aircraft test --master=:14550
  3. 控制飞行并且接收到视频画面

相关推荐
嘉子的秃头日记1 天前
TRO 2026|无人机能不能像积木一样,拼出不同形态?
无人机
YOLO数据集集合1 天前
无人机航拍地质灾害智能识别 山体滑坡实例分割数据集落地实战 | 泥石流监测 道路险情封堵 深度学习模型训练方案10296期
人工智能·深度学习·yolo·目标检测·无人机
海砥装备HardAus1 天前
大载重工业无人机高空风扰建模与ADRC自抗扰抗风控制实现
无人机·adrc·工业无人机
海砥装备HardAus1 天前
大载重工业无人机动力容错控制:单电机失效下的应急重构算法设计
算法·重构·嵌入式·无人机
中科固源1 天前
飞控里的“暗战”:无人机软件栈中的控制权风险
网络安全·无人机·低空经济
YOLO数据集集合1 天前
无人机风电设备智能巡检 风机叶片缺陷目标检测数据集实战 | 表面腐蚀漏油识别 工业视觉质检 深度学习模型训练落地10337期
人工智能·深度学习·目标检测·计算机视觉·无人机
飞手早知道2 天前
一站式选机服务落地 赋能无人机行业采购提质增效
无人机
LONGZETECH2 天前
无人机仿真教学软件选型实战:5 个硬核技术维度,避开实训建设踩坑
3d·无人机·交互·cocos2d
渡众机器人2 天前
智能体对抗挑战赛和空地协同侦排挑战赛的报名流程
人工智能·自动驾驶·无人机·智能体·报名流程