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. 控制飞行并且接收到视频画面

相关推荐
sxgzzn4 小时前
光伏电站运维智能监测与能源管理系统的综合应用
无人机·开关柜局放在线监测·gis局放在线监测·矿用高压电缆绝缘故障检测装置·光伏运维管理系统
workflower5 小时前
汽车自动驾驶9 要素
人工智能·机器学习·重构·云计算·汽车·无人机
GlobalInfo1 天前
2026年全球无人机清洗系统市场深度分析:规模、竞争格局与AI自主作业演进趋势
大数据·人工智能·ai·无人机
zzlyx991 天前
无人机侦测反制系统
无人机
蓝悦无人机1 天前
无人机系列之飞控算法:从PID到AI,飞行控制的核心进化
人工智能·算法·无人机·飞控系统
坐看风云变幻1 天前
Betaflight 开发环境搭建保姆级教程(Ubuntu / Windows+WSL / Docker 三方案 + 官方网址大全)
windows·ubuntu·docker·无人机·飞控·betaflight
YOLO数据集集合1 天前
遥感滑坡图像识别数据集 | 滑坡识别 遥感影像 语义分割 灾害监测 无人机航拍 目标检测 深度学习数据集 计算机视觉9172期
人工智能·yolo·目标检测·计算机视觉·无人机·滑坡
零基础1232 天前
卡车—无人机协同路径规划:八篇前沿论文选读
无人机
QYR-分析2 天前
算力下沉,低空新支点:全球无人机机载计算盒市场竞争与发展研判
云计算·无人机
YOLO数据集集合2 天前
道路与桥梁灾后损伤检测数据集 | 道路损伤 桥梁损坏 灾后评估 无人机巡检 目标检测 YOLO格式 深度学习数据集 计算机视觉10551期
yolo·目标检测·计算机视觉·无人机·桥梁损害·灾后评估