日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

【自动化毕业设计】基于机械视觉控制的板球控制装置

發(fā)布時(shí)間:2023/12/20 编程问答 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【自动化毕业设计】基于机械视觉控制的板球控制装置 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

【自動(dòng)化畢業(yè)設(shè)計(jì)】基于機(jī)械視覺控制的板球控制裝置


大四自動(dòng)化專業(yè)畢業(yè)設(shè)計(jì),斷斷續(xù)續(xù)制作了三個(gè)月,中途參加了校招和其他雜事,按照一般工作強(qiáng)度制作大概需要3個(gè)星期。

【實(shí)現(xiàn)功能】
自平衡控制
定位控制
運(yùn)動(dòng)軌跡規(guī)劃控制
隨動(dòng)系統(tǒng)控制
【視頻演示】
https://www.bilibili.com/video/av36573493
https://www.bilibili.com/video/av36688397
【制作過程】
板材:
所有黑色板材都是用啞光(磨砂)亞克力板。
400* 400* 3 一塊(藍(lán)色箭頭)
500* 600* 3 兩塊(紅色箭頭)
40 * 500* 3 四塊(綠色箭頭)
40 * 580* 3 四塊(綠色箭頭)

舵機(jī)固定架:


絲桿與板材連接結(jié)構(gòu):
三個(gè)絲桿,M4 (2支) 、M8(1支)、M3螺絲+M3螺帽數(shù)個(gè)

25T金屬舵機(jī)擺臂2

連桿頭2:

1010mm(1個(gè))、55mm(2個(gè))萬向節(jié):

M8絲桿底座(關(guān)鍵字:管道支架):

用ab膠粘牢后組裝效果圖:

如果覺得有松動(dòng)的話可以適當(dāng)加上杜邦線擰緊,會(huì)有減震效果

其余元件:
舵機(jī)2(串行總線舵機(jī)、普通的模擬舵機(jī)都行,自行制作一個(gè)下位機(jī)即可)
usb攝像頭1

氧化鋯小球12mm * 1

之所以選用氧化鋯小球,是我做了很多實(shí)驗(yàn)得出的結(jié)果

表面越光滑的小球,可控制程度越高。比如我設(shè)置底盤傾角為5°,乒乓球在上面可能會(huì)保持靜止,而氧化硅小球可能在1°的時(shí)候就會(huì)發(fā)生運(yùn)動(dòng)。如果可控度低,在控制算法上就要用大量算法解決這個(gè)問題。攝像頭我采用1920*1080分辨率采集圖像數(shù)據(jù),大概是30fps。
完成機(jī)械機(jī)構(gòu)標(biāo)準(zhǔn)是,小球的底盤盡量不能出現(xiàn)在垂直Z軸放向的轉(zhuǎn)動(dòng);調(diào)節(jié)舵機(jī)處于中值附近時(shí)底盤上可停留小球使其靜止(我會(huì)放出串口控制舵機(jī)的源碼供大家修改參考);底盤與相機(jī)畫面盡量平衡(如圖)

【程序框圖】

【圖像算法】
通過opencv獲取攝像頭畫面,初始化時(shí)設(shè)置平板的左上與右下坐標(biāo),在之后的處理中即可排除無相關(guān)的環(huán)境。

/* 打開攝像頭 */capture = VideoCapture(CV_CAP_DSHOW);capture.open(cap);/* 設(shè)置攝像頭 */capture.set(CV_CAP_PROP_FOURCC, CV_FOURCC('M', 'J', 'P', 'G'));//設(shè)置為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);//對(duì)比度 40capture.set(CV_CAP_PROP_SATURATION, 50);//飽和度 50capture.set(CV_CAP_PROP_HUE, 50);//色調(diào) 50capture.set(CV_CAP_PROP_EXPOSURE, -6.5);//曝光/* 獲取可識(shí)別范圍 */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; /* 點(diǎn)擊鼠標(biāo)執(zhí)行 */ 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;}} }

這里為了提高算法的可移植性,應(yīng)該加上一個(gè)轉(zhuǎn)換系統(tǒng),作為像素點(diǎn)與實(shí)際長度的轉(zhuǎn)換中間量,比如我的底盤長度是400mm的,圖像上占了600個(gè)像素點(diǎn),那么之間的比例系數(shù)就是1.5,往后的小球運(yùn)算中輸入的都是mm為單位的數(shù)據(jù)。

