demo_flight_control.cpp
大致观察代码运行的流程,每一部分后面后详细补充说明
设置全局变量,程序在任意时刻都会调用到,具体会在 int main() 主函数中定义。
/* 服务的客户端 */
ros::ServiceClient set_local_pos_reference; // 惯性坐标
ros::ServiceClient sdk_ctrl_authority_service; // SDK控制权限
ros::ServiceClient drone_task_service; // 起飞、悬停、降落任务
ros::ServiceClient query_version_service; //
/* 发布者 */
ros::Publisher ctrlPosYawPub; // 位置(x,y,z)偏航角(yaw)
ros::Publisher ctrlBrakePub; // 刹车
/* 订阅话题的全局变量 */
uint8_t flight_status = 255;
uint8_t display_mode = 255;
/*
* 全局变量
*/
/* 当前GPS坐标 */
sensor_msgs::NavSatFix current_gps;
/* 当前姿态 */
geometry_msgs::Quaternion current_atti;
/* 当前惯性坐标 */
geometry_msgs::Point current_local_pos;
/* 任务 */
Mission square_mission;
在main() 函数中完成定义和初始化一些变量
消息订阅者:姿态角、GPS、惯性坐标、飞行状态
消息发布者:控制量(x、y、z、yaw)、控制类型(flag 这个会在后面详细介绍)
服务客户端:请求控制权限、请求飞行任务、未知(待补充)、请求设置惯性参考系。(这些服务由 dji_sdk_node 节点开启)
/*
* 消息订阅
*/
/* 姿态角(欧拉角) */
ros::Subscriber attitudeSub = nh.subscribe("dji_sdk/attitude", 10, &attitude_callback);
/* GPS */
r