基于ROS Ranger Mini構(gòu)建一個自主移動機(jī)器人
自主移動機(jī)器人(amr)在工業(yè)、農(nóng)業(yè)和教育領(lǐng)域提供了變革潛力,在這些領(lǐng)域,低成本、可擴(kuò)展的自動化至關(guān)重要。這項(xiàng)研究提出了ROS Ranger Mini,這是一種緊湊型ROS AMR,集成了深度攝像頭、超聲波傳感器和雷達(dá),具有強(qiáng)大的環(huán)境感知和避障能力。該系統(tǒng)結(jié)合了用于高級處理的樹莓派和Particle Photon 2開發(fā)板,可通過Wi-Fi實(shí)現(xiàn)遠(yuǎn)程控制和自主導(dǎo)航的雙重操作模式。傳感器和狀態(tài)數(shù)據(jù)通過Particle Cloud實(shí)時傳輸和存儲,實(shí)現(xiàn)遠(yuǎn)程監(jiān)控和系統(tǒng)分析。該設(shè)計強(qiáng)調(diào)了可訪問的技術(shù),經(jīng)過深思熟慮的整合,可以為各種現(xiàn)場應(yīng)用創(chuàng)建適應(yīng)性強(qiáng)且高效的機(jī)器人平臺。
粒子云介紹
粒子云是一個物聯(lián)網(wǎng)平臺,可以實(shí)現(xiàn)安全的設(shè)備連接、實(shí)時數(shù)據(jù)存儲和互聯(lián)網(wǎng)遠(yuǎn)程控制。該項(xiàng)目促進(jìn)了AMR和遠(yuǎn)程用戶界面之間的無縫通信。
我們使用粒子光子2,一個強(qiáng)大的支持wi - fi的微控制器,很容易與粒子云集成。主要規(guī)格包括:
?處理器:200 MHz ARM Cortex-M33 (Realtek RTL8721DM)
?Wi-Fi: 802.11 b/g/n, 2.4 GHz
?內(nèi)存:2mb
?Flash: 4mb
?Gpio: 20+可配置引腳
安全啟動和OTA更新支持
該板處理實(shí)時數(shù)據(jù)傳輸,支持自主和遠(yuǎn)程控制功能。
硬件部分
在本節(jié)中,建立了電機(jī)驅(qū)動器,執(zhí)行器,相機(jī),超聲波傳感器,Particle Photon 2和樹莓派之間的所有連接,以實(shí)現(xiàn)通信和反饋交換。我還在電路中加入了一個5A降壓助推器,因?yàn)槲覀兺ǔJ褂?S LiPo電池或2S 18650電池,產(chǎn)生7.4伏。由于Photon 2只能接受高達(dá)5.5伏特,如數(shù)據(jù)表中所述,降壓升壓器是必要的,以安全地調(diào)節(jié)電壓。
這是我用Fusion EDA為這個機(jī)器人設(shè)計的電路圖。
該電路有三個主要部分:粒子光子2,樹莓派HAT和5-15V到5V降壓電壓轉(zhuǎn)換器。攝像頭通過USB端口或15針CSI連接器連接到樹莓派。該圖還包括兩個超聲波傳感器,它們復(fù)制了激光雷達(dá)傳感器的功能,有助于降低機(jī)器人的總體成本。Photon 2的D1和D2引腳連接到樹莓派進(jìn)行通信,發(fā)送確認(rèn)和接收反饋。
集成光子2
首先,您需要在Particle網(wǎng)站上注冊。之后,您可以檢查設(shè)備是否已連接。我的設(shè)備出現(xiàn)在他們的平臺上。
為了集成Photon,你首先需要下載VS Code并安裝Particle CLI命令行。然后,你可以使用VS Code中的終端直接發(fā)送命令。
在使用粒子光子2編程時,請記住它有多種模式。了解RGB LED指示燈的含義很重要。
粒子光子上的標(biāo)準(zhǔn)RGB LED模式
然后,我們有兩個選擇:在VS code中編寫代碼或使用Particle Web IDE。最初,我使用VS Code,但遇到了一些問題,所以我決定切換到粒子Web IDE。它有一個非常容易理解的用戶界面。我只是編寫了代碼,由于Web IDE已經(jīng)連接到Particle Cloud,因此不需要編寫任何額外的代碼來連接Wi-Fi或云。
整合MIT App Inventor
MIT App Inventor是麻省理工學(xué)院開發(fā)的一個免費(fèi)的、初學(xué)者友好的平臺,用于使用可視化的、基于塊的編程界面創(chuàng)建移動應(yīng)用程序。
用于:
?開發(fā)無需編碼的Android應(yīng)用程序
?物聯(lián)網(wǎng)接口原型
?教育項(xiàng)目和快速應(yīng)用程序開發(fā)
下面是使用MIT app Inventor發(fā)明一個簡單應(yīng)用程序的簡短分步指南:
?訪問appinventor.mit.edu,用谷歌賬戶登錄。
?點(diǎn)擊“創(chuàng)建應(yīng)用程序”→開始一個新項(xiàng)目。
?通過將組件(按鈕、標(biāo)簽等)拖到手機(jī)屏幕來設(shè)計UI。
?轉(zhuǎn)到塊部分→通過連接代碼塊創(chuàng)建邏輯。
?使用MIT AI2 Companion應(yīng)用程序通過USB或Wi-Fi連接手機(jī)。
?在手機(jī)上測試你的應(yīng)用。
?導(dǎo)出或構(gòu)建APK來安裝或共享應(yīng)用程序。
完成設(shè)計后,您可以進(jìn)入Blocks部分。所有后端邏輯都是通過基于塊的系統(tǒng)處理的,該系統(tǒng)充當(dāng)應(yīng)用程序和硬件之間的中介。
圖片中的粉色塊是MIT App Inventor中的文本塊,其中包含web請求的URL和POST數(shù)據(jù)。
URL包含您的設(shè)備ID (0a10aced20219…)。
POST文本包含訪問令牌(b648206178aff3a71dcdd8e3f3…)以及一些命令參數(shù)(arg=right, arg=left等)。
這個令牌和設(shè)備ID是唯一的標(biāo)識符,允許你的應(yīng)用程序通過粒子API與你的特定設(shè)備進(jìn)行通信。
例子:
這是我的Photon2的設(shè)備ID:“0a10aced202194944a056838”在上面的URL
對于應(yīng)用程序中的每個按鈕,我使用了相應(yīng)的參數(shù):
?轉(zhuǎn)發(fā):參數(shù)= forward&access_token = b648206178aff3a71dcdd8e3f32db6b99dac6d98
?向后:參數(shù)= backward&access_token = b648206178aff3a71dcdd8e3f32db6b99dac6d98
?左:參數(shù)= left&access_token = b648206178aff3a71dcdd8e3f32db6b99dac6d98
?右:參數(shù)= right&access_token = b648206178aff3a71dcdd8e3f32db6b99dac6d98
?站:參數(shù)= stop&access_token = b648206178aff3a71dcdd8e3f32db6b99dac6d98
對于每個按鈕,我們使用一個令牌ID。這是我的設(shè)備的令牌ID:b648206178aff3a71dcdd8e3f32db6b99dac6d98
問題是,你在哪里可以找到你的令牌ID和設(shè)備ID
對于令牌ID,請進(jìn)入粒子CLI并鍵入
請輸入您在Particle注冊時使用的郵箱和密碼。
這是代幣
我們已經(jīng)完成了AMR的一部分
這就是它在這之后的樣子!!
相機(jī)和超聲波傳感器與ROS的集成
本文介紹了一對安裝在伺服電機(jī)上的HC-SR04超聲波傳感器如何與ROS 2一起使用,以執(zhí)行2D環(huán)境映射。該系統(tǒng)從不同角度收集距離數(shù)據(jù),并在RViz中可視化。
系統(tǒng)概述
Arduino使用伺服電機(jī)以小步(例如,每5°)從0°到180°旋轉(zhuǎn)超聲波傳感器。
在每個角度,兩個超聲波傳感器測量距離。
Arduino通過串行發(fā)送一行數(shù)據(jù),格式如下:
角度:distance_left: distance_right
在Pi上運(yùn)行的ROS 2節(jié)點(diǎn):
讀取這個串行數(shù)據(jù)。
將傳感器讀數(shù)作為ROS消息發(fā)布。
可選地將它們轉(zhuǎn)換為二維笛卡爾坐標(biāo)。
數(shù)據(jù)在RViz中可視化,以構(gòu)建2D占用地圖。
Arduino代碼職責(zé)
掃描伺服電機(jī)從0°到180°。
觸發(fā)超聲波傳感器并讀取距離。
每隔X毫秒通過Serial.print()發(fā)送角度和距離。
ROS 2節(jié)點(diǎn)職責(zé)-
使用pyserial讀取串行數(shù)據(jù)。
解析傳入的字符串。
使用sensor_msgs/msg/PointCloud2或自定義消息(例如Point2D[])發(fā)布數(shù)據(jù)。
發(fā)布點(diǎn)/超聲掃描或類似的主題。
可視化的RViz
可視化:
使用訂閱掃描主題的配置啟動RViz。
PointCloud2用于分散的點(diǎn)。
用于可視化標(biāo)記的MarkerArray。
ROS 2包
1. serial_comms
用途:從Arduino讀取和解析串行數(shù)據(jù)(距離,角度)
節(jié)點(diǎn):serial_reader_node
發(fā)布:
/ sensor_data (custom_msgs / SensorData)
依賴關(guān)系:rclpy, pyserial
2. sensor_fusion_node
用途:融合超聲波范圍,伺服角度和里程計數(shù)據(jù)
節(jié)點(diǎn):fusion_node
訂閱:
/ sensor_data
/奧多姆
發(fā)布:
/ fused_scan (sensor_msgs /提升)
/ amr_pose (geometry_msgs / PoseStamped)
3. mapping_visualizer
目的:在RViz2中可視化融合數(shù)據(jù)
節(jié)點(diǎn):rviz_mapper
訂閱:
/ fused_scan
/ amr_pose
4. teleop_interface
用途:用于云命令的粒子光子板接口
節(jié)點(diǎn):teleop_bridge_node
發(fā)布:
/ cmd_vel (geometry_msgs /扭曲)
特點(diǎn):
?粒子云REST集成
?緊急停車命令
?安全模式回退
?系統(tǒng)工作流程
Arduino通過串口發(fā)送距離+伺服角度。
Serial_comms節(jié)點(diǎn)讀取它并發(fā)布到/sensor_data。
sensor_fusion_node將此與odometry/IMU結(jié)合起來,并將偽掃描發(fā)布為/fused_scan。
mapping_visualizer在RViz2中顯示了這一點(diǎn)。
teleop_interface監(jiān)聽Particle Cloud和issue /cmd_vel來控制機(jī)器人的運(yùn)動。
本文編譯自hackster.io