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