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