ROS系列——mavros功能包中常用话题和服务介绍,包括消息名称、类型、头文件、成员变量、示例代码

  • 官方链接
  • 常用话题
    • 订阅
      • 1.1 系统状态
    • 1.2 GPS数据
    • 1.3 本地位置
    • 1.4 三轴速度
    • 1.5 IMU原始数据
    • 1.6 遥控器数据
    • 1.7 waypoint 查询航点
    • 发布
      • 2.1 控制期望的位置(GPS 坐标)
        • 2.1.1 mavros/setpoint_raw/global
    • 2.1.2 mavros/setpoint_position/global
    • 2.2 控制期望的位置
    • 2.3 控制期望的速度
    • 2.4 控制期望的加速度
    • 2.5 控制期望的姿态
    • 2.6 控制飞控 IO 输出(混控器)
  • 常用服务
    • 3.1 上/解锁服务
    • 3.2 模式切换

官方链接

  1. mavros
  2. mavlink功能包
  3. mavros功能包

常用话题

订阅

1.1 系统状态

消息名称:mavros/state
类型:mavros_msgs::State
头文件:mavros_msgs/State.h
成员变量:

string MODE_PX4_MANUAL=MANUAL //这里只列PX4的,APM的用rosmsg show mavros_msgs/State查看
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
std_msgs/Header headeruint32 seqtime stampstring frame_id
bool connected //是否连接
bool armed //是否解锁
bool guided
bool manual_input
string mode //当前飞行模式
uint8 system_status //系统状态

1.2 GPS数据

消息名称:mavros/global_position/global
类型:sensor_msgs::NavSatFix
头文件:sensor_msgs/NavSatFix.h
成员变量:

uint8 COVARIANCE_TYPE_UNKNOWN=0
uint8 COVARIANCE_TYPE_APPROXIMATED=1
uint8 COVARIANCE_TYPE_DIAGONAL_KNOWN=2
uint8 COVARIANCE_TYPE_KNOWN=3
std_msgs/Header headeruint32 seqtime stampstring frame_id
sensor_msgs/NavSatStatus statusint8 STATUS_NO_FIX=-1int8 STATUS_FIX=0int8 STATUS_SBAS_FIX=1int8 STATUS_GBAS_FIX=2uint16 SERVICE_GPS=1uint16 SERVICE_GLONASS=2uint16 SERVICE_COMPASS=4uint16 SERVICE_GALILEO=8int8 statusuint16 service
float64 latitude
float64 longitude
float64 altitude
float64[9] position_covariance
uint8 position_covariance_type

1.3 本地位置

消息名称:mavros/local_position/pose
类型:geometry_msgs::PoseStamped
头文件:geometry_msgs/PoseStamped.h
成员变量:

std_msgs/Header headeruint32 seqtime stampstring frame_id
geometry_msgs/Pose posegeometry_msgs/Point positionfloat64 xfloat64 yfloat64 zgeometry_msgs/Quaternion orientationfloat64 xfloat64 yfloat64 zfloat64 w

1.4 三轴速度

消息名称:mavros/local_position/velocity
类型:geometry_msgs::TwistStamped
头文件:geometry_msgs/TwistStamped.h
成员变量:

std_msgs/Header headeruint32 seqtime stampstring frame_id
geometry_msgs/Twist twistgeometry_msgs/Vector3 linearfloat64 xfloat64 yfloat64 zgeometry_msgs/Vector3 angularfloat64 xfloat64 yfloat64 z

1.5 IMU原始数据

消息名称:mavros/imu/data(_raw) //data_raw为原始数据,data为滤波后的数据
类型:sensor_msgs::Imu
头文件:sensor_msgs/Imu.h
成员变量:

std_msgs/Header headeruint32 seqtime stampstring frame_id
geometry_msgs/Quaternion orientationfloat64 xfloat64 yfloat64 zfloat64 w
float64[9] orientation_covariance
geometry_msgs/Vector3 angular_velocityfloat64 xfloat64 yfloat64 z
float64[9] angular_velocity_covariance
geometry_msgs/Vector3 linear_accelerationfloat64 xfloat64 yfloat64 z
float64[9] linear_acceleration_covariance

