常用MAVROS话题和服务

https://zhuanlan.zhihu.com/p/364872655
一、常用接收的话题
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 header
uint32 seq
time stamp
string 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 header
uint32 seq
time stamp
string frame_id
sensor_msgs/NavSatStatus status
int8 STATUS_NO_FIX=-1
int8 STATUS_FIX=0
int8 STATUS_SBAS_FIX=1
int8 STATUS_GBAS_FIX=2
uint16 SERVICE_GPS=1
uint16 SERVICE_GLONASS=2
uint16 SERVICE_COMPASS=4
uint16 SERVICE_GALILEO=8
int8 status
uint16 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 header
uint32 seq
time stamp
string frame_id
geometry_msgs/Pose pose
geometry_msgs/Point position
float64 x
float64 y
float64 z
geometry_msgs/Quaternion orientation
float64 x
float64 y
float64 z
float64 w
1.4 三轴速度
消息名称:mavros/local_position/velocity
类型:geometry_msgs::TwistStamped
头文件:geometry_msgs/TwistStamped.h
成员变量:
std_msgs/Header header
uint32 seq
time stamp
string frame_id
geometry_msgs/Twist twist
geometry_msgs/Vector3 linear
float64 x
float64 y
float64 z
geometry_msgs/Vector3 angular
float64 x
float64 y
float64 z
1.5 IMU原始数据
消息名称:mavros/imu/data(_raw) //data_raw为原始数据,data为滤波后的数据
类型:sensor_msgs::Imu
头文件:sensor_msgs/Imu.h
成员变量:
std_msgs/Header header
uint32 seq
time stamp
string frame_id
geometry_msgs/Quaternion orientation
float64 x
float64 y
float64 z
float64 w
float64[9] orientation_covariance
geometry_msgs/Vector3 angular_velocity
float64 x
float64 y
float64 z
float64[9] angular_velocity_covariance
geometry_msgs/Vector3 linear_acceleration
float64 x
float64 y
float64 z
float64[9] linear_acceleration_covariance
1.6 遥控器数据
消息名称:mavros/manual_control/control
类型:mavros_msgs::ManualControl
头文件:mavros_msgs/ManualControl.h
成员变量:
std_msgs/Header header
uint32 seq
time stamp
string 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[] waypoints
uint8 FRAME_GLOBAL=0
uint8 FRAME_LOCAL_NED=1
uint8 FRAME_MISSION=2
uint8 FRAME_GLOBAL_REL_ALT=3
uint8 FRAME_LOCAL_ENU=4
uint8 frame //坐标系 3:经纬度为绝对,高度为相对(起飞点为0)
uint16 command //命令id 16:航点
bool is_current
bool autocontinue
float32 param1
float32 param2
float32 param3
float32 param4
float64 x_lat
float64 y_long
float64 z_alt
二、常用发布的话题
2.1 控制期望的位置(GPS 坐标)
2.1.1mavros/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 header
uint32 seq
time 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 x
float64 y
float64 z
geometry_msgs/Vector3 acceleration_or_force //加速度
float64 x
float64 y
float64 z
float32 yaw //偏航
float32 yaw_rate //偏航角速度
2.1.2mavros/setpoint_position/global
消息名称:mavros/setpoint_position/global
类型:geographic_msgs::GeoPoseStamped
头文件:geographic_msgs/GeoPoseStamped.h
成员变量:
std_msgs/Header header
uint32 seq
time stamp
string frame_id
geographic_msgs/GeoPose pose
geographic_msgs/GeoPoint position
float64 latitude
float64 longitude
float64 altitude
geometry_msgs/Quaternion orientation
float64 x
float64 y
float64 z
float64 w
2.2 控制期望的位置
消息名称:mavros/setpoint_position/local
类型:geometry_msgs::PoseStamped
头文件:geometry_msgs/PoseStamped.h
成员变量:
std_msgs/Header header
uint32 seq
time stamp
string frame_id
geometry_msgs/Pose pose //NED 坐标系下的位置(xyz),只有 position 成员变量生效
geometry_msgs/Point position
float64 x
float64 y
float64 z
geometry_msgs/Quaternion orientation
float64 x
float64 y
float64 z
float64 w
2.3 控制期望的速度
消息名称:mavros/setpoint_velocity/cmd_vel_unstamped
类型:geometry_msgs::Twist
头文件:geometry_msgs/Twist.h
成员变量:
geometry_msgs/Vector3 linear //三轴线速度
float64 x
float64 y
float64 z
geometry_msgs/Vector3 angular //三轴角速度
float64 x
float64 y
float64 z
2.4 控制期望的加速度
消息名称:mavros/setpoint_accel/accel
类型:geometry_msgs::Vector3Stamped
头文件:geometry_msgs/Vector3Stamped.h
成员变量:
std_msgs/Header header
uint32 seq
time stamp
string frame_id
geometry_msgs/Vector3 vector //三轴加速度
float64 x
float64 y
float64 z
2.5 控制期望的姿态
消息名称:mavros/setpoint_attitude/attitude
类型:geometry_msgs::PoseStamped
头文件:geometry_msgs/PoseStamped.h
成员变量:
std_msgs/Header header
uint32 seq
time stamp
string frame_id
geometry_msgs/Pose pose //三个欧拉角,或者 4 元数任选其一
geometry_msgs/Point position
float64 x
float64 y
float64 z
geometry_msgs/Quaternion orientation
float64 x
float64 y
float64 z
float64 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 header
uint32 seq
time stamp
string 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模式!!!!!!!!!!

!!!!!!!!!!真实环境测试时不要用软件切换offboard模式!!!!!!!!!!

!!!!!!!!!!真实环境测试时不要用软件切换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”);

  • 6
    点赞
  • 39
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
mavros常用话题包括: 1. mavros/state:用于获取飞行器的状态信息,例如连接状态、飞行模式等。 2. mavros/local_position/pose:用于获取飞行器在本地坐标系下的位置信息。 3. mavros/global_position/global:用于获取飞行器在全局坐标系下的位置信息。 4. mavros/imu/data:用于获取飞行器的IMU数据,包括加速度、角速度等。 5. mavros/rc/in:用于获取遥控器的输入信号。 6. mavros/rc/out:用于获取遥控器的输出信号。 7. mavros/setpoint_raw/local:用于设置飞行器的本地坐标系下的期望位置、速度和加速度。 8. mavros/setpoint_raw/global:用于设置飞行器的全局坐标系下的期望位置、速度和加速度。 9. mavros/cmd/arming:用于控制飞行器的上锁和解锁操作。 10. mavros/set_mode:用于切换飞行器的飞行模式。 以上是一些常用的mavros话题,可以根据具体需求选择使用。 #### 引用[.reference_title] - *1* *2* [mavros坐标系转换与方向](https://blog.csdn.net/benchuspx/article/details/112970682)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v90^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [五、MAVROS常用话题简介](https://blog.csdn.net/qq_35598561/article/details/131284168)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v90^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

飞同学

随时为您服务

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值