步調(diào)1:硬件
我測(cè)驗(yàn)考試了多種IMU,機(jī)電,電動(dòng)機(jī)驅(qū)動(dòng)器,車(chē)輪跟電源。
MPU6050
Pololu低功率直流電念頭(2282:590rpm,9.68:1,17oz-in)
霍爾編碼器464.64cpr
Pololu輪120x60mm
ArduinoUNO
SeeedStudio4A機(jī)電罩
大沽藍(lán)牙模塊
RaspberryPi2B+
2xUltraBorg板,用于讀取Raspberry上的超聲波傳感器
2xDFRobotLiPo7.4V電池
HOBBYWING3A開(kāi)關(guān)形式UBEC5V6V
慣性丈量單位
視頻中的機(jī)器人利用基于InvenSenseMPU6050芯片的根本且本錢(qián)非常低的模塊。我借測(cè)驗(yàn)考試了基于MPU9150跟MPU9250的多個(gè)SeeedStudio模塊跟版本。后者的芯片名為10DOF,加速度計(jì)上增長(zhǎng)了氣壓計(jì)。
一切3種芯片上皆裝有數(shù)字運(yùn)動(dòng)處理器。利用此處理器有很大的劣勢(shì)。它正在計(jì)較垂直角度時(shí)節(jié)儉了大批代碼。其次,它存在內(nèi)置的校準(zhǔn)順序。最初但并不是最沒(méi)有緊張的一點(diǎn)是:它節(jié)儉了Arduino的CPU跟內(nèi)存的利用。
若是你念將DMP與Arduino聯(lián)合利用,即便正在“開(kāi)發(fā)人員專(zhuān)區(qū)”中,InvenSense文檔也杯水車(chē)薪。JeffRowberg正在這里宣布了有關(guān)MPU6050寄存器的精彩技能。該庫(kù)僅合用于MPU6050跟MPU9150。MPU9250的寄存器設(shè)置分歧。正在利用MPU9150芯片停止測(cè)試時(shí),DMP偶然會(huì)終止事情。最初,MPU6050給出了最好成果。(其他優(yōu)點(diǎn):這些模塊是最小,最薄且價(jià)錢(qián)非常低的模塊。)
若是MPU6050發(fā)生毛病的數(shù)據(jù),則能夠須要校準(zhǔn)傳感器的x,y,z偏移量??梢哉诖颂幷业接糜谛?zhǔn)偏移量的Arduino草圖
我閱歷過(guò),調(diào)劑偏移量可以進(jìn)步小角度的精度,但也會(huì)降低年夜角度的精度。到最初,芯片默許偏移量正在大多數(shù)環(huán)境下后果最好。
電動(dòng)機(jī),編碼器,電動(dòng)機(jī)驅(qū)動(dòng)器跟車(chē)輪
我利用的電動(dòng)機(jī):
大功率Microno1101,990rpm,齒輪:100.37:1,失速扭矩:30oz/in
大功率Microno2271,990rpm,齒輪:9.68:1,失速扭矩:39oz/in
大功率no2274,210rpm,齒輪:100:1,失速轉(zhuǎn)矩:80oz/in
小功率no2282,590rpm,齒輪:9.68:1,失速轉(zhuǎn)矩:17oz/in
除微型版本中,一切機(jī)電均隨附霍爾編碼器。它們發(fā)生容易操縱的分辨率,在于齒輪比,分辨率為464至2248節(jié)奏。關(guān)于微型馬達(dá),我利用了發(fā)生48個(gè)刻度的光學(xué)編碼器。
在我看來(lái),正在室內(nèi)利用扭矩不太緊張。我也閱歷了高功率版本,由于調(diào)音更難。它們存在更大的靜摩擦力(“逝世功率區(qū)”=起頭挪動(dòng)所需的功率),是以,我發(fā)明很難以很小的均衡差來(lái)調(diào)節(jié)功率。轉(zhuǎn)速與最大速率間接相關(guān)。在我看來(lái),關(guān)于初次樹(shù)立平衡器也沒(méi)有太緊張??墒?,極低的轉(zhuǎn)速簡(jiǎn)直沒(méi)有能夠到達(dá)不變的均衡。我的發(fā)起:利用平凡電動(dòng)機(jī),最好以600rpm擺布的速率運(yùn)行。
總體而言,只管來(lái)自不異系列的直流電念頭顯現(xiàn)出分歧且沒(méi)有同等的靜摩擦力。內(nèi)置差動(dòng)節(jié)制被證實(shí)是必不可少的。大概步進(jìn)機(jī)電將削減此問(wèn)題。步進(jìn)機(jī)電也消弭了對(duì)編碼器的需要。
我曾經(jīng)利用L298N單電動(dòng)機(jī)控制器板跟SeeedStudio4A電動(dòng)機(jī)控制器護(hù)罩停止了測(cè)試。我更喜好后者,由于它是盾牌。容易裝置,占用空間少。另外:我發(fā)明屏障罩4Amp可以更好天緩沖大功率機(jī)電的堵轉(zhuǎn)電流。(留神:請(qǐng)留神我的Arduino草圖中的引腳擺列。我體驗(yàn)到的屏蔽線(xiàn)與Seeed示例分歧。)
輪子你的生涯輕松。我利用的直徑離別為4.2、9跟12厘米。年夜輪轂帶來(lái)更大的穩(wěn)定性。那也合用于概況上的抓地力。我的最?lèi)?ài):“野生ump擊器”車(chē)輪。
身高跟體重對(duì)機(jī)器人的行動(dòng)也很緊張。較大的重量會(huì)使機(jī)器人連結(jié)惰性:反映遲緩,是以一起頭會(huì)顯現(xiàn)較大的過(guò)沖。當(dāng)然也須要大功率的電動(dòng)機(jī)。重心較下將使機(jī)器人加倍不變,但也能夠會(huì)招致效果。高度加上頂部的重量也會(huì)使機(jī)器人連結(jié)惰性。是以,那完整是調(diào)劑的問(wèn)題。當(dāng)機(jī)器人連結(jié)穩(wěn)定平衡時(shí),若是發(fā)明它正在向前或向后挪動(dòng)時(shí)反映遲緩,請(qǐng)測(cè)驗(yàn)考試加重重量跟/或加重重量。
電源
該機(jī)器人由兩節(jié)LiPo電池供電。一種用于為Arduino跟機(jī)電供電。一種用于為Raspberry供電,并經(jīng)由過(guò)程它與HC-SR04超聲波傳感器共同利用。我從一切組件的一個(gè)起源起頭。當(dāng)電動(dòng)機(jī)處于“重載”形態(tài)時(shí),它們接收了太多電流,以至于超聲波讀數(shù)變得毛病,以至RPi有時(shí)也會(huì)復(fù)位。為RPi跟Ultraborgs利用零丁的LiPo辦理了那一問(wèn)題,但我必需增添UBEC才氣取得5V3A的不變電流。
步調(diào)2:邏輯跟編碼
網(wǎng)上有良多有關(guān)均衡機(jī)器人跟/或倒立擺的信息??墒?,我利用了一個(gè)十分簡(jiǎn)化的邏輯,并存在以下假定:
1-機(jī)電軸該當(dāng)扭轉(zhuǎn)的角度與機(jī)器人掉落的角度不異。是以,請(qǐng)測(cè)驗(yàn)考試節(jié)制電動(dòng)機(jī)軸的角度,而不是距離跟/或速率。(如前所述,利用步進(jìn)機(jī)電能夠更簡(jiǎn)單實(shí)現(xiàn)。)
2-為了均衡,須要節(jié)制角度及其導(dǎo)數(shù),即機(jī)電軸的角速度。那可以經(jīng)由過(guò)程利用PD節(jié)制回路去實(shí)現(xiàn)。它沒(méi)有像PID回路那樣罕見(jiàn),可是因?yàn)檫\(yùn)動(dòng)標(biāo)的目的會(huì)疾速變更,是以利用積分因子簡(jiǎn)直不用途。
3–要連結(jié)地位,必需節(jié)制程度挪動(dòng)跟速率。那可以經(jīng)由過(guò)程將傳感器輸出轉(zhuǎn)換為賠償角度去實(shí)現(xiàn)。出于與垂直節(jié)制不異的緣故原由,所需的節(jié)制輪回也是PD輪回。
可以簡(jiǎn)略天將2跟3的成果相加,可是最好正在程度標(biāo)的目的利用嵌套節(jié)制輪回節(jié)制回路為垂直節(jié)制回路發(fā)生方針角度。
依照這些假定停止操縱可以節(jié)儉機(jī)器人的高度跟質(zhì)量的計(jì)較承擔(dān)(如上所述:這些是緊張因素,但可以輕松調(diào)劑)。如許,正在沒(méi)有變動(dòng)編碼參數(shù)的環(huán)境下調(diào)劑機(jī)器人的高度跟COG絕對(duì)簡(jiǎn)單。
連結(jié)機(jī)器人直面是經(jīng)由過(guò)程差動(dòng)節(jié)制實(shí)現(xiàn)的,而且可以自力于機(jī)器人程度跟垂直節(jié)制。輸入可以來(lái)自編碼器或來(lái)自IMU。后者所需的編碼要少得多。
要對(duì)其停止總結(jié),為了均衡,須要:
1將程度位移轉(zhuǎn)換為垂直位移角度
2賠償該角度與測(cè)得的角度之差
3將機(jī)電軸挪動(dòng)此賠償角度
要翻譯成代碼,須要機(jī)器人的某些功用:
最大電動(dòng)機(jī)速率以編碼器刻度默示。這是編碼器可以正在特定機(jī)電上發(fā)生的最大滴答聲。正在公式中:RPM/60*每轉(zhuǎn)刻度數(shù)
編碼器刻度數(shù)和度之間的關(guān)聯(lián)。正在公式中:360/每轉(zhuǎn)刻度數(shù)
分揀機(jī)器人銷(xiāo)售利用那兩個(gè)公式,咱們可以推論度數(shù)與電動(dòng)機(jī)功率之間的關(guān)聯(lián)。
醫(yī)藥行業(yè)高速分揀機(jī)器人Arduino草圖作為存在以下功用的機(jī)器人“固件”運(yùn)轉(zhuǎn):
依據(jù)車(chē)輪編碼器的輸入停止程度節(jié)制
垂直跟差分基于IMU輸入的節(jié)制
用于調(diào)劑,輸出監(jiān)督跟運(yùn)動(dòng)測(cè)試的藍(lán)牙通訊
與RaspberryPi的串行通訊
草圖正在這里。用于近程節(jié)制跟調(diào)劑的android應(yīng)用程序是利用MITAppInventor開(kāi)辟的,可以正在此處找到這些塊。用于正在Raspberry跟Arduino之間停止通訊跟節(jié)制的Python劇本位于統(tǒng)一存儲(chǔ)庫(kù)中。我不會(huì)正在此贅述,由于該帖子僅用于均衡基本面。
有關(guān)Arduino草圖的正文很好。是以,我將只先容一下其功用。
初始化
UNO的插針已被占用,不將傳感器毗鄰到Arduino的空間很大。
一些機(jī)器人/機(jī)電常數(shù)停止計(jì)較。
敗壞或靜摩擦常數(shù)。經(jīng)由過(guò)程試用跟測(cè)試網(wǎng)絡(luò)。我從草圖起頭,以獲得空載前提下的平均值。你會(huì)正在這里找到它。在實(shí)踐中,我正在測(cè)試均衡跟運(yùn)動(dòng)的同時(shí)依據(jù)窺察成果對(duì)它們停止了龐大調(diào)劑。這些常數(shù)便充足了,可是正在很大水平上在于電動(dòng)機(jī)的機(jī)能。跳過(guò)這些功率量會(huì)使機(jī)器人正在小角度時(shí)反映更快。可是將這些值設(shè)置得太高會(huì)正在調(diào)劑節(jié)制輪回時(shí)帶來(lái)一些應(yīng)戰(zhàn)!
maxAngle
假定沒(méi)法停止賠償?shù)慕嵌取S糜诳隙C(jī)器人是站立仍是躺下。
距離
不變的距離關(guān)于節(jié)制回路至關(guān)重要。正在Arduino站點(diǎn)上有一個(gè)“TimedAction”庫(kù),可是一個(gè)計(jì)時(shí)器的間接編碼非常簡(jiǎn)單,而且節(jié)儉了一些內(nèi)存。
pitchOffset
經(jīng)由過(guò)程調(diào)劑IMU取得。最簡(jiǎn)略的方式是將機(jī)器人流動(dòng)正在相對(duì)90度的地位并讀取IMU值。
cogOffset
不此常數(shù),節(jié)制回路也將取得均衡。第一個(gè)原型機(jī)帶有8個(gè)超聲波傳感器,這使它的前部有點(diǎn)繁重。正如你正在視頻中看到的那樣,節(jié)制輪回經(jīng)由過(guò)程讓機(jī)器人略微向后傾斜去停止調(diào)劑。利用cogOffset可以賠償傾斜,并使機(jī)器人行進(jìn)時(shí)加倍靈巧。
序列。begin
智能分揀機(jī)器人系統(tǒng)設(shè)計(jì)方案與RPi的通訊經(jīng)由過(guò)程USB串行停止。SoftwareSerial接線(xiàn)庫(kù)用于與Android使用停止藍(lán)牙通訊。
wdt_enable
初始化IMU毛病時(shí),設(shè)置了Averdude看門(mén)狗定時(shí)器,那將強(qiáng)迫Arduino復(fù)位。
resetRobot
每次運(yùn)轉(zhuǎn)時(shí)皆會(huì)初始化一切變量機(jī)器人放下。那對(duì)拾起機(jī)器人很有資助。
loop
只有機(jī)器人站立時(shí),將搜檢一切輸入。當(dāng)距離過(guò)來(lái)后,將履行節(jié)制輪回。我測(cè)驗(yàn)考試了分歧的工夫距離。最好取舍在于傳感器跟所用機(jī)電的類(lèi)型。跨越100Hz時(shí),我遇到了毛病的編碼器數(shù)據(jù),而且機(jī)器人的舉措也太“辣”了。正在50Hz時(shí),機(jī)器人變得“拙笨”。正在大多數(shù)環(huán)境下,100Hz環(huán)路后果最好。
horizontalControl
搜檢是不是曾經(jīng)肯定了方針距離,并向方針刻度增添了速率偏移。速率偏移是正在距離內(nèi)以特定速率停止的滴答聲數(shù)目。若是已設(shè)置距離跟速率方針,則正在機(jī)器人上升時(shí)設(shè)置方針刻度數(shù)。這使機(jī)器人可以前往其地位(若是下令挪動(dòng)必然距離,則可以前往新地位)。
differentialControl
那關(guān)于IMU的偏航輸出有點(diǎn)特別正在這里利用。IMU前往-π《=偏航《=π。
getAngles例程將讀數(shù)轉(zhuǎn)換為以度為單元的角度0-360規(guī)模。
resetRobot例程將機(jī)器人上升時(shí)的偏航角設(shè)置為yawTarget(基本上是360度刻度上的角度偏移量))。
最初一個(gè)角度讀數(shù)跟偏移之間的好被視為毛病。
假充360度的刻度可以輕松肯定最小角度??梢砸罁?jù)向機(jī)器人賠償?shù)臉?biāo)的目的和機(jī)器人必需挪動(dòng)的標(biāo)的目的,簡(jiǎn)略天將成果增添到發(fā)送到各個(gè)電動(dòng)機(jī)的功率中或從中減去。
僅當(dāng)正在getMessage例程中經(jīng)由過(guò)程藍(lán)牙或從Raspberry吸收下令時(shí),才會(huì)履行以下3個(gè)例程。
setSpeed
與一個(gè)機(jī)電一次可發(fā)生的最大滴答聲的百分比(=RPM/60*每轉(zhuǎn)刻度數(shù)*工夫距離
setDistance
將以米為單元的行駛距離乘以每米的刻度數(shù)(=每轉(zhuǎn)刻度數(shù)/以米為單元的車(chē)輪周長(zhǎng))
setTurn
為偏航偏移量增添所需的度數(shù),將新方針調(diào)劑為360度并重置轉(zhuǎn)彎下令以防備接連轉(zhuǎn)彎。
傳感器跟機(jī)電例程非常簡(jiǎn)單。resetEncoders例程可防備因?yàn)榫幋a器“翻轉(zhuǎn)”而惹起的變亂。
交互例程搜檢串行跟藍(lán)牙行列中是不是有新下令,若是有,則經(jīng)由過(guò)程通用的案例布局對(duì)其停止處置懲罰。
第3步:調(diào)劑節(jié)制輪回
出于較著的緣故原由,PID調(diào)劑有時(shí)被稱(chēng)為“烏技術(shù)”。這個(gè)進(jìn)程能夠十分煩瑣跟使人喪氣。只管有許多獲得控制器值的半結(jié)構(gòu)化方式,但為取得機(jī)器人均衡,簡(jiǎn)直老是不可避免地要停止手動(dòng)調(diào)劑。
一些注意事項(xiàng)將正在這里有所資助:
此進(jìn)程須要耐煩跟窺察:若是變動(dòng)增益值,可以窺察到哪類(lèi)行動(dòng)?
比例收益代表賠償?shù)腜下位。即所供給的電動(dòng)機(jī)功率。
微分增益代表D縮小所供電功率的后果。
請(qǐng)記住,那所有皆與加速度有關(guān)。所供給的能源很快便會(huì)加速。
從兩個(gè)增益皆為整起頭,然后以小步少起頭增長(zhǎng)P。當(dāng)遨游器自行逗留或多或少時(shí)終止。大概太“搖擺”或“扭捏”,但它該當(dāng)使本人連結(jié)幾秒鐘。
若是你真的沒(méi)法取得不變振蕩,則能夠是物理緣故原由形成的。某些能夠的旌旗燈號(hào)是:振幅沒(méi)有平均或僅沿一個(gè)標(biāo)的目的挪動(dòng)
機(jī)器人正在猛烈振動(dòng)時(shí),而且挪動(dòng)變得愈來(lái)愈家,加速度太年夜,由于曾經(jīng)供給了太多的能源。
當(dāng)機(jī)器人起頭越來(lái)越快天運(yùn)轉(zhuǎn)時(shí),正在一個(gè)標(biāo)的目的上以解體了結(jié),因?yàn)殡娏?yīng)缺乏,機(jī)器人沒(méi)法充足加速。
不變振蕩意味著不休的超調(diào),便像坐在秋千上一樣。增添D后,過(guò)沖將削減。
利用小步少,將值連結(jié)盡量小,并完全窺察后果。
當(dāng)可以從內(nèi)部調(diào)劑增益時(shí),生涯會(huì)變得沒(méi)有那么艱苦。草圖(不然必需一遍又一遍天
Android使用最得當(dāng)我:簡(jiǎn)直一切常量皆可以經(jīng)由過(guò)程輸入一個(gè)值來(lái)變動(dòng)。屏幕頂部概述了一切以后值。正在屏幕底部,可以失掉偏差或角度本身的圖形顯現(xiàn)。請(qǐng)留神,如許的顯現(xiàn)只是一個(gè)耽誤的唆使,而不是真實(shí)的及時(shí)反應(yīng)。該應(yīng)用程序借可以用于測(cè)試一些下令。
一旦我到達(dá)了球場(chǎng)尺度,我便須要一些半自動(dòng)化的測(cè)試工具,由于簡(jiǎn)直一切變動(dòng)機(jī)器人或其代碼或多或少須要從頭調(diào)劑。特殊是正在程度節(jié)制回路上事情須要屢次。
我編寫(xiě)了一個(gè)Python劇本,該劇本利用了平常稱(chēng)為“扭轉(zhuǎn)”算法的調(diào)和回升算法??梢哉谶@里找到SebastianThrun(Udacity,谷歌,Stanford)對(duì)算法的注釋
可以正在此處找到劇本:
我測(cè)驗(yàn)考試正在此中構(gòu)建算法Arduino草圖。只管它只是裝置正在可用的32K內(nèi)存中,但它使整體周期耽誤太多。是以,該劇本致力于正在Raspberry上運(yùn)轉(zhuǎn),并利用其他一些Python劇本:
,用于向Arduino跟與UltraBorgs的I2C通訊發(fā)送下令。若是已附加Ultraborg,則最好將導(dǎo)入跟初始化正文失落。不然,借須要。
是用于與Arduino停止實(shí)際通訊的線(xiàn)程類(lèi)
,它充任主劇本與主劇本之間的共享內(nèi)存。線(xiàn)程劇本
,用于網(wǎng)絡(luò),顯現(xiàn)跟保留一切測(cè)試數(shù)據(jù)。
留神:
Python劇本將依據(jù)進(jìn)一步的試驗(yàn)而變動(dòng)。若是你念制止變動(dòng),請(qǐng)克隆存儲(chǔ)庫(kù)。
我認(rèn)為此刻曾經(jīng)涵蓋了一切基本知識(shí),并無(wú)望資助你構(gòu)建本人的平衡器。
智慧垃圾分揀機(jī)器人應(yīng)用領(lǐng)域智能分揀機(jī)器人的創(chuàng)新點(diǎn)分揀機(jī)器人典型部件