因为这个项目是视觉+控制,使用纯裸机实现我还没有看到,目前就是依托操作系统来实现:
需要ROS,OSDK,MSDK,三大类的包,后面是行人监测+KCF追踪。
在具体的看实现以前,我们看一下这个launch文件
roslaunch 命令允许我们一次启动 launch 文件中定义的多个 ROS 节点,启动参数等在启动文件(launch 文件)中配置,并且如果系统之前没有启动 roscore,则 roslaunch 会自动启动它。
使能人追踪
4个主题,图像发布,人的目标监测,追踪,GPS信号的发送。
然后开启:
roslaunch dji_sdk_demo dji_sdk_client.launch
roslaunch dji_sdk sdk_manifold.launch
后面这个我没有找到。。。,上面分别是:dji_sdk_client 和 dji_sdk节点。
roslaunch people_detect ros_people_detect.launch
运行监测
roslaunch ros_kcf ros_kcf_node.launch
追踪
在之后,可以使用具有自定义功能的遥控器来控制跟踪和检测的停止和启动:
void StartMission1Callback(DJIDrone *drone) { drone->request_sdk_permission_control(); sleep(1); ros::Rate loop_rate(50); while(ros::ok()) { ros::spinOnce(); drone->attitude_control(0x4B,forwardV,leftrV,heightV,yawV); cout<
该回调函数用于启动任务,即启动自主检测和跟踪
该回调函数用于开始跟踪,即people_detect节点给kcf_track节点一个目标。实际上,这个目标就是离图像中心最近的人,如果没有检测到人,跟踪程序就不会运行,但是当再次检测到人时,跟踪程序就会自动运行。
该回调函数用于启动和停止人员检测
此回调函数用于停止 kcf 跟踪器
因为OSDK4是支持新飞机的,我这里就选择3.9
看了看issue,也是说明了这个问题,很新
也可以看到这个视觉+控制是很常见的应用
我的A3也就是在3版本玩耍了
有用到CV
这个是飞行的控制参数
???啥子???
还有一个CIL的控制函数,是Python2版本的
原来以前有Python接口
下载一下看看
大开眼界
牛逼,直接就是一个类
1
在这里封装
在这里实现
把文件放入这里
改一下导入位置
"[a] Request to obtain control"
这个就是一个重定向的代码,应该是
请求控制的函数
在下面
在这里最终控制,就是信息的流转
ROS服务由srv文件定义,其中包含请求消息和响应消息。ROS 使用简化的服务描述语言(“srv”)来描述 ROS 服务类型。
这直接建立在 ROS消息格式之上,以启用节点之间的请求/响应通信。服务描述存储在包的srv/子目录下的.srv文件中。
我们最后看一个飞行任务控制,RC,手机,板载
反正就是测试的文件,还是挺有学头的,再说吧。
也可以看下具体的控制函数,实现
这个是PID的内容,就两个PID函数
普通的
增量式的
人控制型,试试上这个是派生的子类
这个是追踪的爸爸,是OpenCV实现的,看不懂。。。,对了,应该是配置
上面也说过了
接着看这个追踪的节点
先获取一些在launch里面设置的东西,接着就是设计高度,下面都是像子进程一样的东西。
处理的频率50Hz
在图像和明确接收到东西的前提下,开始追踪的初始化
void trackerInit(const double &cameraInfo) { tracker.setParams(cameraInfo, max_v). setImgSize(image.cols,image.rows). setTarget(cv::Point(image.cols/2,image.rows/2), cv::Point(image.cols/2+1,image.rows/2+1))); }
是鄙人学识不够了,这nm这么长,语法有点古怪。得到相机的信息,和最大的速度,然后是设置的图像的尺寸,接着设置追踪的目标,里面是生成一个追踪的框子(这里是生成了点而已,写错了)。
最后是在中间生成一个点。
void videoInit(const std::string &fileAddr) { int t = cv::getTickCount(); std::string fileName_ = fileAddr + std::to_string(t); std::string fileName = fileName_ + ".avi"; writer = cv::VideoWriter( fileName, CV_FOURCC('F', 'L', 'V', '1'), 25.0, cv::Size(image.cols, image.rows)); }
这个是视频的初始化,可以留下追踪的视频:
目录在电脑的桌面
控制好高度的函数
在一开始的类里面写的参数
这个是画框的函数,看来上面我有写错的地方
画完框,然后就写入
写入到MP4文件
好久没有摸ROS,一些API不记得了,明天继续。
审核编辑:刘清
-
OSDK
+关注
关注
0文章
3浏览量
8124 -
ROS
+关注
关注
1文章
278浏览量
17004 -
裸机
+关注
关注
0文章
39浏览量
6374 -
KCF
+关注
关注
0文章
2浏览量
852
原文标题:DJI OSDK开发-检测行人+追踪.1
文章出处:【微信号:TT1827652464,微信公众号:云深之无迹】欢迎添加关注!文章转载请注明出处。
发布评论请先 登录
相关推荐
评论