【自动化毕业设计】基于机械视觉控制的板球控制装置
【自動化畢業設計】基于機械視覺控制的板球控制裝置
大四自動化專業畢業設計,斷斷續續制作了三個月,中途參加了校招和其他雜事,按照一般工作強度制作大概需要3個星期。
【實現功能】
自平衡控制
定位控制
運動軌跡規劃控制
隨動系統控制
【視頻演示】
https://www.bilibili.com/video/av36573493
https://www.bilibili.com/video/av36688397
【制作過程】
板材:
所有黑色板材都是用啞光(磨砂)亞克力板。
400* 400* 3 一塊(藍色箭頭)
500* 600* 3 兩塊(紅色箭頭)
40 * 500* 3 四塊(綠色箭頭)
40 * 580* 3 四塊(綠色箭頭)
舵機固定架:
絲桿與板材連接結構:
三個絲桿,M4 (2支) 、M8(1支)、M3螺絲+M3螺帽數個
25T金屬舵機擺臂2
連桿頭2:
1010mm(1個)、55mm(2個)萬向節:
M8絲桿底座(關鍵字:管道支架):
用ab膠粘牢后組裝效果圖:
如果覺得有松動的話可以適當加上杜邦線擰緊,會有減震效果
其余元件:
舵機2(串行總線舵機、普通的模擬舵機都行,自行制作一個下位機即可)
usb攝像頭1
氧化鋯小球12mm * 1
之所以選用氧化鋯小球,是我做了很多實驗得出的結果
表面越光滑的小球,可控制程度越高。比如我設置底盤傾角為5°,乒乓球在上面可能會保持靜止,而氧化硅小球可能在1°的時候就會發生運動。如果可控度低,在控制算法上就要用大量算法解決這個問題。攝像頭我采用1920*1080分辨率采集圖像數據,大概是30fps。
完成機械機構標準是,小球的底盤盡量不能出現在垂直Z軸放向的轉動;調節舵機處于中值附近時底盤上可停留小球使其靜止(我會放出串口控制舵機的源碼供大家修改參考);底盤與相機畫面盡量平衡(如圖)
【程序框圖】
【圖像算法】
通過opencv獲取攝像頭畫面,初始化時設置平板的左上與右下坐標,在之后的處理中即可排除無相關的環境。 /* 打開攝像頭 */capture = VideoCapture(CV_CAP_DSHOW);capture.open(cap);/* 設置攝像頭 */capture.set(CV_CAP_PROP_FOURCC, CV_FOURCC('M', 'J', 'P', 'G'));//設置為MJPG格式capture.set(CV_CAP_PROP_FRAME_WIDTH, CAP_WIDTH);//寬度capture.set(CV_CAP_PROP_FRAME_HEIGHT, CAP_HEIGHT);//高度capture.set(CV_CAP_PROP_FPS, CAP_FPS);//幀率 幀/秒capture.set(CV_CAP_PROP_BRIGHTNESS, 1);//亮度 capture.set(CV_CAP_PROP_CONTRAST, 40);//對比度 40capture.set(CV_CAP_PROP_SATURATION, 50);//飽和度 50capture.set(CV_CAP_PROP_HUE, 50);//色調 50capture.set(CV_CAP_PROP_EXPOSURE, -6.5);//曝光/* 獲取可識別范圍 */Mat frame;capture >> frame;imshow("Vidio", frame);cvSetMouseCallback("Vidio", OnMouseCallBack, &frame);while (tmp2.y == -1) { waitKey(10); }destroyWindow("Vidio");broad_position1.x = tmp1.x;broad_position1.y = tmp1.y;broad_position2.x = tmp2.x;broad_position2.y = tmp2.y; /* 點擊鼠標執行 */ void OnMouseCallBack(int event, int x, int y, int flags, void *param) {static bool click_flag = false;if (event == CV_EVENT_LBUTTONDOWN){if (!click_flag){tmp1.x = x;tmp1.y = y;click_flag = true;}else{tmp2.x = x;tmp2.y = y;click_flag = false;}} }
這里為了提高算法的可移植性,應該加上一個轉換系統,作為像素點與實際長度的轉換中間量,比如我的底盤長度是400mm的,圖像上占了600個像素點,那么之間的比例系數就是1.5,往后的小球運算中輸入的都是mm為單位的數據。
/* 初始化平板 */exchange_value_x = REAL_HEIGHT / (broad_position2.x - broad_position1.x);exchange_value_y = REAL_WIDTH / (broad_position2.y - broad_position1.y);獲取到一幀圖像數據后,經過裁剪、灰度化、二值化,理想的圖片應為:
再通過掃描像素點,判斷每行像素點中白色所占長度是否為預設的小球半徑,如果符合條件則得出小球x軸坐標與y軸坐標。小球的速度則是兩次通過兩次坐標差算出的。
【控制算法】
采用的是“X/Y坐標位置外環——速度內環串級PID控制”與“X軸——Y軸并級PID控制”,系統結構框圖如下。速度環主要起著限速的作用,所以無需積分,控制精度由位置環的積分環節發揮主要作用。調試過程是先把解決速度PD環,首先加入比例參數,使關閉微分作用,速度設定值為0,把小球推置底盤中,觀察系統是否可把小球平衡至靜止狀態,調節幅度過大舵機反復震蕩則把比例系數減小,調節幅度過小球直接按照原速度方向滾下底盤則把比例系數增大。當系統可把小球穩定在底盤上時則開始調節微分系數。微分的作用是加快系統穩定速度,減少超調量,這個大家調試時候自行酌情調試吧。
外環的調試順序是P-D-I,比例系數和微分系數還是根據上述情況去調試,我在積分部分加上了積分分離算法和防止積分過飽和算法,積分是為了提高位置控制精度的,如果積分作用有過大的負面作用,可以適當降低精度要求。
最后的圓周運動,是在原有控制上加了一個半徑外環PI算法
【后序擴展】
我自己加了紅點識別做的隨動系統和手柄的控制、模式切換,這個大家可以自由發揮啦~
資源:
鏈接: https://pan.baidu.com/s/1NgEjScvQoY_u7rp_vTdHPA 提取碼: qumd
總結
以上是生活随笔為你收集整理的【自动化毕业设计】基于机械视觉控制的板球控制装置的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Docker 运行常用容器
- 下一篇: RFID读写器的组成