/* 初始化平板 */exchange_value_x = REAL_HEIGHT / (broad_position2.x - broad_position1.x);exchange_value_y = REAL_WIDTH / (broad_position2.y - broad_position1.y);

獲取到一幀圖像數(shù)據(jù)后,經(jīng)過裁剪、灰度化、二值化,理想的圖片應(yīng)為:

再通過掃描像素點(diǎn),判斷每行像素點(diǎn)中白色所占長度是否為預(yù)設(shè)的小球半徑,如果符合條件則得出小球x軸坐標(biāo)與y軸坐標(biāo)。小球的速度則是兩次通過兩次坐標(biāo)差算出的。

capture >> frame; //將攝像頭的視頻流轉(zhuǎn)換成Mat格式的圖像 frame = frame(Range(broad_position1.y, broad_position2.y - 1), Range(broad_position1.x, broad_position2.x - 1)); //裁剪 cvtColor(frame2, frame, COLOR_RGB2GRAY); //彩色圖像灰度化 threshold(frame, frame, THRESH_BINARY_C_VALUE, THRESH_BINARY_H_VALUE, CV_THRESH_BINARY); //二值化 Point position; for (int i = 0; i < frame.rows - 1; i++) {unsigned char *data1 = frame.ptr<uchar>(i);for (int j = 0; j < frame.cols - 1; j++){if (data1[j] >= 250) {int begin = j;while (data1[j++] >= 250 && (j < frame.cols - 2));if ((double)(j - begin)*exchange_value_x <= mindiameter || ((double)(j - begin)*exchange_value_x >= maxdiameter))//不是球,掃描下一行{continue;}position.x = (j + begin)/2;position.y = i;double radiu = j - begin;radiu = exchange_value_x* radiu;ball_state = true;x = (double)position.x*exchange_value_x;y = (double)position.y *exchange_value_y;cout << "半徑=" << radiu << " ";_x_speed = (x- position_x) ;_y_speed= (y- position_y) ;position_x = x;position_y = y;lasttime = newtime;return true;}} } ball_state = false; return false;

【控制算法】
采用的是“X/Y坐標(biāo)位置外環(huán)——速度內(nèi)環(huán)串級(jí)PID控制”與“X軸——Y軸并級(jí)PID控制”,系統(tǒng)結(jié)構(gòu)框圖如下。速度環(huán)主要起著限速的作用,所以無需積分,控制精度由位置環(huán)的積分環(huán)節(jié)發(fā)揮主要作用。調(diào)試過程是先把解決速度PD環(huán),首先加入比例參數(shù),使關(guān)閉微分作用,速度設(shè)定值為0,把小球推置底盤中,觀察系統(tǒng)是否可把小球平衡至靜止?fàn)顟B(tài),調(diào)節(jié)幅度過大舵機(jī)反復(fù)震蕩則把比例系數(shù)減小,調(diào)節(jié)幅度過小球直接按照原速度方向滾下底盤則把比例系數(shù)增大。當(dāng)系統(tǒng)可把小球穩(wěn)定在底盤上時(shí)則開始調(diào)節(jié)微分系數(shù)。微分的作用是加快系統(tǒng)穩(wěn)定速度,減少超調(diào)量,這個(gè)大家調(diào)試時(shí)候自行酌情調(diào)試吧。
外環(huán)的調(diào)試順序是P-D-I,比例系數(shù)和微分系數(shù)還是根據(jù)上述情況去調(diào)試,我在積分部分加上了積分分離算法和防止積分過飽和算法,積分是為了提高位置控制精度的,如果積分作用有過大的負(fù)面作用,可以適當(dāng)降低精度要求。
最后的圓周運(yùn)動(dòng),是在原有控制上加了一個(gè)半徑外環(huán)PI算法

【后序擴(kuò)展】
我自己加了紅點(diǎn)識(shí)別做的隨動(dòng)系統(tǒng)和手柄的控制、模式切換,這個(gè)大家可以自由發(fā)揮啦~
資源:
鏈接: https://pan.baidu.com/s/1NgEjScvQoY_u7rp_vTdHPA 提取碼: qumd

總結(jié)

以上是生活随笔為你收集整理的【自动化毕业设计】基于机械视觉控制的板球控制装置的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。