因為這個項目是視覺+控制,使用純裸機實現(xiàn)我還沒有看到,目前就是依托操作系統(tǒng)來實現(xiàn):
需要ROS,OSDK,MSDK,三大類的包,后面是行人監(jiān)測+KCF追蹤。
在具體的看實現(xiàn)以前,我們看一下這個launch文件
roslaunch 命令允許我們一次啟動 launch 文件中定義的多個 ROS 節(jié)點,啟動參數(shù)等在啟動文件(launch 文件)中配置,并且如果系統(tǒng)之前沒有啟動 roscore,則 roslaunch 會自動啟動它。
使能人追蹤
4個主題,圖像發(fā)布,人的目標監(jiān)測,追蹤,GPS信號的發(fā)送。
然后開啟:
roslaunch dji_sdk_demo dji_sdk_client.launch
roslaunch dji_sdk sdk_manifold.launch
后面這個我沒有找到。。。,上面分別是:dji_sdk_client 和 dji_sdk節(jié)點。
roslaunch people_detect ros_people_detect.launch
運行監(jiān)測
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<
該回調(diào)函數(shù)用于啟動任務(wù),即啟動自主檢測和跟蹤
該回調(diào)函數(shù)用于開始跟蹤,即people_detect節(jié)點給kcf_track節(jié)點一個目標。實際上,這個目標就是離圖像中心最近的人,如果沒有檢測到人,跟蹤程序就不會運行,但是當再次檢測到人時,跟蹤程序就會自動運行。
該回調(diào)函數(shù)用于啟動和停止人員檢測
此回調(diào)函數(shù)用于停止 kcf 跟蹤器
因為OSDK4是支持新飛機的,我這里就選擇3.9
看了看issue,也是說明了這個問題,很新
也可以看到這個視覺+控制是很常見的應(yīng)用
我的A3也就是在3版本玩耍了
有用到CV
這個是飛行的控制參數(shù)
???啥子???
還有一個CIL的控制函數(shù),是Python2版本的
原來以前有Python接口
下載一下看看
大開眼界
牛逼,直接就是一個類
1
在這里封裝
在這里實現(xiàn)
把文件放入這里
改一下導入位置
"[a] Request to obtain control"
這個就是一個重定向的代碼,應(yīng)該是
請求控制的函數(shù)
在下面
在這里最終控制,就是信息的流轉(zhuǎn)
ROS服務(wù)由srv文件定義,其中包含請求消息和響應(yīng)消息。ROS 使用簡化的服務(wù)描述語言(“srv”)來描述 ROS 服務(wù)類型。
這直接建立在 ROS消息格式之上,以啟用節(jié)點之間的請求/響應(yīng)通信。服務(wù)描述存儲在包的srv/子目錄下的.srv文件中。
我們最后看一個飛行任務(wù)控制,RC,手機,板載
反正就是測試的文件,還是挺有學頭的,再說吧。
也可以看下具體的控制函數(shù),實現(xiàn)
這個是PID的內(nèi)容,就兩個PID函數(shù)
普通的
增量式的
人控制型,試試上這個是派生的子類
這個是追蹤的爸爸,是OpenCV實現(xiàn)的,看不懂。。。,對了,應(yīng)該是配置
上面也說過了
接著看這個追蹤的節(jié)點
先獲取一些在launch里面設(shè)置的東西,接著就是設(shè)計高度,下面都是像子進程一樣的東西。
處理的頻率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這么長,語法有點古怪。得到相機的信息,和最大的速度,然后是設(shè)置的圖像的尺寸,接著設(shè)置追蹤的目標,里面是生成一個追蹤的框子(這里是生成了點而已,寫錯了)。
最后是在中間生成一個點。
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)); }
這個是視頻的初始化,可以留下追蹤的視頻:
目錄在電腦的桌面
控制好高度的函數(shù)
在一開始的類里面寫的參數(shù)
這個是畫框的函數(shù),看來上面我有寫錯的地方
畫完框,然后就寫入
寫入到MP4文件
好久沒有摸ROS,一些API不記得了,明天繼續(xù)。
審核編輯:劉清
-
OSDK
+關(guān)注
關(guān)注
0文章
3瀏覽量
8128 -
ROS
+關(guān)注
關(guān)注
1文章
278瀏覽量
17009 -
裸機
+關(guān)注
關(guān)注
0文章
39瀏覽量
6376 -
KCF
+關(guān)注
關(guān)注
0文章
2瀏覽量
858
原文標題:DJI OSDK開發(fā)-檢測行人+追蹤.1
文章出處:【微信號:TT1827652464,微信公眾號:云深之無跡】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
相關(guān)推薦
評論