1.6 遥控器数据

消息名称:mavros/manual_control/control
类型:mavros_msgs::ManualControl
头文件:mavros_msgs/ManualControl.h
成员变量:

std_msgs/Header headeruint32 seqtime stampstring frame_id
float32 x
float32 y
float32 z
float32 r
uint16 buttons

1.7 waypoint 查询航点

消息名称:mavros/mission/waypoints
类型:mavros_msgs::WaypointList
头文件:mavros_msgs/WaypointList.h
成员变量:

uint16 current_seq
mavros_msgs/Waypoint[] waypointsuint8 FRAME_GLOBAL=0uint8 FRAME_LOCAL_NED=1uint8 FRAME_MISSION=2uint8 FRAME_GLOBAL_REL_ALT=3uint8 FRAME_LOCAL_ENU=4uint8 frame //坐标系  3:经纬度为绝对,高度为相对(起飞点为0)uint16 command //命令id  16:航点bool is_currentbool autocontinuefloat32 param1float32 param2float32 param3float32 param4float64 x_latfloat64 y_longfloat64 z_alt

发布

2.1 控制期望的位置(GPS 坐标)

2.1.1 mavros/setpoint_raw/global

消息名称:mavros/setpoint_raw/global
类型:mavros_msgs::GlobalPositionTarget
头文件:mavros_msgs/GlobalPositionTarget.h
成员变量:
血的教训:coordinate_frame设置成5时,使用的altitude为amsl高度,从/mavros/altitude中的amsl可以读到

uint8 FRAME_GLOBAL_INT=5
uint8 FRAME_GLOBAL_REL_ALT=6
uint8 FRAME_GLOBAL_TERRAIN_ALT=11
uint16 IGNORE_LATITUDE=1 //只想控制经纬高则设置type_mask=8+16+32+64+128+256+512+1024+2048
uint16 IGNORE_LONGITUDE=2
uint16 IGNORE_ALTITUDE=4
uint16 IGNORE_VX=8 //只想控制速度则设置type_mask=1+2+4+64+128+256+512+1024+2048
uint16 IGNORE_VY=16
uint16 IGNORE_VZ=32
uint16 IGNORE_AFX=64 //只想控制加速度则设置type_mask=1+2+4+8+16+32+512+1024+2048
uint16 IGNORE_AFY=128
uint16 IGNORE_AFZ=256
uint16 FORCE=512 //Force in af vector flag
uint16 IGNORE_YAW=1024
uint16 IGNORE_YAW_RATE=2048
std_msgs/Header headeruint32 seqtime stamp //发布消息前一定要令消息的header.stamp=ros::TIme::now()否则无人机不会运动string frame_id
uint8 coordinate_frame //5 为绝对amsl高度,6 为相对amsl高度
uint16 type_mask //用于确定控制哪些量
float64 latitude //经纬高
float64 longitude
float32 altitude //in meters, AMSL or above terrain
geometry_msgs/Vector3 velocity //速度float64 xfloat64 yfloat64 z
geometry_msgs/Vector3 acceleration_or_force //加速度float64 xfloat64 yfloat64 z
float32 yaw //偏航
float32 yaw_rate //偏航角速度

2.1.2 mavros/setpoint_position/global

消息名称:mavros/setpoint_position/global
类型:geographic_msgs::GeoPoseStamped
头文件:geographic_msgs/GeoPoseStamped.h
成员变量:

std_msgs/Header headeruint32 seqtime stampstring frame_id
geographic_msgs/GeoPose posegeographic_msgs/GeoPoint positionfloat64 latitudefloat64 longitudefloat64 altitudegeometry_msgs/Quaternion orientationfloat64 xfloat64 yfloat64 zfloat64 w

2.2 控制期望的位置

消息名称:mavros/setpoint_position/local
类型:geometry_msgs::PoseStamped
头文件:geometry_msgs/PoseStamped.h
成员变量:

