工具包概要—基于melodic
发布的 持续集成: 40 / 40 已文档化
MAVROS – 用于ROS的可扩展MAVLink通信节点,具有地面控制站代理。
- 维护者状态: 开发中
- 维护者: Vladimir Ermakov vooon341@gmail.com
- 作者: Vladimir Ermakov vooon341@gmail.com
- 许可证: GPLv3, LGPLv3, BSD
- 错误 / 功能跟踪器:
https://github.com/mavlink/mavros/issues
- 源代码: git
https://github.com/mavlink/mavros
.git (分支: master)
mavros工具包
- 工具包概要---基于melodic
- (1)概述
- (2)节点
- (3)用法
- (4)连接 URL
- (5)实用命令
- (6)插件———内容太多,用到就补
- 1. 3dr_radio
- 2. actuator_control ==重点== 接收来自 FCU 的飞行器执行器控制命令的话题。
- 3. hil_controls ---将仿真飞行控制器的控制指令发布到 `~mavros/hil_actuator_controls` 话题。
- 4. command ==重点==--通过服务 `~mavros/cmd/command` 发送任何 COMMAND_LONG 到飞控单元(FCU)
- 5. ftp ---用于通过 FTP 服务与飞控通信,可以进行文件传输和管理。
- 6. global_position ---发布全局定位信息到话题 `~mavros/global_position/global`
- 7. imu_pub ==重点== 发布 IMU(惯性测量单元)数据到话题 `~mavros/imu/data`
- 8. local_position ---发布本地位置信息到话题 `~mavros/local_position/local`
- 9. manual_control ---订阅来自手动控制器的控制指令,发布到话题 `~mavros/manual_control/send`
- 10. param ---通过参数服务 `~mavros/param/...` 进行飞控参数的获取、设置和管理
- 11. rc_io ---订阅遥控器输入信号的话题
- 12. safety_area ---订阅安全区域信息的话题。
- 13. setpoint_accel ---订阅加速度设定值的话题。
- 14. setpoint_attitude ---订阅姿态设定值的话题。
- 15. setpoint_position ---订阅位置设定值的话题。
- 16. setpoint_raw ---订阅原始控制输入设定值的话题。
- 17. setpoint_velocity ---订阅速度设定值的话题。
- 18. sys_status --- 发布系统状态信息到话题 `~mavros/sys_status`。
- 19. sys_time ----发布系统时间信息到话题 `~mavros/sys_time`。
- 20. vfr_hud ---发布飞行数据信息到话题 `~mavros/vfr_hud`。
- 21. waypoint ---发布航点信息到话题 `~mavros/mission/waypoints`
- 22. 注意事项
这里是所列出的 mavros包的相关依赖:
- angles: 提供角度表示和转换的工具库。
- catkin: 用于构建 ROS 软件包的构建工具。
- cmake_modules: 包含用于 CMake 的一些常用模块。
- diagnostic_msgs: ROS 中用于诊断消息的消息定义。
- diagnostic_updater: 提供用于发布诊断状态的工具。
- eigen_conversions: 用于 Eigen 库与 ROS 几何消息类型之间的转换。
- geographic_msgs: 定义了与地理位置相关的 ROS 消息类型。
- geometry_msgs: ROS 中用于几何数据传输的消息定义。
- libmavconn MAVLink 连接库,用于 ROS 中的 MAVROS。
- mavlink: MAVLink 消息和协议的实现。
- mavros_msgs: MAVROS 的 ROS 消息和服务定义。
- message_runtime: ROS 消息运行时库。
- nav_msgs: ROS 中用于导航相关消息的定义。
- pluginlib: ROS 中用于实现插件库的工具。
- rosconsole_bridge: ROS 中用于日志记录的桥接库。
- roscpp: ROS 中用于 C++ 开发的库。
- rospy: ROS 中用于 Python 开发的库。
- sensor_msgs: ROS 中用于传感器数据传输的消息定义。
- std_msgs: ROS 中标准消息类型的定义。
- std_srvs: ROS 中标准服务类型的定义。
- tf2_eigen: 用于 ROS 中 TF2 库与 Eigen 库之间的转换。
- tf2_ros: 用于 ROS 中 TF2 库的 ROS 接口。
- trajectory_msgs: ROS 中用于轨迹规划相关消息的定义。
(1)概述
这个软件包提供了针对各种自动驾驶仪(如PX4,Ardupilot)使用 MAVLink 通信协议的通信驱动程序。此外,它还提供了用于地面控制站(例如 QGroundControl)的 UDP MAVLink 桥接功能。
UDP MAVLink指的是使用UDP(User Datagram Protocol)作为传输协议的MAVLink通信。MAVLink(Micro Air Vehicle Link)是一种轻量级的消息通信协议,用于在无人机系统中传输数据和命令。UDP MAVLink桥接是指通过UDP协议在地面控制站(如QGroundControl)和无人机之间传输MAVLink消息的功能。
使用UDP作为传输协议的主要特点包括:
-
无连接性:UDP是无连接的传输协议,不像TCP需要建立和维护连接。这意味着通信的开销更小,但也可能导致数据丢失或乱序。
-
实时性:UDP不保证数据的传输顺序和可靠性,但适用于需要低延迟和实时性的应用,例如在无人机控制中需要快速响应的情况。
-
简单性:UDP相对于TCP更简单,没有建立连接和维护连接的过程,通信开销较低。
因此,UDP MAVLink桥接允许地面控制站通过UDP协议与无人机通信,实现实时的MAVLink消息传输,用于监控、控制和交互无人机系统。
主要节点可以通过插件(请参阅 pluginlib)进行扩展。同时也请查看 mavros_extras 软件包。
(2)节点
1. mavros_node
主要通信节点
a.订阅的话题(到自动驾驶仪去)
mavlink/to (mavros_mags/Mavlink)
- mavlink流到自动驾驶仪
文件:mavros_msgs/Mavlink.msg
原始消息定义:
# Mavlink消息传输类型.
#
# 用于通过ROS主题传输 `mavlink_message_t` 的类型
#
# :framing_status(帧解码状态):
# 帧解码状态:OK(正常)、CRC错误、坏签名(mavlink v2.0)
# 您可以简单地丢弃所有非有效的消息。
# 用于GCS桥接器来传输未知消息。
#
# :magic(魔法数):
# STX字节,用于确定协议版本 v1.0 或 v2.0。
#
# 请使用 `mavros_msgs::mavlink::convert()` 函数
# 来在 ROS 消息类型和 MAVLink 消息类型之间进行转换。
# mavlink_framing_t enum :定义了几种帧解析状态:
uint8 FRAMING_OK = 1 #帧解析正常。
uint8 FRAMING_BAD_CRC = 2 #校验错误。
uint8 FRAMING_BAD_SIGNATURE = 3 #签名错误。
# stx values
uint8 MAVLINK_V10 = 254 # MAVLink 协议版本 v1.0 的起始字节。
uint8 MAVLINK_V20 = 253 # MAVLink 协议版本 v2.0 的起始字节。
std_msgs/Header header
uint8 framing_status
uint8 magic # STX byte
uint8 len
uint8 incompat_flags
uint8 compat_flags
uint8 seq
uint8 sysid
uint8 compid
uint32 msgid # 24-bit message id
uint16 checksum
uint64[] payload64
uint8[] signature # optional signature
消息结构:
std_msgs/Header header
:消息头,通常包含时间戳等信息。uint8 framing_status
:帧解析状态,使用mavlink_framing_t
中的枚举值。uint8 magic
:STX 字节,用于指示协议版本。uint8 len
:消息的有效载荷长度。uint8 incompat_flags
:不兼容标志,用于指示消息不兼容的特性。uint8 compat_flags
:兼容标志,用于指示消息兼容的特性。uint8 seq
:消息序列号,用于消息的顺序控制。uint8 sysid
:系统 ID,标识消息发送者的系统。uint8 compid
:组件 ID,标识消息发送者的组件。uint32 msgid
:消息 ID,指示消息的类型。uint16 checksum
:消息的 CRC 校验和。uint64[] payload64
:64 位整数数组,消息的有效载荷。uint8[] signature
:可选的消息签名,用于验证消息的完整性和来源。
紧凑型消息定义:
uint8 FRAMING_OK=1
uint8 FRAMING_BAD_CRC=2
uint8 FRAMING_BAD_SIGNATURE=3
uint8 MAVLINK_V10=254
uint8 MAVLINK_V20=253
std_msgs/Header header
uint8 framing_status
uint8 magic
uint8 len
uint8 incompat_flags
uint8 compat_flags
uint8 seq
uint8 sysid
uint8 compid
uint32 msgid
uint16 checksum
uint64[] payload64
uint8[] signature
b. 发布的话题(从自动驾驶仪来,相比订阅 + 诊断)
-
mavlink/from (mavros_mags/Mavlink)
mavlink流 来自 自动驾驶仪
代码与消息的结构如上 -
诊断 diagnostic(diagnostic_msgs/DiagnosticStatus)
诊断状态信息。
原始消息定义:
# This message holds the status of an individual component of the robot.
# 该消息保存机器人各个组件的状态
# 可能的操作级别
byte OK=0 #正常运行。
byte WARN=1 #警告状态。
byte ERROR=2 #错误状态。
byte STALE=3 #过时状态。
byte level # 操作级别,参考上述枚举值。
string name # 报告的测试或组件的描述
string message # 状态说明
string hardware_id # 硬件的唯一标识字符串。
KeyValue[] values # 与状态相关的值数组
紧凑型消息定义:
byte OK=0
byte WARN=1
byte ERROR=2
byte STALE=3
byte level
string name
string message
string hardware_id
diagnostic_msgs/KeyValue[] values
c. 参数
-
~system_id (整数,默认值:1)
节点 MAVLink 系统 ID。 -
~component_id (整数,默认值:240)
节点 MAVLink 组件 ID。 -
~target_system_id (整数,默认值:1)
飞控单元 (FCU) MAVLink 系统 ID。 -
~target_component_id (整数,默认值:1)
FCU MAVLink 组件 ID。 -
~startup_px4_usb_quirk (布尔值,默认值:false)
是否定义应用于 PX4 的特殊处理。 -
~plugin_blacklist (字符串数组,默认值:[])
别名黑名单(glob 语法,示例:[‘rc*’])。 -
~plugin_whitelist (字符串数组,默认值:[])
别名白名单(glob 语法,覆盖黑名单)。 -
~fcu_url (字符串,默认值:/dev/ttyACM0:57600)
FCU 连接 URL。(系统与FCU通道路径) -
~fcu_protocol (字符串,默认值:v2.0)
MAVLink 协议版本。支持的版本有:“v1.0”,"v2.0"在版本 0.18 中新增 -
~gcs_url (字符串,默认值:udp://@)
地面控制站 (GCS) 桥接器连接 URL。
2. gcs_bridge
附加代理。旧名称 ros_udp
a.订阅的话题 (从自动驾驶仪来)
mavlink/from (mavros_mags/Mavlink)
来自自动驾驶仪的 Mavlink 流
b.发布的话题(到自动驾驶仪去)
mavlink/to (mavros_mags/Mavlink)
mavlink流到自动驾驶仪
c.参数( gcs_url )
~gcs_url (string, default: udp://@)
Connection URL.
3. event_launcher
监听布防状态、触发事件并运行程序。示例配置
配置文件(yaml)
YAML(YAML Ain’t Markup Language)是一种人类友好的数据序列化格式,它被设计用来表示数据的层次结构和关联性,适用于配置文件、数据传输、或者其他需要结构化数据的场景。YAML 不是一种编程语言,而是一种数据序列化格式,旨在提供一种简洁、易读的方式来表达数据。
# event_launcher示例配置
# 在解锁/上锁变化时进行通知
arming_notify: # 用于日志记录的进程名称
event: armed, disarmed # 以逗号分隔的事件列表
action: run run # 动作列表,空格分隔也可以
shell: notify-send '无人机解锁状态' '已变更' # 或许以后会提供一些环境变量
# 可以定义自定义的动作源(std_srvs/Trigger)
mytrigger: # 这是事件源的名称
service: ~trigger_notify
trigger_notify:
event: mytrigger
action: run # 触发器只会生成一个事件
shell: notify-send '我的触发器' '已调用'
# 可以使用多个事件源
othertrigger:
service: ~trigger_stop
trigger_notify2:
event: mytrigger, othertrigger
action: run, stop # 在这个例子中,stop不会执行任何操作,因为notify-send不会阻塞
shell: # 数组形式简化了解析步骤
- notify-send
- 触发器 #2
- 已启动
# rosbag示例
start_recorder:
service: start_recorder
start_talker:
service: start_talker
start_launch:
service: start_launch
stop_all:
service: stop_all
wireshark:
service: run_wireshark
# 环境变量在第一个元素中进行扩展
trigger_wireshark:
event: wireshark, stop_all
action: run, stop
shell:
- $HOME/bin/al76-wireshark.sh # 会被扩展
- $PWD # 不会被扩展
rosbag_armed:
event: [armed, disarmed, start_recorder, stop_all] # 数组形式也可以
action: run, stop, run, stop
shell: rosrun rosbag record -a -x '/mavlink/.*' --lz4 -o 'uav'
rosrun_talker:
event: start_talker, stop_all
action: run, stop
shell: rosrun roscpp_tutorials talker
roslaunch_triggered:
event: start_launch, stop_all
action: run, stop
logfile: /tmp/launch.log
shell: roslaunch roscpp_tutorials talker_listener.launch
不知道有什么用
a.订阅的话题
mavros/state (mavros_msgs/State)
解锁事件的消息来源
mavros/state
是指mavros_msgs/State
类型的 ROS 主题(ROS topic)。在 MAVROS(MAVLink ROS包)中,mavros/state
主题用于发布飞行控制器(FCU)的状态信息(例如飞行模式、解锁状态、连接状态等),包括**飞行器的解锁状态(arming state)**以及其他与飞行状态相关的信息。
原始消息定义:
# 当前自动驾驶仪状态
#
# 已知的飞行模式请参考以下链接:[http://wiki.ros.org/mavros/CustomModes]
#
# 关于系统状态值,请参阅以下链接:
#(https://mavlink.io/en/messages/common.html#MAV_STATE)
std_msgs/Header header #ROS 消息头,包含时间戳等标准信息,用于标识消息的来源和时间。
bool connected #表示自动驾驶仪是否连接到系统。
bool armed #表示自动驾驶仪是否处于解锁状态(armed)。
bool guided #表示自动驾驶仪是否处于引导模式(guided mode)
bool manual_input #表示是否有手动输入(manual input)。
string mode #表示当前的飞行模式或运行模式。
uint8 system_status #表示自动驾驶仪的系统状态。`0` 表示未初始化,`1` 表示正在启动,`2` 表示正在校准等。
# 不同飞行模式(flight mode)或操作模式(operation mode)的名称
string MODE_APM_PLANE_MANUAL = MANUAL #手动模式
string MODE_APM_PLANE_CIRCLE = CIRCLE #环绕模式
string MODE_APM_PLANE_STABILIZE = STABILIZE #稳定模式
string MODE_APM_PLANE_TRAINING = TRAINING #训练模式
string MODE_APM_PLANE_ACRO = ACRO #特技模式
string MODE_APM_PLANE_FBWA = FBWA #自动控制下的前向飞行模式
string MODE_APM_PLANE_FBWB = FBWB #另一种自动控制下的前向飞行模式
string MODE_APM_PLANE_CRUISE = CRUISE #巡航模式,飞行器以稳定的速度和高度飞行。
string MODE_APM_PLANE_AUTOTUNE = AUTOTUNE #自动调谐模式,用于自动优化飞行控制参数。
string MODE_APM_PLANE_AUTO = AUTO #自动模式,飞行器根据预设的任务和航点自主飞行。
string MODE_APM_PLANE_RTL = RTL #返航模式,飞行器返回起飞点。
string MODE_APM_PLANE_LOITER = LOITER #留待模式,飞行器在指定区域内盘旋等待指令。
string MODE_APM_PLANE_LAND = LAND #着陆模式,飞行器自动降落到指定位置。
string MODE_APM_PLANE_GUIDED = GUIDED #引导模式,飞行器根据操作员指令进行导航和飞行。
string MODE_APM_PLANE_INITIALISING = INITIALISING #初始化中,飞行器正在初始化系统。
string MODE_APM_PLANE_QSTABILIZE = QSTABILIZE #四旋翼稳定模式,四旋翼飞行器的稳定模式。
string MODE_APM_PLANE_QHOVER = QHOVER #四旋翼悬停模式,四旋翼飞行器的悬停模式。
string MODE_APM_PLANE_QLOITER = QLOITER #四旋翼留待模式,四旋翼飞行器在指定区域内盘旋等待指令。
string MODE_APM_PLANE_QLAND = QLAND #四旋翼着陆模式,四旋翼飞行器的自动着陆模式。
string MODE_APM_PLANE_QRTL = QRTL #四旋翼返航模式,四旋翼飞行器的返航模式。
# 无人直升机
string MODE_APM_COPTER_STABILIZE = STABILIZE #稳定模式,无人直升机在此模式下保持稳定飞行。
string MODE_APM_COPTER_ACRO = ACRO #特技模式,允许无人直升机执行空中特技和动作。
string MODE_APM_COPTER_ALT_HOLD = ALT_HOLD #定高模式,无人直升机在此模式下会保持固定高度。
string MODE_APM_COPTER_AUTO = AUTO #自动模式,无人直升机根据预设的任务和航点自主飞行。
string MODE_APM_COPTER_GUIDED = GUIDED #引导模式,无人直升机根据操作员指令进行导航和飞行。
string MODE_APM_COPTER_LOITER = LOITER #留待模式,无人直升机在指定区域内盘旋等待指令。
string MODE_APM_COPTER_RTL = RTL #返航模式,无人直升机返回起飞点。
string MODE_APM_COPTER_CIRCLE = CIRCLE #- 环绕模式,无人直升机围绕一个固定点飞行。
string MODE_APM_COPTER_POSITION = POSITION #定点模式,无人直升机保持特定位置。
string MODE_APM_COPTER_LAND = LAND #着陆模式,无人直升机自动降落到指定位置。
string MODE_APM_COPTER_OF_LOITER = OF_LOITER #光流留待模式,利用光流传感器在指定区域内盘旋等待指令。
string MODE_APM_COPTER_DRIFT = DRIFT #漂移模式,无人直升机在此模式下会保持漂移状态。
string MODE_APM_COPTER_SPORT = SPORT #运动模式,允许无人直升机进行高速运动。
string MODE_APM_COPTER_FLIP = FLIP #翻滚模式,无人直升机可以执行翻滚动作。
string MODE_APM_COPTER_AUTOTUNE = AUTOTUNE #自动调谐模式,用于自动优化飞行控制参数。
string MODE_APM_COPTER_POSHOLD = POSHOLD #定位保持模式,无人直升机保持当前位置。
string MODE_APM_COPTER_BRAKE = BRAKE #刹车模式,无人直升机在此模式下会立即停止。
string MODE_APM_COPTER_THROW = THROW #抛掷模式,无人直升机可以在空中抛掷。
string MODE_APM_COPTER_AVOID_ADSB = AVOID_ADSB #避障模式,无人直升机根据ADS-B信息避障飞行。
string MODE_APM_COPTER_GUIDED_NOGPS = GUIDED_NOGPS #无GPS引导模式,无人直升机在无GPS信号的情况下进行引导和飞行
# 地面车(APM ROVER)的不同模式或操作模式
string MODE_APM_ROVER_MANUAL = MANUAL #手动模式,地面车完全由操作员手动控制。
string MODE_APM_ROVER_LEARNING = LEARNING #学习模式,用于地面车的学习和训练。
string MODE_APM_ROVER_STEERING = STEERING #转向模式,地面车在此模式下仅进行转向控制。
string MODE_APM_ROVER_HOLD = HOLD #保持模式,地面车在此模式下保持当前位置。
string MODE_APM_ROVER_AUTO = AUTO #自动模式,地面车根据预设的任务和航点自主运行。
string MODE_APM_ROVER_RTL = RTL #返航模式,地面车返回指定的起始位置。
string MODE_APM_ROVER_GUIDED = GUIDED #引导模式,地面车根据操作员指令进行导航和运行。
string MODE_APM_ROVER_INITIALISING = INITIALISING #初始化中,地面车正在进行系统初始化。
# PX4 系统的不同飞行模式或操作模式。
string MODE_PX4_MANUAL = MANUAL #手动模式,飞行器完全由操作员手动控制。
string MODE_PX4_ACRO = ACRO #特技模式,允许飞行器执行空中特技和动作。
string MODE_PX4_ALTITUDE = ALTCTL #定高模式,飞行器在此模式下会保持固定高度。
string MODE_PX4_POSITION = POSCTL #位置模式,飞行器在此模式下会保持固定位置。
string MODE_PX4_OFFBOARD = OFFBOARD #离板模式,允许飞行器根据外部指令进行飞行。
string MODE_PX4_STABILIZED = STABILIZED #稳定模式,飞行器保持稳定飞行。
string MODE_PX4_RATTITUDE = RATTITUDE #姿态反馈模式,飞行器根据姿态反馈进行飞行。
string MODE_PX4_MISSION = AUTO.MISSION #自动任务模式,飞行器根据预设的任务自主飞行。
string MODE_PX4_LOITER = AUTO.LOITER #留待模式,飞行器在指定区域内盘旋等待指令。
string MODE_PX4_RTL = AUTO.RTL #返航模式,飞行器返回指定的起始位置。
string MODE_PX4_LAND = AUTO.LAND #着陆模式,飞行器自动降落到指定位置。
string MODE_PX4_RTGS = AUTO.RTGS #自动跟随模式,飞行器根据目标自动跟随。
string MODE_PX4_READY = AUTO.READY #就绪模式,飞行器处于准备起飞状态。
string MODE_PX4_TAKEOFF = AUTO.TAKEOFF #起飞模式,飞行器自动起飞到指定高度。
b.服务
<trigger_event> (std_srvs/Trigger)
可选事件触发器。您可以使用配置创建多个服务。
原始消息定义:
bool success # 指示已成功运行已触发的服务
string message # informational, e.g. for error messages
c.参数
以下是关于事件处理的配置说明:
~<event_name>/service (string)
:- 创建由服务触发的事件(使用名称
<event_name>
)。服务的参数值将触发此事件。
- 创建由服务触发的事件(使用名称
~<event_handler>/event (string[])
:- 指定由处理程序处理的事件列表。
~<event_handler>/action (string[])
:- 指定对应事件触发时要执行的操作列表。支持的操作包括
run
(运行)和stop
(停止)。
- 指定对应事件触发时要执行的操作列表。支持的操作包括
~<event_handler>/shell (string)
:- 指定在事件触发时要执行的命令。
~<event_handler>/logfile (string, default: "")
:- 指定用于保存命令的标准输出和错误输出的文件路径。此项是可选的。
这些配置项用于定义事件处理系统中的事件触发、操作和命令执行方式。
- 指定用于保存命令的标准输出和错误输出的文件路径。此项是可选的。
(3)用法
以下是关于在不同飞控系统(PX4 和 ArduPilot/APM)上启动示例配置的说明:
如果飞控系统使用 PX4 原生堆栈,请使用以下命令启动示例配置:
roslaunch mavros px4.launch
如果飞控系统使用 ArduPilot/APM 堆栈固件,请使用以下命令启动示例配置:
roslaunch mavros apm.launch
各种 mavros 插件的示例配置也可以在相应命名的 YAML 文件中找到。有关在 APM 和 PX4 堆栈之间进行选择的详细信息,请查阅Pixhawk
硬件说明:
- APM2.5/2.6 始终使用 APM 堆栈。
- 从制造商那里获得的 Pixhawk 飞控通常带有 APM 堆栈。
- 可以使用 QGC(QGroundControl)或通过上传 make 目标将 Pixhawk 刷写为 PX4 固件。
- 如果不确定您的飞控单元(FCU)运行的是什么固件,请启动
apm.launch
并查看诊断信息。从 mavros 0.11 版本开始,它可以识别飞控单元的 mavlink 枚举的字符串表示形式。对于旧版本,您需要手动在 mavlink 文档中查找飞控类型的值。
(4)连接 URL
以下是关于连接定义的 URL 的说明,您可以使用任何支持的类型连接飞控单元(FCU)和地面站(GCS)。
支持的 URL 格式包括:
- 串口连接:
/path/to/serial/device[:baudrate]
- 串口连接(带 sysid 和 compid 参数):
serial:///path/to/serial/device[:baudrate][/?ids=sysid,compid]
- 带硬件流控的串口连接:
serial-hwfc:///path/to/serial/device[:baudrate][?ids=sysid,compid]
- UDP 连接:
udp://[bind_host][:port]@[remote_host][:port][/?ids=sysid,compid]
- UDP 广播连接:
udp-b://[bind_host][:port]@[:port][/?ids=sysid,compid]
- TCP 客户端连接:
tcp://[server_host][:port][/?ids=sysid,compid]
- TCP 服务器连接:
tcp-l://[bind_host][:port][/?ids=sysid,compid]
注意事项:
- URL 中的 ids 参数会覆盖由参数
~system_id
和~component_id
指定的值。 - baudrate 的默认值为 57600。
- bind_host 的默认值为 “0.0.0.0”(IPv4 ANY)。
- remote_host 默认为未知。mavros 将在 bind_host:port 上等待数据。
- server_host 的默认值为 “localhost”。
- port 的默认值:UDP 绑定端口为 14555,UDP 远程端口为 14550,TCP 端口为 5760。
- UDP 广播用于发现阶段,后续将切换到 GCS 地址。
- 目前仅支持 IPv4。
这些说明提供了各种连接 URL 的格式和参数,您可以根据需要选择适合的连接类型来连接到飞控单元或地面站。
(5)实用命令
所有实用程序都提供 --help 和 --help 信息。
1. mavcmd
mavcmd [-h] [-n MAVROS_NS] [-v] [--wait]
{long,int,sethome,takeoff,land,takeoffcur,landcur,trigger_control}
...
用于向 MAVLink 设备发送命令的命令行工具。
位置参数:
{long,int,sethome,takeoff,land,takeoffcur,landcur,trigger_control}
long 发送任意命令(COMMAND_LONG)
int 发送任意命令(COMMAND_INT)
sethome 请求更改家庭位置
takeoff 请求起飞
land 请求降落
takeoffcur 请求从当前 GPS 坐标起飞
landcur 请求在当前 GPS 坐标降落
trigger_control 控制机载摄像头触发系统(PX4)
可选参数:
-h, --help 显示帮助信息并退出
-n MAVROS_NS, --mavros-ns MAVROS_NS
ROS 节点命名空间
-v, --verbose 显示详细输出
--wait 等待建立 FCU 连接```
2. mavftp (只有PX4有)
用法: mavparam [-h] [-n MAVROS_NS] [-v] {load,dump,get,set} ...
用于从 MAVLink 设备获取、设置参数的命令行工具。
位置参数:
{load,dump,get,set}
load 从文件加载参数
dump 将参数保存到文件
get 获取参数
set 设置参数
可选参数:
-h, --help 显示帮助信息并退出
-n MAVROS_NS, --mavros-ns MAVROS_NS
ROS 节点命名空间
-v, --verbose 显示详细输出
3. mavparam
用法: mavparam [-h] [-n MAVROS_NS] [-v] {load,dump,get,set} ...
用于从 MAVLink 设备获取、设置参数的命令行工具。
位置参数:
{load,dump,get,set}
load 从文件加载参数
dump 将参数保存到文件
get 获取参数
set 设置参数
可选参数:
-h, --help 显示帮助信息并退出
-n MAVROS_NS, --mavros-ns MAVROS_NS
ROS 节点命名空间
-v, --verbose 显示详细输出
4. mavsafety
用法: mavsafety [-h] [-n MAVROS_NS] [-v] {arm,disarm,safetyarea} ...
用于在 MAVLink 设备上操作安全性的命令行工具。
位置参数:
{arm,disarm,safetyarea}
arm 启动电机
disarm 停止电机
safetyarea 发送安全区域
可选参数:
-h, --help 显示帮助信息并退出
-n MAVROS_NS, --mavros-ns MAVROS_NS
ROS 节点命名空间
-v, --verbose 显示详细输出
5. mavsetp
用法: mavsetp [-h] [-n MAVROS_NS] [-V] {local} ...
用于通过设定点控制设备的命令行工具。
位置参数:
{local}
local 发送本地设定点
可选参数:
-h, --help 显示帮助信息并退出
-n MAVROS_NS, --mavros-ns MAVROS_NS
ROS 节点命名空间
-V, --verbose 显示详细输出
6. mavsys
用法: mavsys [-h] [-n MAVROS_NS] [-v] [--wait] {mode,rate} ...
用于在 MAVLink 设备上更改模式和数据流速率的命令行工具。
位置参数:
{mode,rate}
mode 设置模式
rate 设置数据流速率
可选参数:
-h, --help 显示帮助信息并退出
-n MAVROS_NS, --mavros-ns MAVROS_NS
ROS 节点命名空间
-v, --verbose 显示详细输出
--wait 等待建立 FCU 连接
mavros/CustomModes 中列出了受支持的自定义模式。
7. mavwp
用法: mavwp [-h] [-n MAVROS_NS] [-v]
{show,load,pull,dump,clear,setcur,goto} ...
用于在 MAVLink 设备上操作任务(mission)的命令行工具。
位置参数:
{show,load,pull,dump,clear,setcur,goto}
show 显示任务点(waypoints)
load 从文件加载任务点(waypoints)
pull 从飞控单元(FCU)拉取任务点(waypoints)
dump 将任务点(waypoints)保存到文件
clear 清除设备上的任务点(waypoints)
setcur 设置设备上当前的任务点(waypoints)
goto 发送前往指定任务点的命令(仅适用于 APM)
可选参数:
-h, --help 显示帮助信息并退出
-n MAVROS_NS, --mavros-ns MAVROS_NS
ROS 节点命名空间
-v, --verbose 显示详细输出
(6)插件———内容太多,用到就补
由 mavros_node 加载的标准通信插件集。
**注:**此列表针对0.18.0版本。旧版本:0.6.0, 0.7.0, 0.8.0, 0.10.0, 0.11.0, 0.12.0 — 0.15.0, 0.16.0 — 0.17.0.
1. 3dr_radio
将3DR Radio的状态信息发布到诊断(diagnostics)和话题(topic)。在ROS中,诊断是一种用于发布机器人系统状态和健康信息的机制,可以用于监视和诊断机器人的运行状况。通过将3DR Radio的状态信息发布到诊断,可以使其成为系统监控和故障排除的一部分。
同时,将3DR Radio的状态信息发布到话题意味着将这些信息发送到ROS话题,以便其他ROS节点可以订阅并接收这些状态更新。这种发布-订阅模式使得多个ROS节点能够共享和利用同一组数据,从而实现系统间的信息交流和协调。
a.发布的话题
~radio_status (mavros_msgs/RadioStatus)
从调制解调器接收到的状态,与 RADIO_STATUS
消息相同。
原始消息定义:
# RADIO_STATUS message 关于 `RADIO_STATUS` 消息的说明
std_msgs/Header header # ROS 消息头部,包含时间戳等信息
# message data
uint8 rssi #本地接收信号强度指示 (RSSI),表示本地设备接收到的信号强度。
uint8 remrssi # 远程接收信号强度指示 (RemRSSI),表示远程设备接收到的信号强度。
uint8 txbuf # 发送缓冲区空闲指示,表示发送缓冲区的空闲空间百分比。
uint8 noise # 本地接收到的噪声水平。
uint8 remnoise # 远程接收到的噪声水平。
uint16 rxerrors # 接收错误的计数器,表示接收时发生的错误数量。
uint16 fixed # 接收到的正确数据帧数量
# calculated
float32 rssi_dbm #以分贝毫瓦 (dBm) 为单位的本地接收信号强度指示,将 `rssi` 转换为分贝值。
float32 remrssi_dbm #以分贝毫瓦 (dBm) 为单位的远程接收信号强度指示,将 `remrssi` 转换为分贝值。
2. actuator_control 重点 接收来自 FCU 的飞行器执行器控制命令的话题。
actuator_control
是用于向飞控单元(FCU)发送执行器(actuator)命令的功能或消息。在飞行控制系统中,执行器通常是指控制飞行器各个部件(如电机、舵面等)的设备或组件。通过发送 actuator_control
消息,可以控制这些执行器的行为,从而控制飞行器的姿态、速度或其他运动参数。
a.订阅的话题
actuator_control
(mavros_msgs/ActuatorControl)
- 执行器命令;
原始消息定义:
# 直接执行器控制的原始舵机值
#
# 关于组别、混合和通道的信息,请参考:[https://pixhawk.org/dev/mixing]
#
# 混合器组别常量
uint8 PX4_MIX_FLIGHT_CONTROL = 0 #表示飞行控制器的混合器组别常量。
uint8 PX4_MIX_FLIGHT_CONTROL_VTOL_ALT = 1 #表示垂直起降(VTOL)飞行控制器的混合器组别常量,用于高度控制。
uint8 PX4_MIX_PAYLOAD = 2 #表示负载控制器的混合器组别常量,用于控制载荷操作。
uint8 PX4_MIX_MANUAL_PASSTHROUGH = 3 #表示手动直通控制器的混合器组别常量,用于直接将手动输入传递给执行器。
# uint8 PX4_MIX_FC_MC_VIRT = 4 #
# uint8 PX4_MIX_FC_FW_VIRT = 5 #
std_msgs/Header header #ROS 消息头部,包含时间戳等信息。
uint8 group_mix #指示要应用的混合器组别
float32[8] controls #执行器控制值数组,包含每个执行器的控制值。
3. hil_controls —将仿真飞行控制器的控制指令发布到 ~mavros/hil_actuator_controls
话题。
发布 HIL_CONTROLS 0.18 中的新增功能
hil_controls
是用于模拟硬件在惯性导航系统(HILS)模式下发送控制输入的消息。HILS 模式允许通过软件模拟飞行器的动力学行为,将控制输入发送到飞行控制器(FCU),并接收来自仿真环境的反馈数据。
具体来说,hil_controls
消息用于向飞行控制器发送以下类型的控制输入:
- 角速度: 控制飞行器绕三个轴的角速度。
- 线性加速度: 控制飞行器在三个轴上的线性加速度。
- 控制模式: 指示飞行控制器如何处理接收到的控制输入,例如手动控制、自动控制或其他控制模式。
通过发送
hil_controls
消息,可以模拟飞行器的姿态和运动,并测试飞行控制系统的响应和稳定性,而无需实际飞行。这在飞行控制软件开发和调试过程中特别有用,可以在仿真环境中进行全面的测试和验证。
a.发布的话题
hil_controls/hil_controls (mavros_msgs/HilControls)
硬件在环数据
原始消息定义:
# HilControls.msg
# 这是 MAVLink 中的 HIL_CONTROLS 消息的 ROS 表示形式
#(已弃用,请改用 HIL_ACTUATOR_CONTROLS)。
#可以在以下链接查看 MAVLink 消息的文档
#(https://mavlink.io/en/messages/common.html#HIL_CONTROLS)
std_msgs/Header header # ROS 消息的头部,包含时间戳等信息。
float32 roll_ailerons # 用于指定滚转控制的值,通常对应于副翼的位置或控制输入。
float32 pitch_elevator #用于指定俯仰控制的值,通常对应于升降舵的位置或控制输入。
float32 yaw_rudder #用于指定偏航控制的值,通常对应于方向舵或尾舵的位置或控制输入。
float32 throttle #用于指定油门控制的值,通常对应于飞行器的推力或速度控制输入。
float32 aux1 #额外的辅助控制通道,
float32 aux2 #可以用于指定其他控制输入
float32 aux3 #例如舵面、发动机或其他功能的控制。
float32 aux4
uint8 mode #指示飞行控制器的控制模式。该值通常用于切换飞行模式,例如手动、自动或其他特定模式。
uint8 nav_mode #指示导航模式,用于控制飞行器的导航行为,例如自动导航、定点航行等。
b.参数
~frame_id (string, default: “map”)
高度消息帧
4. command 重点–通过服务 ~mavros/cmd/command
发送任何 COMMAND_LONG 到飞控单元(FCU)
意思是向飞行控制单元(FCU)发送 COMMAND_LONG 命令。COMMAND_LONG 是一种 MAVLink 指令,用于向飞行控制器发送详细的飞行控制命令或参数设置。
a.服务
~cmd/command
(mavros_msgs/CommandLong)
-
Send any COMMAND_LONG to FCU.
-
~cmd/command (mavros_msgs/CommandLong):这个话题用于向飞行控制单元(FCU)发送任意的 COMMAND_LONG 命令。COMMAND_LONG 是一种用于发送详细控制命令或参数设置的 MAVLink 指令。
```yaml
# Generic COMMAND_LONG 通用COMMAND_LONG
bool broadcast # 发送此命令时是否使用广播模式
uint16 command # MAVLink 中的命令类型,表示要发送的命令
uint8 confirmation # 用于确认的标志位,通常为0表示不需要确认,1表示需要确认
float32 param1 # 命令参数1,具体含义取决于不同的命令
float32 param2 # 命令参数2,具体含义取决于不同的命令
float32 param3 # 命令参数3,具体含义取决于不同的命令
float32 param4 # 命令参数4,具体含义取决于不同的命令
float32 param5 # 命令参数5,通常用于传递经度(x_lat)
float32 param6 # 命令参数6,通常用于传递纬度(y_lon)
float32 param7 # 命令参数7,通常用于传递高度(z_alt)
---
bool success # 命令执行结果,成功为true,失败为false
# 由 COMMAND_ACK 返回的原始结果
uint8 result # 命令执行结果的具体数值表示,参考不同的命令和返回值
~cmd/command_int
(mavros_msgs/CommandInt)
-
Send any COMMAND_INT to FCU.
-
~cmd/command_int (mavros_msgs/CommandInt):这个话题用于向飞行控制单元(FCU)发送任意的 COMMAND_INT 命令。COMMAND_INT 也是一种 MAVLink 指令,用于发送整数型的控制命令。
```yaml
# Generic COMMAND_INT
bool broadcast # 发送此命令时是否使用广播模式
uint8 frame # 坐标系类型,指定经纬度坐标系或本地坐标系
uint16 command # MAVLink 中的命令类型,表示要发送的命令
uint8 current # 当前的命令序号,通常为0,表示立即执行
uint8 autocontinue # 是否自动继续执行下一个命令,通常为1表示是,0表示否
float32 param1 # 命令参数1,具体含义取决于不同的命令
float32 param2 # 命令参数2,具体含义取决于不同的命令
float32 param3 # 命令参数3,具体含义取决于不同的命令
float32 param4 # 命令参数4,具体含义取决于不同的命令
int32 x # 经度(x坐标),以度为单位乘以1E7表示,或者本地坐标x乘以1E4表示米
int32 y # 纬度(y坐标),以度为单位乘以1E7表示,或者本地坐标y乘以1E4表示米
float32 z # 高度(z坐标),单位为米
---
bool success # 命令执行结果,成功为true,失败为false
# 似乎这条消息不会产生任何 COMMAND_ACK 消息
# 因此没有 result 字段
~cmd/arming
(mavros_msgs/CommandBool)
-
Change Arming status.
-
~cmd/arming (mavros_msgs/CommandBool):这个话题用于改变飞行器的武器状态(Arming status)。通过发送 true 或 false 到这个话题,可以实现解锁或上锁飞行器。
# Common type for switch commands
bool value # 开关的状态值,true 表示开启,false 表示关闭
---
bool success # 命令执行结果,成功为true,失败为false
uint8 result # 命令执行的结果代码,通常表示命令是否被正确执行或执行状态
~cmd/set_home
(mavros_msgs/CommandHome)
- Change HOME location.
# request set new home position
bool current_gps # 是否使用当前 GPS 位置作为新的 HOME 位置
float32 yaw # 新 HOME 位置的航向角度(偏航角),单位为度
float32 latitude # 新 HOME 位置的纬度,单位为度
float32 longitude # 新 HOME 位置的经度,单位为度
float32 altitude # 新 HOME 位置的海拔高度,单位为米
---
bool success # 命令执行结果,成功为true,失败为false
uint8 result # 命令执行的结果代码,通常表示命令是否被正确执行或执行状态
- ~cmd/set_home (mavros_msgs/CommandHome):这个话题用于改变飞行器的 HOME(起飞点)位置。可以发送新的 GPS 坐标到这个话题,以重新设置飞行器的 HOME 位置。
~cmd/takeoff
(mavros_msgs/CommandTOL)
-
Send takeoff command.
-
~cmd/takeoff (mavros_msgs/CommandTOL):这个话题用于发送起飞命令给飞行器。
~cmd/land
(mavros_msgs/CommandTOL)
-
Send land command.
-
~cmd/land (mavros_msgs/CommandTOL):这个话题用于发送降落命令给飞行器。
~cmd/trigger_control
(mavros_msgs/CommandTriggerControl)
-
Send camera trigger control command.
-
~cmd/trigger_control (mavros_msgs/CommandTriggerControl):这个话题用于发送相机触发控制命令,以控制相机的触发行为,例如开始/停止拍摄。
b.参数
5. ftp —用于通过 FTP 服务与飞控通信,可以进行文件传输和管理。
a.服务
6. global_position —发布全局定位信息到话题 ~mavros/global_position/global
a.发布的话题
b.参数
7. imu_pub 重点 发布 IMU(惯性测量单元)数据到话题 ~mavros/imu/data
发布 IMU 状态
a.发布的话题
~imu/data
(sensor_msgs/Imu)
- IIMU 数据,包括由飞控计算得出的方向信息。
# 这是用于保存惯性测量单元(IMU,Inertial Measurement Unit)数据的消息
# 加速度应以 m/s^2 为单位(而不是以 g 为单位),旋转速度应以 rad/s 为单位
# 如果测量的协方差已知,则应填入(如果您只知道每个测量的方差,例如来自数据表,请将其填写在对角线上)
# 所有零协方差矩阵将被解释为“协方差未知”,需要假设或从其他来源获取协方差才能使用数据
# 如果对某个数据元素没有估计(例如您的 IMU 不提供方向估计),请将关联协方差矩阵的第 0 元素设置为 -1
# 如果您正在解释此消息,请检查每个协方差矩阵的第一个元素是否为 -1,并忽略关联的估计
Header header
geometry_msgs/Quaternion orientation
float64[9] orientation_covariance # 关于 x、y、z 轴的行主要协方差
geometry_msgs/Vector3 angular_velocity
float64[9] angular_velocity_covariance # 关于 x、y、z 轴的行主要协方差
geometry_msgs/Vector3 linear_acceleration
float64[9] linear_acceleration_covariance # x、y、z 轴的行主要协方差
~imu/data_raw
(sensor_msgs/Imu)
- 不包含方向信息的原始 IMU 数据。
~imu/mag
(sensor_msgs/MagneticField)
- 飞控罗盘数据。
~imu/temperature
(sensor_msgs/Temperature)
- 飞控报告的温度数据(通常来自气压计)。
~imu/atm_pressure
(sensor_msgs/FluidPressure)
- 大气压力数据。
b.参数
8. local_position —发布本地位置信息到话题 ~mavros/local_position/local
a.发布的话题
b.参数
9. manual_control —订阅来自手动控制器的控制指令,发布到话题 ~mavros/manual_control/send
a.订阅的话题
b.发布的话题
10. param —通过参数服务 ~mavros/param/...
进行飞控参数的获取、设置和管理
a.服务
11. rc_io —订阅遥控器输入信号的话题
a.订阅的话题
b.发布的话题
12. safety_area —订阅安全区域信息的话题。
a.订阅的话题
b.参数
13. setpoint_accel —订阅加速度设定值的话题。
a.订阅的话题
b.参数
14. setpoint_attitude —订阅姿态设定值的话题。
a.订阅的话题
b.参数
15. setpoint_position —订阅位置设定值的话题。
a.订阅的话题
b.参数
16. setpoint_raw —订阅原始控制输入设定值的话题。
a.订阅的话题
b.发布的话题
17. setpoint_velocity —订阅速度设定值的话题。
a.订阅的话题
18. sys_status — 发布系统状态信息到话题 ~mavros/sys_status
。
a.发布的话题
b.服务 —通过服务 ~mavros/cmd/arming
修改飞控的 Arming 状态。
c.参数
19. sys_time ----发布系统时间信息到话题 ~mavros/sys_time
。
a.发布的话题
b.参数
20. vfr_hud —发布飞行数据信息到话题 ~mavros/vfr_hud
。
a.发布的话题
21. waypoint —发布航点信息到话题 ~mavros/mission/waypoints
a.发布的话题
b.服务 —通过服务 ~mavros/mission/waypoints
进行航点管理和导航设置
c.参数
22. 注意事项
避免与椭球高度和相对海平面高度相关的陷阱