資料介紹
描述
我是一家德國汽車公司的嵌入式軟件工程師。我開始這個項目是作為嵌入式系統(tǒng)的學(xué)習(xí)平臺。該項目被提前取消,但我非常喜歡它,所以我在空閑時間繼續(xù)。這是結(jié)果...
我有以下要求:
除了學(xué)習(xí)之外,沒有真正的目標(biāo)。該平臺可用于學(xué)習(xí)、監(jiān)控、機器人競賽、...
這不是初學(xué)者教程。你需要一些基本知識:
最后你可能會像我一樣面臨問題。帶著一些好奇心和耐力,您將完成項目并解決挑戰(zhàn)。我的代碼盡可能簡單,并且對關(guān)鍵代碼行進行了注釋以提供提示。
完整的源代碼和文件可在此處獲得:https ://github.com/makerobotics/RPIbot
補給品:
力學(xué)
- 1x Raspberry Pi Zero 帶接頭和攝像頭
- 1x PCA 9685 伺服控制
- 2x 光學(xué)編碼器輪和電路
- 1x 母跳線
- 1 個 USB 移動電源
- 1x DRV8833 雙電機驅(qū)動器
- 2x 微型舵機 SG90 用于相機平移和傾斜(可選)
- 1x MPU9250 IMU(可選)
- 1x HC-SR04 超聲波距離傳感器(可選)
- 1x 穿孔板和焊錫絲、接頭、...
第 1 步:構(gòu)建機箱
我不是一個好的機械設(shè)計師。此外,該項目的目標(biāo)是不要在底盤上花費太多時間。無論如何,我定義了以下要求:
- 便宜的材料
- 快速組裝和拆卸
- 可擴展(例如用于添加傳感器的空間)
- 輕質(zhì)材料為電子產(chǎn)品節(jié)省能源
可以用膠合板制成簡單且便宜的底盤。使用電鋸和手鉆很容易加工。您可以粘合小木制零件來創(chuàng)建傳感器和電機的支架。
考慮更換有缺陷的元件或電氣調(diào)試。主要部件應(yīng)采用可更換的螺釘固定。熱膠槍可能很簡單,但可能不是構(gòu)建底盤的最佳方式......我需要很多時間來考慮一個簡單的概念來輕松拆卸零件。3D 打印是一個不錯的選擇,但可能非常昂貴或耗時。
自由輪最終非常輕巧且易于安裝。替代品都很重或充滿摩擦(我在找到最后一個之前嘗試了其中的幾個)。安裝主輪后,我只需要切割一個木制墊片來平整尾部自由輪。
車輪屬性(用于軟件計算)
周長:21.5 厘米
脈沖:20 脈沖/轉(zhuǎn)。
分辨率:1075厘米(最后1個脈沖約為1厘米,便于軟件計算)
第 2 步:電子和接線
如圖所示,該項目正在使用不同的模塊。
Raspberry Pi Zero是主控制器。它通過 PWM 信號讀取傳感器并控制電機。它通過wifi連接到遠程PC。
DRV8833是一款雙電機 H 橋。它為電機提供足夠的電流(Raspberry Pi 無法做到這一點,因為輸出只能提供一些 mA)。
每次光通過編碼器輪時,光學(xué)編碼器都會提供方形信號。每次信號切換時,我們將使用 Raspberry Pi 的硬件中斷來獲取信息。
pca9695是一個伺服控制板。它通過 I2C 串行總線進行通信。該板提供 PWM 信號和電源電壓,用于控制凸輪的平移和傾斜伺服系統(tǒng)。
MPU9265是一款3軸加速度、3軸角轉(zhuǎn)速、3軸磁通量傳感器。我們將主要使用它來獲取指南針航向。
不同的模塊都通過跳線連接在一起。面包板充當(dāng)調(diào)度程序并提供電源電壓(5V 和 3.3V)和接地。連接都在連接表中描述(見附件)。將 5V 連接到 3.3V 輸入可能會損壞您的芯片。在供應(yīng)之前小心檢查所有接線兩次(這里特別要考慮編碼器)。在連接所有板之前,您應(yīng)該使用萬用表測量調(diào)度板上的主電源電壓。模塊通過尼龍螺絲固定在底盤中。同樣在這里,我很高興將它們固定,但在發(fā)生故障時也可以拆卸。
最后唯一的焊接是電機、面包板和接頭。老實說,我喜歡跳線,但它們會導(dǎo)致連接松動。在某些情況下,某些軟件監(jiān)控可能會支持您分析連接。
第 3 步:軟件基礎(chǔ)架構(gòu)
在實現(xiàn)機制之后,我們將建立一些軟件基礎(chǔ)設(shè)施,以擁有舒適的開發(fā)條件。
吉特
這是一個免費的開源版本控制系統(tǒng)。它用于像 Linux 一樣管理大型項目,但也可以輕松地用于小型項目(參見 Github 和 Bitbucket)。
可以在本地跟蹤項目更改,也可以將其推送到遠程服務(wù)器以與社區(qū)共享軟件。
主要使用的命令有:
git clone https://github.com/makerobotics/RPIbot.git 【獲取源碼和git配置】
git pull origin master [從遠程倉庫獲取最新的]
git status [獲取本地倉庫的狀態(tài)。是否有任何文件更改?] git log [獲取提交列表] git add . [將所有更改的文件添加到下一次提交考慮的階段] git commit -m "comment for commit" [將更改提交到本地存儲庫]git push origin master [將所有提交推送到遠程存儲庫]
日志記錄
Python 提供了一些內(nèi)置的日志功能。在開始進一步開發(fā)之前,軟件結(jié)構(gòu)應(yīng)該已經(jīng)定義了所有的日志框架。
記錄器可以配置為在終端或日志文件中以定義的格式記錄。在我們的示例中,記錄器由 webserver 類配置,但我們也可以自己完成。這里我們只將日志級別設(shè)置為 DEBUG:
logger = logging.getLogger(__name__)
logger.setLevel(logging.DEBUG)
測量和繪圖
要隨時間分析信號,最好將它們繪制在圖表中。由于 Raspberry Pi 只有一個控制臺終端,我們將在分號分隔的 csv 文件中跟蹤數(shù)據(jù)并從遠程 PC 繪制它。
分號分隔的跟蹤文件是由我們的主要 python 代碼生成的,并且必須具有如下標(biāo)題:
timestamp;yawCorr;encoderR;I_L;odoDistance;ax;encoderL;I_R;yaw;eSpeedR;eSpeedL;pwmL;speedL;CycleTimeControl;wz;pwmR;speedR;Iyaw;hdg;m_y;m_x;eYaw;cycleTimeSense;
1603466959.65;0;0;25;0.0;-0.02685546875;0;25;0;25;25;52;0.0;23;0.221252441406;16;0.0;0;252.069366413;-5.19555664062;-16.0563964844;0;6;
1603466959.71;0;0;50;0.0;0.29150390625;0;50;0;25;25;55;0.0;57;-8.53729248047;53;0.0;0;253.562118111;-5.04602050781;-17.1031494141;0;6;
1603466959.76;0;-1;75;0.0;-0.188232421875;1;75;2;25;25;57;0;52;-24.1851806641;55;0;0;251.433794171;-5.64416503906;-16.8040771484;2;7;
第一列包含時間戳。以下列是免費的。使用要繪制的列列表調(diào)用繪圖腳本:
remote@pc:~/python rpibot_plotter -f trace.csv -p speedL,speedR,pwmL,pwmR
繪圖腳本位于工具文件夾中:https://github.com/makerobotics/RPIbot/tree/master/t...
繪圖儀在 Python 中使用 mathplotlib。您必須將其復(fù)制到您的 PC 中。
為了更舒適,python 腳本由bash 腳本(plot.sh) 調(diào)用,該腳本用于將 Raspberry Pi 跟蹤文件復(fù)制到遠程 PC 并通過信號選擇調(diào)用繪圖儀。bash 腳本“plot.sh”詢問如果必須復(fù)制文件。這對我來說更方便,而不是每次都手動復(fù)制。“sshpass”用于通過 scp 將文件從 Raspberry Pi 復(fù)制到遠程 PC。它能夠在不詢問密碼的情況下復(fù)制文件(它作為參數(shù)傳遞)。
最后打開一個窗口,如圖所示。
遠程通訊
Raspberry Pi 的開發(fā)接口是 SSH。文件可以直接在目標(biāo)上編輯,也可以通過 scp 復(fù)制。
為了控制機器人,Pi 上運行了一個 Web 服務(wù)器,通過 Websocket 提供控制。該接口將在下一步中描述。
設(shè)置樹莓派
在源代碼 (setup_rpi.txt) 的“doc”文件夾中有一個描述 Raspberry Pi 設(shè)置的文件。解釋不多,但有很多有用的命令和鏈接。
第 4 步:用戶界面
我們使用輕量級 Tornado Web 服務(wù)器來托管用戶界面。它是一個 Python 模塊,我們在啟動機器人控制軟件時調(diào)用它。
軟件架構(gòu)
用戶界面由以下文件構(gòu)建:gui.html [描述網(wǎng)頁控件和布局] gui.js [包含處理控件并打開與我們機器人的 websocket 連接的 javascript 代碼] gui.css [包含樣式html 控件。控件的位置在這里定義]
websocket 通信
用戶界面不是最酷的,但它正在發(fā)揮作用。我在這里專注于對我來說是新的技術(shù),比如 Websockets。
該網(wǎng)站正在通過 Websockets 與機器人 Web 服務(wù)器進行通信。這是一個雙向通信通道,在連接啟動時將保持打開狀態(tài)。我們通過 Websocket 將機器人的命令發(fā)送到 Raspberry Pi 并獲取信息(速度、位置、攝像頭流)以供顯示。
界面布局
用戶界面可以手動輸入命令。這在開始時用于向機器人發(fā)送命令。復(fù)選框用于打開和關(guān)閉相機流。兩個滑塊控制攝像機平移和傾斜。用戶界面的右上角部分控制機器人的運動。您可以控制速度和目標(biāo)距離。基本遙測信息顯示在機器人圖紙中。
第 5 步:對機器人平臺進行編程
這部分是該項目的主要目標(biāo)。在介紹帶有直流電機的新機箱時,我重構(gòu)了很多軟件。出于不同的原因,我使用 Python 作為編程語言:
- 它是樹莓派的主要語言
- 它是一種高級語言,具有許多內(nèi)置功能和擴展
- 它是面向?qū)ο蟮模部捎糜陧樞蚓幊?/font>
- 無需編譯或工具鏈。編輯代碼并運行它。
主要軟件架構(gòu)
該軟件是面向?qū)ο蟮?,分為幾個對象。我的想法是將代碼分成 3 個功能塊:
感知 --> 思考 --> 執(zhí)行
感覺.py
主要傳感器采集和處理。數(shù)據(jù)存儲在字典中以供下一階段使用。
控制.py
一個驅(qū)動子類在一些抽象之后控制電機和伺服系統(tǒng)。主要的控制對象處理高級命令以及電機的控制算法(PID)。
rpibot.py
這個主要對象是管理 Tornado Web 服務(wù)器并在單獨的線程中實例化感知和控制類。
每個模塊可以單獨運行,也可以作為整個項目的一部分運行。您只能感測并打印出傳感器信息,以檢查傳感器是否正確連接并提供正確的信息。
PID控制
第一個任務(wù)是找出我們想要控制的東西。我一開始試圖控制位置,這非常復(fù)雜并且沒有多大幫助。
最后,我們要控制每個車輪的速度以及機器人的方向。為此,我們必須級聯(lián)兩個控制邏輯。
要逐步增加復(fù)雜性,應(yīng)控制機器人:
開環(huán)(具有恒定功率)
pwm = K
然后添加閉環(huán)算法
pwm = Kp.speedError+Ki.Integration(speedError)
最后添加方向控制作為最后一步。
對于速度控制,我使用“PI”控制,而“P”僅用于偏航。我通過實驗手動設(shè)置參數(shù)。可能在這里可以使用更好的參數(shù)。我的目標(biāo)只是一條直線,我?guī)缀醯玫搅怂?/font>我在軟件中創(chuàng)建了一個界面,通過用戶界面編寫一些變量。將參數(shù) Kp 設(shè)置為 1.0 需要在用戶界面中執(zhí)行以下命令:
SET;Kp;1.0
我可以將 P 參數(shù)設(shè)置得足夠低以避免任何超調(diào)。剩余誤差由 I 參數(shù)校正(綜合誤差)
我很難找出如何級聯(lián)兩個控件。解決方法很簡單,但我之前嘗試了很多其他方法......所以最后,我將車輪的速度目標(biāo)更改為向一個或另一個方向轉(zhuǎn)動。直接更改速度控制輸出是錯誤的,因為速度控制試圖消除這種擾動。
附上使用的控制圖。它僅顯示機器人控制的左側(cè)。
第 6 步:傳感器校準(zhǔn)
首先要考慮的是整個 IMU 必須正常工作。我訂購了 3 個零件并將它們寄回,直到我有一個完整的工作傳感器。以前的每個傳感器都有傳感器的某些部分無法正常工作或根本無法正常工作。在將其安裝到機器人中之前,我使用了一些示例腳本來測試基礎(chǔ)知識。
IMU傳感器信號在使用前需要校準(zhǔn)。一些傳感器信號取決于安裝角度和位置。
加速度和轉(zhuǎn)速校準(zhǔn)
最簡單的校準(zhǔn)是縱向加速度 (A_x)。靜止時應(yīng)該有大約 0 m/s2 。如果您正確旋轉(zhuǎn)傳感器,您可以測量重力(大約 9.8 m/s2)。要校準(zhǔn) a_x,您只需正確安裝它,然后定義偏移量以在靜止時獲得 0 m/s2。現(xiàn)在 A_x 已校準(zhǔn)。您可以在靜止時以類似的方式獲得旋轉(zhuǎn)速度的偏移量。
指南針的磁力計校準(zhǔn)
磁場傳感器需要更復(fù)雜的校準(zhǔn)。我們將使用 m_x 和 m_y 來獲得水平方向的磁場。擁有 m_x 和 m_y 將使我們有機會計算羅盤航向。
為了我們的簡單目的,我們將僅校準(zhǔn)硬鐵偏差。這必須在傳感器處于最終位置時執(zhí)行,因為它取決于磁場擾動。
我們在圍繞 z 軸轉(zhuǎn)動機器人時記錄 m_x 和 m_y。我們在 XY 圖表中繪制 m_x 與 m_y。如圖所示,結(jié)果為省略號。省略號必須以原點為中心。這里我們考慮 m_x 和 m_y 的最大值和最小值來獲得兩個方向的偏移量。最后我們檢查校準(zhǔn)并看到省略號現(xiàn)在居中。
軟鐵校準(zhǔn)意味著我們將圖片從省略號更改為圓形。這可以通過在每個傳感器值上添加一個因子來實現(xiàn)。
現(xiàn)在可以對測試?yán)踢M行編碼以重新校準(zhǔn)或至少檢查傳感器是否仍在校準(zhǔn)。
指南針航向
現(xiàn)在將使用磁力計數(shù)據(jù)來計算羅盤航向。為此,我們必須將 m_x 和 m_y 信號轉(zhuǎn)換為角度。Python 直接提供了具有此目標(biāo)的 math.atan2 函數(shù)。完整的計算在 mpu9250_i2c.py 文件中定義(“calcHeading(mx, my, mz)”)。
第 7 步:替代設(shè)計
由于設(shè)計完全開放,該項目花費了很多時間。對于每個組件,我都做了一些原型實現(xiàn),并體驗了系統(tǒng)的局限性。
最復(fù)雜的話題是車輪編碼器。在找到當(dāng)前使用的光學(xué)編碼器之前,我測試了 3 種不同的選項。我認(rèn)為在這樣的項目中,中止的解決方案也很有趣。它涉及我學(xué)到最多的部分。
連接到 pca 9695 的連續(xù)旋轉(zhuǎn)伺服
為了避免直流電機的額外 H 橋,我首先從連續(xù)旋轉(zhuǎn)伺服系統(tǒng)開始。這些是由已經(jīng)存在的 pca 9695 伺服驅(qū)動器驅(qū)動的。所有推進機制和相應(yīng)的電子設(shè)備都簡單得多。這種設(shè)計有兩個缺點:
- 舵機的控制范圍很差。
- 缺少的編碼器保持位置
伺服系統(tǒng)以 50% 的 pwm 開始移動,全速約為 55%。這是一個非常差的控制范圍。
如果沒有編碼器,很難找到準(zhǔn)備就緒的編碼器。我測試了安裝在底盤上的 3 種不同的反射率編碼器。我在輪子外側(cè)用黑色和白色部分粘貼了一個自制的編碼器輪。我使用了需要大量信號處理才能獲得正確信號的 QTR-1RC 傳感器。Raspberry Pi 無法執(zhí)行這種實時處理。所以我決定為機器人添加一個 NodeMCU D1 mini 作為實時控制器。它通過串行 UART 連接到樹莓派,以傳遞處理后的傳感器數(shù)據(jù)。NodeMCU 也在管理 HC-SR04 傳感器。機械結(jié)構(gòu)很困難,而且不是很堅固,串行線路從 I2C 線路和電機中得到噪音,所以最后我用簡單的齒輪直流電機驅(qū)動了底盤的第二個版本H橋。
第 8 步:圖像處理
為了改進自動駕駛,我們可以做一些圖像處理。
opencv 庫是一個參考。Python可以使用它來快速實現(xiàn)障礙物檢測。
我們捕獲圖像并應(yīng)用一些圖像處理任務(wù):
- 將彩色圖像轉(zhuǎn)換為灰度圖像
- 模糊圖像以去除小噪點
- 將圖像閾值設(shè)置為黑白圖像
- 現(xiàn)在我們檢測水平和垂直梯度來檢測物體作為墻壁和家具。
- 我們只過濾剩余的大輪廓(參見圖片中的彩色輪廓)
現(xiàn)在我們可以使用這些新信息來檢測障礙物......
第 9 步:后續(xù)步驟...
現(xiàn)在,我們有了一個帶有傳感器、執(zhí)行器和攝像頭的簡單機器人平臺。我的目標(biāo)是在不增加任何傳感器的情況下自主移動并返回車站。為此,我將需要以下步驟:
- 偏航和磁航向信號的傳感器融合
- 相機圖像處理(只有低 CPU 可用)
- 碰撞檢測(超聲波距離和攝像頭)
- 地圖構(gòu)建或方向
?
- 檢測機器人開源分享
- 坦克機器人開源分享
- 掃地機器人開源資料 43次下載
- 機器人守衛(wèi)開源分享
- 伺服機器人開源分享
- 堆肥機器人開源分享
- 英雄機器人開源
- 機器人開源案例
- Arduino機器人開源分享
- 助理機器人開源分享
- 機器人開源項目
- 基于深度學(xué)習(xí)的機器人示教系統(tǒng)設(shè)計與實現(xiàn) 77次下載
- 基于DSP和PC的農(nóng)業(yè)機器人控制系統(tǒng) 17次下載
- 開架式通用水下機器人開源搭建手冊.pdf 11次下載
- 日本CAI MEDIA的學(xué)習(xí)機器人介紹 1次下載
- 字節(jié)發(fā)布機器人領(lǐng)域首個開源視覺-語言操作大模型,激發(fā)開源VLMs更大潛能 360次閱讀
- 機器人技術(shù)中常用的路徑規(guī)劃算法的開源庫 842次閱讀
- 針對機器人負(fù)荷情況如何偏量學(xué)習(xí) 1496次閱讀
- 面對疫情 醫(yī)療機器人能幫上什么忙? 2126次閱讀
- dfrobotSparki機器人套裝簡介 2064次閱讀
- 協(xié)作機器人的起源_為什么需要協(xié)作機器人 8127次閱讀
- Facebook與CMU聯(lián)手打造開源框架PyRobot 3746次閱讀
- 學(xué)習(xí)機器人對教育有什么樣的作用 6248次閱讀
- 工業(yè)機器人學(xué)習(xí)系列叢書推薦讓你快速學(xué)習(xí)工業(yè)機器人 4414次閱讀
- 如何區(qū)分機器人、協(xié)作機器人和移動機器人? 6828次閱讀
- 云視頻技術(shù)讓機器人更具有娛樂性讓機器人更融入你的生活 3520次閱讀
- 如何開始接觸機器學(xué)習(xí)_機器學(xué)習(xí)入門方法盤點 3942次閱讀
- 軟體機器人 前所未見的機器人 3692次閱讀
- 機器人的最佳編程語言是什么?機器人十大流行編程語言匯總 3.4w次閱讀
- 11個機器學(xué)習(xí)開源項目 2767次閱讀
本周
- 1山景DSP芯片AP8248A2數(shù)據(jù)手冊
- 1.06 MB | 532次下載 | 免費
- 2RK3399完整板原理圖(支持平板,盒子VR)
- 3.28 MB | 339次下載 | 免費
- 3TC358743XBG評估板參考手冊
- 1.36 MB | 330次下載 | 免費
- 4DFM軟件使用教程
- 0.84 MB | 295次下載 | 免費
- 5元宇宙深度解析—未來的未來-風(fēng)口還是泡沫
- 6.40 MB | 227次下載 | 免費
- 6迪文DGUS開發(fā)指南
- 31.67 MB | 194次下載 | 免費
- 7元宇宙底層硬件系列報告
- 13.42 MB | 182次下載 | 免費
- 8FP5207XR-G1中文應(yīng)用手冊
- 1.09 MB | 178次下載 | 免費
本月
- 1OrCAD10.5下載OrCAD10.5中文版軟件
- 0.00 MB | 234315次下載 | 免費
- 2555集成電路應(yīng)用800例(新編版)
- 0.00 MB | 33566次下載 | 免費
- 3接口電路圖大全
- 未知 | 30323次下載 | 免費
- 4開關(guān)電源設(shè)計實例指南
- 未知 | 21549次下載 | 免費
- 5電氣工程師手冊免費下載(新編第二版pdf電子書)
- 0.00 MB | 15349次下載 | 免費
- 6數(shù)字電路基礎(chǔ)pdf(下載)
- 未知 | 13750次下載 | 免費
- 7電子制作實例集錦 下載
- 未知 | 8113次下載 | 免費
- 8《LED驅(qū)動電路設(shè)計》 溫德爾著
- 0.00 MB | 6656次下載 | 免費
總榜
- 1matlab軟件下載入口
- 未知 | 935054次下載 | 免費
- 2protel99se軟件下載(可英文版轉(zhuǎn)中文版)
- 78.1 MB | 537798次下載 | 免費
- 3MATLAB 7.1 下載 (含軟件介紹)
- 未知 | 420027次下載 | 免費
- 4OrCAD10.5下載OrCAD10.5中文版軟件
- 0.00 MB | 234315次下載 | 免費
- 5Altium DXP2002下載入口
- 未知 | 233046次下載 | 免費
- 6電路仿真軟件multisim 10.0免費下載
- 340992 | 191187次下載 | 免費
- 7十天學(xué)會AVR單片機與C語言視頻教程 下載
- 158M | 183279次下載 | 免費
- 8proe5.0野火版下載(中文版免費下載)
- 未知 | 138040次下載 | 免費
評論
查看更多