贺兰石 发表于 2022-11-2 19:25:48

mavros与px4飞控通信的重要消息与服务


各个版本的pixhawk
小编最近在用树莓派+pixhawk(px4固件)的无人机降落二维码的训练,其中与飞机进行通信,用的是mavros,在offboard模式下,对飞机进行控制,小编后续会给出几个具体如何用板载计算机控制px4飞控的例子,如让飞控自主飞一个正方形轨迹等等。这里小编先给出要使用频率最高的一些mavros消息。其中相关源代码,github上搜索mavros即可看到。下文整理主要来自阿木实验室:


树莓派3b


——————————————————————————————————————————————————————————
1.global_position 订阅GPS数据
消息名称:mavros/global_position/global
类型名称:sensor_msgs::NavSatFix
类型所在头文件:sensor_msgs/NavSatFix.h
常用类成员变量:
float64 latitude//经
float64 longitude//纬
float64 altitude//海拔
float64 position_covariance
uint8 position_covariance_type
——————————————————————————————————————————————————————————
2.imu_pub 订阅IMU原始数据
消息名称:mavros/imu/data(或者mavros/imu/data_raw mavros/imu/data为经过滤波后的数据)
类型名称:sensor_msgs::Imu
类型所在头文件:sensor_msgs/Imu.h
常用类成员变量:
geometry_msgs::Quaternion orientation//旋转四元数(xyzw)
float64 orientation_covariance//方差
geometry_msgs::Vector3 angular_velocity//3轴角速度(xyz)
float64 angular_velocity_covariance//方差
geometry_msgs::Vector3 linear_acceleration//线性加速度(xyz)
float64 linear_acceleration_covariance//方差
geometry_msgs::Quaternion类成员变量:
float64 x
float64 y
float64 z
float64 w
geometry_msgs::Vector3类成员变量:
float64 x
float64 y
float64 z
——————————————————————————————————————————————————————————
3.local_position 订阅本地位置数据
消息名称:mavros/local_position/pose
类型名称:geometry_msgs::PoseStamped
类型所在头文件:geometry_msgs/PoseStamped.h
常用类成员变量:
geometry_msgs::Pose pose
geometry_msgs::Pose类成员变量:
geometry_msgs::Point position
geometry_msgs::Quaternion orientation
geometry_msgs::Point类成员变量:
float64 x
float64 y
float64 z
——————————————————————————————————————————————————————————
4.manual_control 订阅遥控器的值
消息名称:mavros/manual_control/control
类型名称:mavros_msgs::ManualControl
类型所在头文件:mavros_msgs/ManualControl.h
常用类成员变量:
float32 x
float32 y
float32 z
float32 r
uint16 buttons
——————————————————————————————————————————————————————————
5.sys_status 查询系统状态
消息名称:mavros/state
类型名称:mavros_msgs::State
类型所在头文件:mavros_msgs/State.h
常用类成员变量:
bool connected//是否连接
bool armed//是否解锁
bool guided//是否被引导(offboard模式)
string mode//模式类型
uint8 system_status
——————————————————————————————————————————————————————————
6.waypoint 查询航点
消息名称:mavros/mission/waypoints
类型名称:mavros_msgs::WaypointList
类型所在头文件:mavros_msgs/WaypointList.h
常用类成员变量:
uint16 current_seq//当前航点索引
mavros_msgs::Waypoint[] waypoints//航点列表(注意ros中[] 表示此变量实际上是c++中的一个vector)
mavros_msgs::Waypoint类成员变量:
uint8 frame//坐标类型
uint16 command//命令id,16为航点
bool is_current
bool autocontinue
float32 param1
float32 param2
float32 param3
float32 param4
float64 x_lat//经度或者x坐标
float64 y_long//维度或者y坐标
float64 z_alt//海拔或者z坐标
下面介绍mavros中比较常用的控制消息,以及消息参数代表的意义
——————————————————————————————————————————————————————————
1.actuator_control 控制飞控IO输出(混控器)
消息名称:mavros/actuator_control
类型名称:mavros_msgs::ActuatorControl
类型所在头文件:mavros_msgs/ActuatorControl.h
常用类成员变量:
uint8 group_mix//要控制的混控器分组1-8(control group)
float32 controls//控制量(前四个分别是,roll pitch yaw thrust)
——————————————————————————————————————————————————————————
2.setpoint_accel 控制期望的加速度
消息名称:mavros/setpoint_accel/accel
类型名称:geometry_msgs::Vector3Stamped
类型所在头文件:geometry_msgs/Vector3Stamped.h
常用类成员变量:
geometry_msgs::Vector3 vector//三轴加速度
——————————————————————————————————————————————————————————
3.setpoint_attitude 控制期望的姿态
消息名称:mavros/setpoint_attitude/attitude
类型名称:geometry_msgs::PoseStamped
类型所在头文件:geometry_msgs/PoseStamped.h
常用类成员变量:
geometry_msgs::Pose pose//三个欧拉角,或者4元数任选其一
——————————————————————————————————————————————————————————
4.setpoint_position 控制期望的位置
消息名称:mavros/setpoint_position/local
类型名称:geometry_msgs::PoseStamped
类型所在头文件:geometry_msgs/PoseStamped.h
常用类成员变量:
geometry_msgs::Pose pose//NED坐标系下的位置(xyz),只有position成员变量生效
——————————————————————————————————————————————————————————
5.setpoint_velocity 控制期望的速度
消息名称:mavros/setpoint_velocity/cmd_vel
类型名称:geometry_msgs::TwistStamped
类型所在头文件:geometry_msgs/TwistStamped.h
常用类成员变量:
geometry_msgs::Twist twist//三轴速度
geometry_msgs::Twist类成员变量:
geometry_msgs::Vector3 linear//三轴线性速度
geometry_msgs::Vector3 angular//三轴角速度
——————————————————————————————————————————————————————————
6.控制期望的位置(GPS坐标)
消息名称:mavros/setpoint_position/global
类型名称:mavros_msgs::GlobalPositionTarget
类型所在头文件:mavros_msgs/GlobalPositionTarget.h
常用类成员变量:
uint8 coordinate_frame//5为绝对GPS坐标,6为相对高度GPS坐标
uint16 type_mask
/*以下为控制掩码,如果只想控制经纬高,type_mask=8+16+32+64+128+256+512+1024+2048
uint16 IGNORE_LATITUDE = 1# Position ignore flags
uint16 IGNORE_LONGITUDE = 2
uint16 IGNORE_ALTITUDE = 4
uint16 IGNORE_VX = 8# Velocity vector ignore flags
uint16 IGNORE_VY = 16
uint16 IGNORE_VZ = 32
uint16 IGNORE_AFX = 64# Acceleration/Force vector ignore flags
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*/
float64 latitude//经纬高
float64 longitude
float32 altitude
geometry_msgs/Vector3 velocity//速度
geometry_msgs/Vector3 acceleration_or_force//加速度
float32 yaw//偏航
float32 yaw_rate//偏航速度
下面将会围绕两个服务来进行讲解(模式切换、解锁)介绍:
——————————————————————————————————————————————————————————————
1.arming Services加解锁服务
消息名称:mavros/cmd/arming
类型名称:mavros_msgs::CommandBool
类型所在头文件:mavros_msgs/CommandBool.h
服务请求参数:
bool value//设置true为解锁,false为加锁
服务返回结果:
bool success//是否执行成功
uint8 result//错误信息
注意:在ros中所有服务参数都在xxx.request中,所有返回状态都在xxx.response中
如果我们想要解锁,那么代码可以如下来写:
ros::init(argc, argv, "offb_node");
ros::NodeHandle nh;
ros::ServiceClient arming_client = nh.serviceClient<mavros_msgs::CommandBool>("mavros/cmd/arming");
mavros_msgs::CommandBool arm_cmd;
arm_cmd.request.value = true;//注意这里是arm_cmd.request.value,不是arm_cmd.value
arming_client.call(arm_cmd);
执行完毕以后返回信息在:
arm_cmd.response.success
arm_cmd.response.result
——————————————————————————————————————————————————————————
2.模式切换
消息名称:mavros/set_mode
类型名称:mavros_msgs::SetMode
类型所在头文件:mavros_msgs/SetMode.h
服务请求参数:
uint8 base_mode//基本模式,如果custom_mode不为空,此项无效
string custom_mode//通常我们使用custom_mode,如果想进入offboard模式,在px4中赋值为"OFFBOARD",APM中为"GUILDED"
到这主要参数就结束啦,下次再为大家带来具体的程序例子。

页: [1]
查看完整版本: mavros与px4飞控通信的重要消息与服务