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

相关推荐
YOLO数据集集合8 小时前
UAVDT 无人机车辆检测数据集 - 无人机航拍 | 车辆检测 | 目标检测 | YOLO格式 | 智能交通 | 城市管理 | 多类别数据集 | 计算机视觉
人工智能·yolo·目标检测·机器学习·计算机视觉·目标跟踪·无人机
进制树1 天前
【飞控开发实战·㉒】ROS2无人机应用开发实战:Offboard控制、航点任务、AprilTag降落与避障系统
开发语言·安全·无人机·课程设计
YOLO数据集集合1 天前
火情监测新方案:无人机红外-可见光多模态火点烟雾数据集(含YOLOv11实战)
人工智能·yolo·计算机外设·无人机·无人机数据集·可见光多模态
进制树2 天前
【飞控开发实战·⑲】ROS2无人机开发环境搭建:Jazzy安装、工作空间与hello_drone节点实战
开发语言·安全·无人机·课程设计
向哆哆3 天前
无人机灾害场景人体目标检测数据集分享(适用于YOLO系列深度学习分类检测任务)
yolo·目标检测·无人机
haishikeji696_3 天前
市域低空巡查平台架构|无人机管理系统、飞控管理平台、无人机巡检平台、无人机智慧巡查系统
架构·无人机·低空经济·无人机管理系统·飞控管理平台
Ricardo-Yang3 天前
无人机单目深度估计测试:ZipDepth 与 AerialMetric
人工智能·算法·机器学习·计算机视觉·无人机
沈阳昊天环宇无人机小编辑5 天前
无人机测绘点云实操体验与丹东作业筹备展望,沈阳无人机外出测绘作业
无人机
workflower5 天前
智能无人机成低空经济核心赛道
运维·人工智能·机器学习·机器人·云计算·无人机
tianxuanjg6 天前
0.005mm 高精度 CNC 加工:机器人薄壁复杂零件变形控制与全维度品控方案
经验分享·机器人·无人机·制造·材质