无人机开发(基于Dji onboard SDK)
目前成果
仿真:发现物体能向大致方向飞行,没检测到飞机会停住。
实验:飞机没检测到无人机无法悬停,跟踪不稳定。
1.很容易出现检测不到无人机的情况,后面需要在新的场景中训练数据集,并且需要在数据集中加入远处的无人机的照片。
2.需要加入uav的probability阈值。
3.记录写下的所发点的坐标,写入log文件,以便后面分析。
4.加入跟踪算法(在ROS中比较麻烦)。
硬件软件平台的搭建
无人机平台 :Dji M210 V2 (with RTK)
机载电脑:Manifold 2-G
相机: Zenmuse X7
开发环境:ROS and C++
ROS
网络图
工作流程
dji_sdk作为服务端发布setup_camera_stream服务,这个服务是darknet_ros订阅main_camera_images的前提,需要drone_get_img这个节点召唤这个服务。
dji_sdk发布主相机(Zenmuse X7)的图片(/dji_sdk/main_camera_images)给darknet_ros。
darknet_ros接受图片并识别uav,把uav的信息(/darknet_ros/bounding_boxes)发布给drone_catcher_target。
drone_catcher_target接受uav的信息和飞机的姿态信息(/dji_sdk/attitude),利用图片的信息和本身的姿态通过卡尔曼滤波将识别到的uav转换成相对与飞机的ENU坐标,并将该坐标发布给flight_dots节点。
flight_dots与dji_sdk之间互相通信完成飞点。
节点介绍
dji_sdk
初始化飞机的参数,发布一些例如飞机姿态的信息,发布一些有关飞机的功能的服务例如后续要用的camera_stream。
同时在这个节点中可以关闭advanced sensing功能,这个功能和Windows中的仿真互相矛盾,当要用到windows中DJI Assistant 2 For Matrice 的Simulator时,要将代码中的
enable_advanced_sensing = true;
改为
enable_advanced_sensing = false;
还有当妙算与M210用USB相连时,妙算会把M210自动识别为USB device,此时遥控器上会黑屏,并且显示X7 SD卡内存不足,此时需要将飞机标识为相机设备,具体方法为
vehicle->advancedSensing->setAcmDevicePath("/dev/ttyACM0");
启发于linux版本的camera_stream_callback_sample例子。