PX4无人机控制
向话题/mavros/setpoint_raw/local发布无人机目标位置+偏航,或者目标速度+偏航。
发布目标位置+偏航:
mission.positionTarget.type_mask =
// mavros_msgs::PositionTarget::IGNORE_PX |
// mavros_msgs::PositionTarget::IGNORE_PY |
// mavros_msgs::PositionTarget::IGNORE_PZ |
mavros_msgs::PositionTarget::IGNORE_VX |
mavros_msgs::PositionTarget::IGNORE_VY |
mavros_msgs::PositionTarget::IGNORE_VZ |
mavros_msgs::PositionTarget::IGNORE_AFX |
mavros_msgs::PositionTarget::IGNORE_AFY |
mavros_msgs::PositionTarget::IGNORE_AFZ |
mavros_msgs::PositionTarget::FORCE |
// mavros_msgs::PositionTarget::IGNORE_YAW |
mavros_msgs::PositionTarget::IGNORE_YAW_RATE;
发布目标速度+偏航:
mission.positionTarget.type_mask =
mavros_msgs::PositionTarget::IGNORE_PX |
mavros_msgs::PositionTarget::IGNORE_PY |
mavros_msgs::PositionTarget::IGNORE_PZ |
// mavros_msgs::PositionTarget::IGNORE_VX |
// mavros_msgs::PositionTarget::IGNORE_VY |
// mavros_msgs::PositionTarget::IGNORE_VZ |
mavros_msgs::PositionTarget::IGNORE_AFX |
mavros_msgs::PositionTarget::IGNORE_AFY |
mavros_msgs::PositionTarget::IGNORE_AFZ |
mavros_msgs::PositionTarget::FORCE |
// mavros_msgs::PositionTarget::IGNORE_YAW |
mavros_msgs::PositionTarget::IGNORE_YAW_RATE;
可以选择发布的是局部坐标系:
mission.positionTarget.coordinate_frame = mavros_msgs::PositionTarget::FRAME_LOCAL_NED;
或是机体坐标系:
mission.positionTarget.coordinate_frame = mavros_msgs::PositionTarget::FRAME_BODY_NED;
但是我发现在机体系下发布目标位置会有问题,飞机飞行的位置并不是跟随机体系变化而变化的。比方说,飞机目前正在(0,0,5)这个位置,在机体系下发布目标位置(5,0,5),和将飞机偏航改变一定角度后再发布目标位置(5,0,5),飞机将前往同一个地方。
当偏航和位置或速度同时变化的时候,飞机会同时进行这二者的动作,这在局部坐标系下是没有问题的,飞机还是会前往期望的地方。但是当是在机体系下速度和偏航同时变化时,比方说,飞机目前正在(0,0,5)这个位置,偏航是0,在机体系下发布目标速度(1,0,0),以及偏航90度,飞机将会绕个小圈。