std_msgs/Header headeruint32 seqtime stampstring frame_id
geometry_msgs/Pose pose //NED 坐标系下的位置(xyz),只有 position 成员变量生效geometry_msgs/Point positionfloat64 xfloat64 yfloat64 zgeometry_msgs/Quaternion orientationfloat64 xfloat64 yfloat64 zfloat64 w

2.3 控制期望的速度

消息名称:mavros/setpoint_velocity/cmd_vel_unstamped
类型:geometry_msgs::Twist
头文件:geometry_msgs/Twist.h
成员变量:

geometry_msgs/Vector3 linear //三轴线速度float64 xfloat64 yfloat64 z
geometry_msgs/Vector3 angular //三轴角速度float64 xfloat64 yfloat64 z

2.4 控制期望的加速度

消息名称:mavros/setpoint_accel/accel
类型:geometry_msgs::Vector3Stamped
头文件:geometry_msgs/Vector3Stamped.h
成员变量:

std_msgs/Header headeruint32 seqtime stampstring frame_id
geometry_msgs/Vector3 vector //三轴加速度float64 xfloat64 yfloat64 z

2.5 控制期望的姿态

消息名称:mavros/setpoint_attitude/attitude
类型:geometry_msgs::PoseStamped
头文件:geometry_msgs/PoseStamped.h
成员变量:

std_msgs/Header headeruint32 seqtime stampstring frame_id
geometry_msgs/Pose pose //三个欧拉角,或者 4 元数任选其一geometry_msgs/Point positionfloat64 xfloat64 yfloat64 zgeometry_msgs/Quaternion orientationfloat64 xfloat64 yfloat64 zfloat64 w

2.6 控制飞控 IO 输出(混控器)

消息名称:mavros/actuator_control
类型:mavros_msgs::ActuatorControl
头文件:mavros_msgs/ActuatorControl.h
成员变量:

uint8 PX4_MIX_FLIGHT_CONTROL=0
uint8 PX4_MIX_FLIGHT_CONTROL_VTOL_ALT=1
uint8 PX4_MIX_PAYLOAD=2
uint8 PX4_MIX_MANUAL_PASSTHROUGH=3
std_msgs/Header headeruint32 seqtime stampstring frame_id
uint8 group_mix //要控制的混控器分组 1-8(control group)
float32[8] controls //控制量(前四个分别是,roll pitch yaw thrust)

常用服务

3.1 上/解锁服务

消息名称:mavros/cmd/arming
类型:mavros_msgs::CommandBool
头文件:mavros_msgs/CommandBool.h
请求参数:

bool value //true解锁 false上锁
---
bool success
uint8 result //错误信息

示例代码:

ros::ServiceClient arming_client = nh.serviceClient<mavros_msgs::CommandBool>("mavros/cmd/arming");
mavros_msgs::CommandBool arm_cmd;
arm_cmd.request.value = true;
set_mode_client.call(arm_cmd);
if(arm_cmd.response.success)ROS_INFO("Vehicle armed");
arm_cmd.response.result

3.2 模式切换

!!!!!!!!!!真实环境测试时不要用软件切换offboard模式!!!!!!!!!!
特别是像例程那样反复在while循环中设置offboard模式,要是控制不了机载电脑关闭该节点的话飞机就永远保持offboard模式了,如果发出的还是速度指令的话就可能会发生事故。
所以设置电子围栏也很重要。

消息名称:mavros/set_mode
类型:mavros_msgs::SetMode
头文件:mavros_msgs/SetMode.h
请求参数:

uint8 MAV_MODE_PREFLIGHT=0
uint8 MAV_MODE_STABILIZE_DISARMED=80
uint8 MAV_MODE_STABILIZE_ARMED=208
uint8 MAV_MODE_MANUAL_DISARMED=64
uint8 MAV_MODE_MANUAL_ARMED=192
uint8 MAV_MODE_GUIDED_DISARMED=88
uint8 MAV_MODE_GUIDED_ARMED=216
uint8 MAV_MODE_AUTO_DISARMED=92
uint8 MAV_MODE_AUTO_ARMED=220
uint8 MAV_MODE_TEST_DISARMED=66
uint8 MAV_MODE_TEST_ARMED=194
uint8 base_mode //基本模式,若customs_mode非空,则无效
string custom_mode //可用的模式见mavros/mavros/src/lib/uas_stringify.cpp中的px4(如果用的是APM就搜APM)
---
bool mode_sent //true表示正确切换模式

