1. ROS 与 Ardupilot
- ArduPilot功能可以通过ROS进行扩展;
- 推荐使用ROS Noetic 版本,而非ROS2;
- 对于ROS2,目Humble是唯一支持的ROS2版本;
2. ROS with SITL
系统环境:win11,wsl2,Ubuntu20.04
- 安装ROS
https://blog.csdn.net/weixin_43321489/article/details/134681758 - 安装MAVROS
https://ardupilot.org/dev/docs/ros-install.html#installing-mavros - 初始化ROS工作空间(ros需要工作空间)
创建一个目录ardupilot_ros_ws/src,并初始化:
mkdir -p ardupilot_ros_ws/src
cd ardupilot_ws
catkin init
cd src
- 启动SITL仿真,并添加一个UDP Forwarding: 127.0.0.1:14550
cd ~/code/ardupilot/ArduCopter
sim_vehicle.py -v ArduCopter --console --map -w --out=127.0.0.1:14550
- 启动MAVROS并通过UDP连接到SITL
1)新建一个新的bash terminal
2)拷贝一个.launch文件进工作空间并修改连接方式
cd ~/ardupilot_ros_ws/src/
mkdir launch
cd launch
roscp mavros apm.launch apm.launch
sudo apt-get install gedit
gedit apm.launch
将代码的第一行改为UDP连接:
<arg name="fcu_url" default="/dev/ttyACM0:57600" />
改为:
<arg name="fcu_url" default="udp://127.0.0.1:14550@14555" />
保存并退出。
- 使用roslaunch 命令启动相关的ROS节点以连接到SITL
cd ~/ardupilot_ros_ws/src/launch
roslaunch apm.launch
- 启动rqt工具以查看MAVROS与SITL的连接状态,通过MAVROS节点、主题、消息等控制SITL中的飞机
1)新建一个新的bash terminal;
2)输入命令
cd ~/ardupilot_ros_ws
rqt
3)通过MAVROS查看飞机状态
plugins ~> topics ~> topics monitor ~> 勾选下面的topic可以看到通过MAVROS获取的飞机的位置信息:
4)通过MAVROS操控飞机切换GUIDED模式、解锁、起飞
plugins ~> services ~> services caller ~>
3. mavros 使用
使用文档:https://index.ros.org/p/mavros/github-mavlink-mavros/#noetic-overview
开发文档:https://wiki.ros.org/mavros#Usage
3.1 知识碎片
- 可以串口、TCP、UDP连接到飞控;
- 关于坐标系
飞控使用的是NED坐标系,ROS系统使用的是ENU坐标系,注意转换关系;
坐标转换实现在:src/lib/ftf_frame_conversions.cpp 、src/lib/ftf_quaternion_utils.cpp 中; - mavros_extras – extra plugins & node for mavros
- 要看懂mavros 的使用先回ros的基本使用;
- mavros 文档中并没有现成的例子可用和借鉴;