ROS-wiki中对mavros工具包的介绍(良心翻译)

工具包概要—基于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工具包


这里是所列出的 mavros包的相关依赖:

  1. angles: 提供角度表示和转换的工具库。
  2. catkin: 用于构建 ROS 软件包的构建工具。
  3. cmake_modules: 包含用于 CMake 的一些常用模块。
  4. diagnostic_msgs: ROS 中用于诊断消息的消息定义。
  5. diagnostic_updater: 提供用于发布诊断状态的工具。
  6. eigen_conversions: 用于 Eigen 库与 ROS 几何消息类型之间的转换。
  7. geographic_msgs: 定义了与地理位置相关的 ROS 消息类型。
  8. geometry_msgs: ROS 中用于几何数据传输的消息定义。
  9. libmavconn MAVLink 连接库,用于 ROS 中的 MAVROS。
  10. mavlink: MAVLink 消息和协议的实现。
  11. mavros_msgs: MAVROS 的 ROS 消息和服务定义。
  12. message_runtime: ROS 消息运行时库。
  13. nav_msgs: ROS 中用于导航相关消息的定义。
  14. pluginlib: ROS 中用于实现插件库的工具。
  15. rosconsole_bridge: ROS 中用于日志记录的桥接库。
  16. roscpp: ROS 中用于 C++ 开发的库。
  17. rospy: ROS 中用于 Python 开发的库。
  18. sensor_msgs: ROS 中用于传感器数据传输的消息定义。
  19. std_msgs: ROS 中标准消息类型的定义。
  20. std_srvs: ROS 中标准服务类型的定义。
  21. tf2_eigen: 用于 ROS 中 TF2 库与 Eigen 库之间的转换。
  22. tf2_ros: 用于 ROS 中 TF2 库的 ROS 接口。
  23. 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作为传输协议的主要特点包括:

  1. 无连接性:UDP是无连接的传输协议,不像TCP需要建立和维护连接。这意味着通信的开销更小,但也可能导致数据丢失或乱序。

  2. 实时性:UDP不保证数据的传输顺序和可靠性,但适用于需要低延迟和实时性的应用,例如在无人机控制中需要快速响应的情况。

  3. 简单性: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. 发布的话题(从自动驾驶仪来,相比订阅 + 诊断)
# 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)用法

以下是关于在不同飞控系统(PX4ArduPilot/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. 注意事项

避免与椭球高度和相对海平面高度相关的陷阱

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值