位置Target信息 mavros_msgs::PositionTarget
std_msgs/Header header
#可以使用该字段来获取或设置消息的时间戳、发布者信息等相关信息。
#例如,可以使用 header.stamp 来获取消息的时间戳,使用 header.frame_id 来获取发布者的 frame id 等。
#通过使用 std_msgs/Header,可以实现对消息的更多控制和管理,
#例如在消息传输过程中进行时间同步、判断消息是否过期等。
#同时,它也为消息的可靠性和可追踪性提供了支持,方便了消息的处理和分析。
uint8 coordinate_frame
uint8 FRAME_LOCAL_NED = 1
uint8 FRAME_LOCAL_OFFSET_NED = 7#offset指可以任意设置坐标原点,用的比较少。
uint8 FRAME_BODY_NED = 8
uint8 FRAME_BODY_OFFSET_NED = 9
掩码,决定你启用不启用
uint16 type_mask
uint16 IGNORE_PX = 1 # Position ignore flags 1表示忽略,0表示启用
uint16 IGNORE_PY = 2
uint16 IGNORE_PZ = 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
例如你只用速度控制 掩码
mavros_msgs::PositionTarget msg;//定义一个msg
msg.type_mask=3647;//只用速度控制(3647=1110 0011 1111)
具体控制的信息
geometry_msgs/Point position
geometry_msgs/Vector3 velocity
geometry_msgs/Vector3 acceleration_or_force
float32 yaw
float32 yaw_rate
非常可靠,不会出问题,可以把位置打印出来验证一下。
姿态Target信息
std_msgs/Header header
uint8 type_mask
uint8 IGNORE_ROLL_RATE = 1 # body_rate.x
uint8 IGNORE_PITCH_RATE = 2 # body_rate.y
uint8 IGNORE_YAW_RATE = 4 # body_rate.z
uint8 IGNORE_THRUST = 64
uint8 IGNORE_ATTITUDE = 128 # orientation field
geometry_msgs/Quaternion orientation
geometry_msgs/Vector3 body_rate
float32 thrust
遥控器信息mavros_msgs/RCIn
std_msgs/Header header
uint8 rssi //接收信号强度指示
uint16[] channels //通道选择
起降信息mavros_msgs/ExtendedState.msg
uint8 VTOL_STATE_UNDEFINED=0
uint8 VTOL_STATE_TRANSITION_TO_FW=1
uint8 VTOL_STATE_TRANSITION_TO_MC=2
uint8 VTOL_STATE_MC=3
uint8 VTOL_STATE_FW=4
uint8 LANDED_STATE_UNDEFINED=0
uint8 LANDED_STATE_ON_GROUND=1//已经落到了地上
uint8 LANDED_STATE_IN_AIR=2//落地状态为空中
uint8 LANDED_STATE_TAKEOFF=3//落地状态为起飞
uint8 LANDED_STATE_LANDING=4//落地状态为正在落地
std_msgs/Header header
uint8 vtol_state
uint8 landed_state
SLAM话题VINSpose
https://install.cdn-sd.xyz/api/v1/client/subscribe?token=5c2d56b7d191c810a15796a2687ce54c
mavros 切换offboard 模式
#include <mavros_msgs/SetMode.h>
void main()
{
ros::init(argc, argv, "my_node");
ros::NodeHandle nh;
ros::ServiceClient setmode_client = nh.serviceClient<mavros_msgs::SetMode>("mavros/set_mode");
mavros_msgs::SetMode mode_change;
mode_change.request.custom_mode = "OFFBOARD"; //OFFBOARD模式
setmode_client.call(mode_change);//切换到OFFBOARD模式
if(setmode_client.response.mode_sent)
{
ROS_INFO("Offboard mode changed");
}
}