ros控制arduino的方法 ROS入門通俗簡介

2021-10-18 19:52:19 字數 3854 閱讀 9595

ros是最流行的機械人作業系統,但官方 introduction 寫的很一般,這篇把系統各要點和如何組合起來的介紹得通俗易懂。

編譯:mcgl

每個機械人製造者的生活中都會有這樣乙個時刻,他們開始考慮建造一些... 史詩般的東西(鋼鐵俠?)。也許你已經構建了幾個簡單的 arduino (一種開源開發板)機械人,它們可以繞著房間跑,避開障礙物,或者跟著地板上的軌跡走。它們非常有趣,你也學到了很多,但是你想做一些更複雜的事情,用一些影象處理,或者網路控制,或者一些你見過的便宜的雷射雷達感測器。你必須從頭開始寫這些東西嗎?你從**開始呢?

我建議你花點時間學習一下 ros 的基本知識。

如果你像我一樣,只是從 ros 教程開始,沒有上下文背景,你可能得花一段時間去理解它可以做什麼,為什麼它有用,以及你如何將它整合到你的機械人中。本文旨在提供背景資訊,向你展示它們是如何組合在一起的,以及你可以如何使用它們。

究竟什麼是 ros?

ros 是你的機械人的作業系統。它執行在各種不同型別的計算機上的標準 linux 系統之上,如樹莓派或其他單片計算機、膝上型電腦或台式電腦。這是它可以做的:

ros 提供了一種標準的方式來連線所有的感測器(攝像機、距離感測器、模擬到數字轉換器、 imu)和執行器(驅動馬達、伺服系統、燈) ,並與控制軟體一起做出決定。這是一種粘合劑,把所有這些聯絡在一起,並且為你省去了在機械人身上傳遞資料的煩惱。

ros 可以幫助你輕鬆地讓多台計算機或微處理器在機械人上或通過網路進行通訊。例如,你可以通過網路驅動桌面計算機上的 ros 機械人,或者讓更強大的計算機處理計算密集型任務,而不是在機械人上完成。

ros 還有一些非常有用的工具,用於視覺化來自感測器的資料以及資料流動的位置。

你可以在模擬器中測試 ros 軟體,而無需在真正的機械人硬體上執行它。事實上,你可以只用一台基本計算機而無需其他硬體來編寫和執行 ros 軟體。你在模擬器上編寫和測試的**可以很容易地移植到真正的機械人上。

最簡單的架構 —— 乙個遠端控制(teleop)節點向電機控制器節點傳送速度指令

它是如何工作的

一旦你搞清楚了,ros 的設計是相當優雅的。

乙個稱為 roscore 的中心樞紐首先啟動,所有其他元件都連線到它。它可以看作是一種目錄,允許機械人的所有功能定位和相互通訊。

機械人的其他功能由稱為節點(node)的軟體來處理。例如,乙個節點負責接收運動指令,並指揮電動機的運動。另乙個節點可能負責從碰撞感測器或光感測器讀取感測器值,並將其提供給其他節點。最後,控制節點可以從感測器節點獲取輸入,做出必要的決策,並向運動節點傳送適當的命令。

向其他節點提供資訊的節點是發布者(publisher)。接收該資訊的節點是訂閱者(subscriber)。乙個節點既可以是不同主題的訂閱者,也可以是發布者。正在發布的資訊被分到稱為主題(topic)的通道,這些主題在機械人上有唯一的名稱。

在上面的示例圖中,遠端控制節點(teleop_turtle)從使用者那裡獲得鍵盤輸入並發布速度命令。機械人的電機控制器和感測器節點(turtlesim)訂閱了運動速度主題(cmd _ vel) ,並將這些命令轉化為運動。這是turtlesim, 乙個非常簡單的機械人的模擬,你可以在 ros 教程中學習如何控制它。

turtlesim 在 python 程式的控制下駕駛

稍微複雜一點的節點集看起來是什麼樣的?嗯,我在機械人控制方面的第乙個練習題是讓 turtlesim 在 python 程式的控制下在乙個正方形中駕駛。要做到這一點,控制器節點訂閱 turtlesim 的里程主題(/turtle1/pose) ,該主題會不斷顯示機械人對自己位置的最佳估計。然後控制節點進行計算,找出電動機需要做什麼才能導航到下乙個目標,並發布電動機命令到主題 cmd_vel。

控制程式訂閱位置主題並發布行進到目標的電機指令

如何把它和真正的機械人組合起來

一旦你理解了主題(topics)的總體流程,你可能會想: 「太好了。我如何在乙個真正的機械人上使用它?那會是什麼樣子呢? 」

