【正文】
ased on the vector field the given value is too large or too small the robot can not go through obstacles safely using traditional vector field histogram method. Basing on the VFH, firstly ,determining a range of safe driving use the data from laser range changing the given value automatically and choosing the optimal value , finally using the differential drive control method make the robot avoid obstacles make it e ture in the Robotic在人們的日常生活中,機(jī)器人也開始得到使用并引起人們的高度關(guān)注。主要任務(wù)和目標(biāo):學(xué)習(xí)和了解Robotic (21)L:物體與傳感器間的距離;c:光速。損耗函數(shù)L可以表示為: (22)其中,表示目的角度; 表示輪子角度; 表示原來(lái)角度k、u、w為比例系數(shù),損耗最小的就是最優(yōu)路徑,調(diào)整這些系數(shù)可以改變移動(dòng)機(jī)器人的避障效果。它的最大好處就是對(duì)個(gè)人、學(xué)?;蛘唛_發(fā)商都是免費(fèi)的。:圖31算法流程圖圖31為基于VFH算法改進(jìn)的算法流程圖。圖32確定機(jī)器人可以安全通過(guò)的路徑方向步驟3:在步驟2中得到的所有預(yù)備扇形區(qū)域中,將所有連接在一起的并接成一個(gè)待判斷的大扇形區(qū)域,該待判斷的大扇形區(qū)域表示為Qd,d為1,2,…,Td(其中Td表示待判斷大扇形區(qū)域的個(gè)數(shù)且Td72)。 確定給定值的原則在2中對(duì)于某個(gè)確定的給定值G,可以求得移動(dòng)機(jī)器人安全避開障礙物的路徑方向,圖33是給定值G不同時(shí),移動(dòng)機(jī)器人所或得的安全避開障礙物的路徑方向圖,圖331和圖332分別是給定值為3和4的時(shí)候,此時(shí)所獲得的路徑方向角度全都超過(guò)90176。①:假定給定值值G的最大值Gmax: (35)所有可能的給定值為Gj: (36)其中G0為最小的給定值: (37)K0是一比例系數(shù),S0表示移動(dòng)機(jī)器人從最大的速度開始到停止是所運(yùn)行的距離: (38),減速的加速度a為1,G0確定為1, UG的值選為41,則容易得到Gmax為4。 角速度控制由2的③可得最優(yōu)給定值,Gb對(duì)應(yīng)的安全路徑方就是機(jī)器人的最終行走方向,用表示。 根據(jù)差分驅(qū)動(dòng)控制原理我們可以得到機(jī)器人的角速度、線速度與左右輪的關(guān)系如式314: (314) 其中和分別是左輪和右輪的速度,l表示輪子間的距離,表示機(jī)器人的線速度,表示機(jī)器人的角速度。圖43 修飾機(jī)器人圖44修改機(jī)器人名字和式樣這里我們把Name改成“P3DX”。獲取激光數(shù)據(jù)的思路為圖410所示:圖410 LRF獲取數(shù)據(jù)首先使用get函數(shù)給機(jī)器人人發(fā)送消息,然后接下來(lái)判斷數(shù)據(jù)是否錯(cuò)誤,如果數(shù)據(jù)正確的話則將數(shù)據(jù)保存在sensorState的DistanceMeasurements屬性中, sensorState = ()sensorOrFault 判斷數(shù)據(jù)的程序?yàn)椋篵ool HasErrorT(PortSetT, Fault sensorOrFault) { Fault fault = (Fault)sensorOrFault。 (1)在窗口中顯示LRF數(shù)據(jù)為了能夠在窗口中更直觀的觀察激光傳感器所獲得的數(shù)據(jù),首先在Example3項(xiàng)目中添加一個(gè)名為L(zhǎng)aserData窗體,再在該窗體中添加一個(gè)名為pictureBoxLaser 的PictureBox控件, 為了能夠更新pictureBoxLaser控件,在窗體中新增一個(gè)方法UpdateLaserData由于獲取傳感器數(shù)據(jù)是在Example3Service類中,需要在Example3Service類中能夠調(diào)用該窗體的UpdateLaserData方法。這樣,當(dāng)每次獲得激光傳感器數(shù)據(jù)后,就會(huì)更新窗體中的pictureBoxLaser控件了。 該段程序可以將機(jī)器人P3DX的線速度和角速度寫在D盤下的名為textbook的txt文件中。 yield return ()。 = 。圖4—12 選擇Partner到現(xiàn)在為止場(chǎng)景環(huán)境與編寫的程序已建立起關(guān)系,接下來(lái)運(yùn)行即可,在菜單項(xiàng)中選擇Run Run Manifest或者按F5開始運(yùn)行仿真程序。本避障算法可以自動(dòng)改變給定值的大小,并且選擇最優(yōu)給定值來(lái)保障機(jī)器人以最快和最安全的避開障礙物。 a = (q1)。 //顯示在_laserDataForm中 ((Position: \r\nX={0}, Y={1}, Z={2}\r\nOrientation: \r\nX={3}, Y={4}, Z={5}\r\n W={6},Angle={7}\r\nVelocity={8},{9},{10}\r\nA Velocity={11},{12},{13}, , , , , , , , ConvertQuaternion() * 180 / , , , , , , ))??梢酝ㄟ^(guò)