以下为PX4可用的飞行模式

static const cmode_map px4_cmode_map{{{ px4::define_mode(px4::custom_mode::MAIN_MODE_MANUAL),           "MANUAL" },{ px4::define_mode(px4::custom_mode::MAIN_MODE_ACRO),             "ACRO" },{ px4::define_mode(px4::custom_mode::MAIN_MODE_ALTCTL),           "ALTCTL" },{ px4::define_mode(px4::custom_mode::MAIN_MODE_POSCTL),           "POSCTL" },{ px4::define_mode(px4::custom_mode::MAIN_MODE_OFFBOARD),         "OFFBOARD" },{ px4::define_mode(px4::custom_mode::MAIN_MODE_STABILIZED),       "STABILIZED" },{ px4::define_mode(px4::custom_mode::MAIN_MODE_RATTITUDE),        "RATTITUDE" },{ px4::define_mode_auto(px4::custom_mode::SUB_MODE_AUTO_MISSION), "AUTO.MISSION" },{ px4::define_mode_auto(px4::custom_mode::SUB_MODE_AUTO_LOITER),  "AUTO.LOITER" },{ px4::define_mode_auto(px4::custom_mode::SUB_MODE_AUTO_RTL),     "AUTO.RTL" },{ px4::define_mode_auto(px4::custom_mode::SUB_MODE_AUTO_LAND),    "AUTO.LAND" },{ px4::define_mode_auto(px4::custom_mode::SUB_MODE_AUTO_RTGS),    "AUTO.RTGS" },{ px4::define_mode_auto(px4::custom_mode::SUB_MODE_AUTO_READY),   "AUTO.READY" },{ px4::define_mode_auto(px4::custom_mode::SUB_MODE_AUTO_TAKEOFF), "AUTO.TAKEOFF" },{ px4::define_mode_auto(px4::custom_mode::SUB_MODE_AUTO_FOLLOW_TARGET), "AUTO.FOLLOW_TARGET" },{ px4::define_mode_auto(px4::custom_mode::SUB_MODE_AUTO_PRECLAND), "AUTO.PRECLAND" },
}};

示例代码

ros::ServiceClient set_mode_client = nh.serviceClient<mavros_msgs::SetMode>("mavros/set_mode");
mavros_msgs::SetMode offb_set_mode;
offb_set_mode.request.custom_mode = "OFFBOARD";
set_mode_client.call(offb_set_mode);
if(offb_set_mode.response.mode_sent)ROS_INFO("Offboard enabled");

注:主要参考网上某位大神的总结,在此表示感谢!

