对DJI无人机Client代码的重构

  最近完成了对DJI无人机代码的重构工作,这里记录一下重构过程中遇到的问题。

  重构之后代码如下:

228x300 - 对DJI无人机Client代码的重构

  client.cpp是节点文件,也是主文件,位于/home/ubuntu/sdk/src/dji_sdk_demo/src目录下。

  CMakeLists.txt是编译文件,位于/home/sdk/src/dji_sdk_demo/目录下,如果增加库函数要修改该文件中add_executable中的内容。

  userlib是库文件的文件夹,位于/home/sdk/src/dji_sdk/include/目录下。

  usercpp是库文件对应的cpp文件,位于/home/ubuntu/sdk/src/dji_sdk_demo/src目录下。

  每个文件说明如下:

config.h

  定义所需要的所有库函数和全局变量,以及函数Config相关的宏定义。该头文件中定义的函数是所有代码中可以共用的计算性的函数。

flycontrol.h

  定义关于无人机飞行控制相关的函数,例如距离差计算,高度差计算,GPS差计算,集体坐标系移动的速度控制,无人机拍照函数等等。

imagealign.h

  图像对准有关的函数,定义了视觉处理函数。

infocallback.h

  信息回传相关函数的定义,接受无人机传递的message。

protocol.h

  通信协议相关的函数,如发送指令,增加航点等等。

simulator.h

  使用模拟器仿真时相关的函数,如接受按键,按键控制状态机切换等等。

  在函数编译的过程中,出现了一些问题,现在具体说一下解决方法:

问题一:编译时出现multiple definition of问题如何解决

  具体参考链接:http://blog.csdn.net/wu070815/article/details/8781762

  用其中的第二种方法,即在config.h文件中的全局变脸先加extern申明,并且在此文件中不能赋值,而在config.cpp文件中进行申明以及赋值操作。

  因此今后增加全局变量也需要在config.h中加上申明,config.cpp加上真正的定义和初始化,不然会报错。

问题二:

VideoWriter writer("VideoTest.avi", CV_FOURCC('M', 'J', 'P', 'G'), 25.0, Size(640, 480));

  使用方法参考以下链接:http://blog.csdn.net/yang_xian521/article/details/7440190

  以上指令可以生成视频流,如何把它分解成先定义,然后再赋值的形式。

  具体参考以下链接:http://docs.opencv.org/trunk/dd/d9e/classcv_1_1VideoWriter.html

  即