讓我們假設你想在 raspberry pi 上執行 ros 來處理通訊和高階控制,並且你也想要乙個 arduino 來控制電機和測量你的電池電壓。此外,你有乙個聲納模組,你想連線起來,以獲得距離測量來避障。我們將分解每乙個部分。

到目前為止,我發現在 ubuntu 上安裝 ros 最簡單的是執行在 raspberry pi 上,而不是 rasbian 上。在撰寫本文時,我正在使用 ubuntu 18.04/melodic,它不是最新的 ros 發行版,但是有最完整的 ubuntu 包。這比自己編譯軟體包要簡單得多。

一旦 ros 在 pi 上執行,我們就可以執行 roscore 了

有幾種方法可以讓 arduino 與 pi 對話,但最直接的方法可能是使用 rosserial arduino 包。如果你通過 usb 連線 arduino 到 pi,arduino 可以註冊為乙個帶有 roscore 的節點,並發布和訂閱主題。這只需要幾行**就可以完成!

arduino然後發布乙個測量電池電壓的主題,並訂閱乙個電機速度指令主題。這些資訊可能來自遙控(teleop)節點或者 pi 上執行的控制軟體。arduino 可以同時發布主題和訂閱主題。

pi 上的 python 控制器程式使用ros庫連線到 roscore,訂閱 arduino 發布的感測器主題,並開始發布運動速度命令。

聲納模組也可以用多種方式進行處理。你可以將其連線到 pi 上的 gpio 插腳,並在其上執行乙個簡單的 python 節點,該節點發布聲納值。它也可以在 arduino 上執行,只要你小心不讓它overload。

想新增乙個 rp-lidar 雷射雷達單元?沒有問題 —— 通過 usb 將它插入 pi,然後啟動乙個接收資料並發布資料的節點。gps 呢?同樣的過程 —— 插入它並啟動乙個已經存在的節點。

如果你從頭開始製造乙個機械人,你可以購買有現成軟體節點的電機控制器,或者你可以為你的控制器編寫乙個。你的感測器也是如此。

你可能只需要為你的特定硬體編寫**,就可以以預期的訊息格式發布主題,這樣你突然就可以訪問大量編寫良好的軟體了。一旦完成,你的硬體就被有效地抽象了,你就可以開始使用 ros 的更高層的功能了。

執行導航棧的husky

例如,現有的一些用於室內導航的節點棧,實現了slam。

husky 機械人在 gazebo 通過雷射雷達掃瞄環境

gazebo 模擬器

對 gazebo 模擬器的完整描述超出了本文的範圍,但是這裡有乙個教程(可以幫助你入門。我鼓勵你們快速瀏覽一下。能夠以一種安全的方式使用控制演算法,或者在購買實際的硬體之前在機械人上測試,都是非常有用的。這是乙個很好的工具。我和乙個朋友在搞乙個割草機械人,我們在 gazebo 模擬了乙個典型的郊區庭院,用 gps 和磁強計測試導航**。

割草機械人測試地面

分布式控制和計算

在我看來,ros 最酷的特性之一就是,這些節點可以在不同的計算機上執行,而不是在 roscore hub 上執行!你只需告訴執行計算機的節點執行 roscore 的計算機的名稱/ip,它就可以透明地連線和執行。你可以用它在機械人本身上建立乙個計算機網路,或者將控制和計算擴充套件到網路上的其他計算機,而不需要編寫任何額外的**。

總結我希望這能幫助你理解 ros 各個部分是如何組合在一起的 —— 你現在可以開始學習那些教程了,希望你對如何在真正的機械人上使用它有了更好的理解。玩得開心!

基於ROS使用Arduino控制蜂鳴器

arduino控制板 1個 蜂鳴器 1個 杜邦線 若干 接線方式為 蜂鳴器的乙個引腳接arduino的數字輸出引腳,蜂鳴器的另外的乙個引腳接地 來張實際的 略麻煩 首先 roscore 其次 rosrun rosserial python serial node.py dev ttyacm0 dev...

Arduino與Vrep的ROS介面除錯

系統環境 ubuntu18.04 arduino uno ros melodic v rep 3.5.0 最近專案需要做個機械臂,於是就想藉此機會用ros把這個東西做出來,介於樹莓派對於舵機的控制效能實在有些尷尬,最後還是用了arduino作為乙個ros結點。1 arduino的ros介面除錯 主要...

ROS與Arduino學習(六)Logging日誌

ros與arduino學習 六 logging日誌 tutorial level 客戶端與伺服器 next tutorial 小案例節點通訊 本節較為簡單告訴大家如何向系統發布日誌資訊。tips 1 日誌資訊發布 節點提供了五種日誌訊息,分別是debug information warn error...