ROS系列——mavros功能包中常用话题和服务介绍,包括消息名称、类型、头文件、成员变量、示例代码相关推荐

  1. ROS系列——image-transport功能包没有发布compressed图像Topic的原因

    ROS系列--image-transport功能包没有发布compressed图像Topic的原因 说明 解决 说明 自己开发了摄像头图像发布节点,但是运行节点发现只有image_transportd ...

  2. 对ROS功能包中package.xml文件的疑问

    在一个ROS功能包中,CMakeList.txt和package.xml是不可缺少的两个文件. 最近听师兄说,如果xml文件出错了,功能包会无法通过 我是比较怀疑这个说法的,毕竟官方原文是这样说的: ...

  3. 阿木有专门讲MAVROS功能包节点的课,有讲MAVROS怎么订阅消息,发布消息。看来MAVROS这边的编程不用太担心。

    阿木有专门讲MAVROS节点的课,有讲MAVROS怎么订阅消息,发布消息,你系统学了ROS之后再看里面的课程大纲就很熟悉了对吧.虽然你之前就知道了有这个课,但是那时的你还没有知道MAVROS就是ROS ...

  4. spring核心功能包中已经包含了cglib功能

    spring核心功能包中已经包含了cglib功能,所以不需要额外再引入cglib jar包 如下图所示: 也要思考一个问题,既然spring核心功能包里已经自带了cglib了,那么如果外部需要用到不同 ...

  5. java中常用的包、类、以及包中常用的类、方法、属性----sql和text\swing

    java中常用的包.类.以及包中常用的类.方法.属性 常用的包 java.io.*; java.util.*; java.lang.*; java.sql.*; java.text.*; java.a ...

  6. 【机器人操作系统】ROS工作空间及功能包的创建

    ROS工作空间及功能包的创建 摘要: 总结ROS工作空间及功能包的创建的具体步骤及命令: 工作空间/功能包的创建的步骤大同小异: step1.创建工作空间/功能包: step2.编译工作空间/功能包: ...

  7. 用AMCL+Move_base算法的时候发现机器人无法躲避实时障碍物,因为没有膨胀区域(也就是Move_base功能包中所设定的一个安全+可能危险+危险区域蓝色的一块),清楚地图与代价地图

    首先我使用的机器人模型是自己用solidworks制作然后转出为urdf模型的,然后在我用AMCL+Move_base算法的时候发现机器人无法躲避实时障碍物,也就是当你突然放一个物体在机器人面前,激光 ...

  8. 数据分析与挖掘中常用Python库的介绍与实践案例

    数据分析与挖掘中常用Python库的介绍与实践案例 一.Python介绍 现在python一词对我们来说并不陌生,尤其是在学术圈,它的影响力远超其它任何一种编程语言, 作为一门简单易学且功能强大的编程 ...

  9. php正则运用,php中常用的正则表达式的介绍及应用实例代码

    更全面的实例,可以参考 最常用的PHP正则表达式收集整理 //www.jb51.net/article/14049.htm php 正则表达式小结 //www.jb51.net/article/198 ...

最新文章

  1. 自我监督学习:AI技术的未来发展方向
  2. 【NLP】 NLP领域最具影响力的国内外会议介绍
  3. phpcms发布新闻到数据库_如何利用PHPCMS调用新闻列表
  4. java 数据库 事务 只读_不使用事务和使用只读事务的区别
  5. mkdir: 无法创建目录“/home/lj/.tldr“: 文件已存在
  6. 使用ODBC向SQLServer存储过程传参数的方法
  7. LL1分析构造法_行测技巧:比较构造法两步轻松解决方程题
  8. Effectively bypassing kptr_restrict on Android
  9. 高颜值生物医学在线画图工具
  10. 大学计算机考试常用函数,大学计算机二级考试 ExceL表格函数
  11. MySQL数据库简单使用
  12. Linux磁盘空间说明
  13. github snap android,轻量级的viewpager指示器
  14. 关于BIOS的入口地址0xFFFF0
  15. ABP框架源码中的Linq扩展方法
  16. CentOS设置开机自动执行指定命令
  17. excel求方差和标准差的函数_Excel如何计算方差与均方差
  18. DataFrame写入mysql时报错Duplicate entry ‘...‘ for key ‘PRIMARY
  19. c语言编写的点菜程序,基于C语言实现点菜系统
  20. 卫士处刑者冠军css3边,天赋升华_流放之路3.9卫士流血BD_3.9冠军流血弓刷图BD攻略_3DM网游...

热门文章

  1. 关于系统运维监控的几点建议
  2. EMIEMSEMC有何异同之处?
  3. 即时免费在线UML软件:超过30个类图示例
  4. 表妹求我写个node脚本,把java错误码表转成excel并翻译成英文
  5. 移动通信技术——5G
  6. Time Series Classification时间序列分类 (一)
  7. Redis 过期 key 删除,那些不得不说的事情!
  8. 一文梳理无监督对比学习(MoCo/SimCLR/SwAV/BYOL/SimSiam)
  9. 服务器就是一台高配置电脑吗?
  10. [绍棠] iOS文件目录和文件操作 及NSFileManager的读写操作