Arduino開發(fā)板經(jīng)常用于制作一些小型的機器人,并具有簡單的邏輯定義控制。但是,由于板載計算能力和軟件有限,開發(fā)人員常常無法升級到更復(fù)雜的機器人。通常,隨著開發(fā)人員變得越來越有經(jīng)驗,他們會尋專用于機器人的軟件,因為Arduino僅提供部分控件。
在本篇文章中,我們主要介紹了中間件軟件框架Robot Operating System(ROS),并引導(dǎo)您通過Arduino設(shè)置和使用ROS來創(chuàng)建更智能的機器人系統(tǒng)。
什么是ROS?
機器人操作系統(tǒng)(ROS)是最流行和使用最廣泛的機器人中間件軟件框架之一。這是一個開放源代碼平臺,可幫助創(chuàng)客和開發(fā)人員在無需重新發(fā)明輪子的情況下開始使用機器人軟件。 ROS提供了一種標(biāo)準(zhǔn)的通信體系結(jié)構(gòu),用于無縫集成、使用、開發(fā)和部署機器人系統(tǒng)的不同組件,包括控制、感知、計劃等。這是一個與語言無關(guān)的平臺,無論部署在何處,都可以為不同的計算機提供跨平臺的通信支持。
Arduino可能是最常用的開源微控制器開發(fā)板,它提供了易于使用的軟件-硬件界面以及不斷擴展的用戶社區(qū)。 Arduino幾乎與所有數(shù)字和模擬電路以及支持串行通信接口(如SPI、I2C和UART)的外部設(shè)備兼容。
基于ROS的軟件框架運行高級算法和流程,例如機器人模型的推理、過濾、運動策略生成、控制器算法等。安裝在機器人上的Arduino控制器用于執(zhí)行低級/嵌入式控制和傳感。它包括、電動機控制、溫度和超聲傳感器、IMU和車輪編碼器以及其他設(shè)備。

ROS-Arduino交互管道
ROS與Arduino之間的通信
ROS通信模塊基于自定義的TCPROS協(xié)議進行操作,使用兩種方式:多對多發(fā)布者-訂閱者方法和點對點更快服務(wù)方法。本篇文章使用發(fā)布者/訂閱者在Arduino開發(fā)板和機器上運行的ROS之間進行通信。
rosserial ROS軟件包使用Arduino的通用異步接收器/發(fā)送器(UART)通信,并將開發(fā)板轉(zhuǎn)換為ROS節(jié)點,該節(jié)點可以發(fā)布ROS消息,也可以訂閱消息。 Arduino ROS節(jié)點發(fā)布者可以從板上將數(shù)據(jù)(從傳感器或機器人狀態(tài))發(fā)送到運行ROS的機器,而Arduino ROS節(jié)點訂閱者可以從機器獲取指令。 ros_lib Arduino庫使Arduino開發(fā)板能夠與ROS通信。
建立基礎(chǔ)架構(gòu)
軟體設(shè)置
1. 在計算機(筆記本電腦/ PC)上安裝ROS。此處提供詳細(xì)步驟。注意:這可以在Linux機器上運行的ROS 1。
2. 在計算機上安裝rosserial(發(fā)行版可以是kinetic/indigo/melodic)。
sudo apt-get install ros-《distro》-rosserial
sudo apt-get install ros-《distro》-rosserial-arduino
3. 根據(jù)此處提到的說明在計算機上安裝Arduino IDE。
4. 在IDE中安裝ros_lib軟件包。
a. 安裝軟件包的最簡單方法是使用Arduino IDE。導(dǎo)航到IDE中的Sketch 》 Include Library 》 Manage Library,然后搜索rosserial軟件包

下拉菜單搜索新的Arduino軟件包
b. Arduino IDE將所有外部庫存儲在?/ Arduino / libraries文件夾位置下。它將這些庫加載到開發(fā)環(huán)境中,并且可以在IDE中看到。安裝后,可以在下拉列表中看到Rosserial Arduino庫。

外部庫顯示在列表中
C. 安裝后,應(yīng)該在IDE中看到示例草圖。

庫中的可用示例草圖
硬件設(shè)置
我們使用簡單的設(shè)置將Arduino開發(fā)板用作發(fā)布者和訂閱者。
1. 發(fā)布者:一個按鈕連接到Arduino開發(fā)板上,并且被切換以通過ROS將數(shù)字高/低信號發(fā)送到機器。該消息顯示在機器的終端中。
2. 訂閱者:一個LED連接到Arduino開發(fā)板上,并使用通過終端從ROS用戶那里獲得的指令來打開/關(guān)閉LED。
硬件連接

代碼和說明
Arduino代碼
#include 《ros.h》
#include 《std_msgs/String.h》
#include 《std_msgs/UInt16.h》
#define BUTTON 8
#define LED 13
ros::NodeHandle node_handle;
std_msgs::String button_msg;
std_msgs::UInt16 led_msg;
void subscriberCallback(const std_msgs::UInt16& led_msg) {
if (led_msg.data == 1) {
digitalWrite(LED, HIGH);
} else {
digitalWrite(LED, LOW);
}
}
ros::Publisher button_publisher(“button_press”, &button_msg);
ros::Subscriber《std_msgs::UInt16》 led_subscriber(“toggle_led”, &subscriberCallback);
void setup()
{
pinMode(LED, OUTPUT);
pinMode(BUTTON, INPUT);
node_handle.initNode();
node_handle.advertise(button_publisher);
node_handle.subscribe(led_subscriber);
}
void loop()
{
if (digitalRead(BUTTON) == HIGH) {
button_msg.data = “Pressed”;
} else {
button_msg.data = “NOT pressed”;
}
button_publisher.publish( &button_msg );
node_handle.spinOnce();
delay(100);
}
說明
該代碼導(dǎo)入了ros_lib庫和std_msgs :: String和std_msgs :: UInt16的標(biāo)準(zhǔn)ROS消息。聲明了用于存儲ROS數(shù)據(jù)類型和Arduino板引腳的變量。
該代碼聲明了一個名為button_publisher的發(fā)布者,該發(fā)布者將std_msgs :: String數(shù)據(jù)類型的button_msg發(fā)布到button_press主題。同樣,名為led_subscriber的訂閱者訂閱了toggle_led主題,該主題獲取std_msgs :: UInt6數(shù)據(jù)類型。
聲明ROS節(jié)點句柄,然后在setup()方法中對其進行初始化。節(jié)點句柄為發(fā)布者做廣告,并訂閱該主題。
SubscriberCallback()是在Arduino訂閱者節(jié)點上接收數(shù)據(jù)時調(diào)用的方法。回調(diào)方法檢查ROS主題數(shù)據(jù)是否為HIGH,并相應(yīng)地切換連接的LED。
最后,loop()方法運行一個無限循環(huán),并從按鈕中讀取信息并將其發(fā)布到ROS。節(jié)點句柄調(diào)用spinOnce()來處理通信。
程序執(zhí)行
通過USB電纜將Arduino Uno開發(fā)板連接到筆記本電腦,并確認(rèn)該板出現(xiàn)在Arduino IDE的可用串行端口列表中。編譯代碼,選擇板子類型并將其上傳到開發(fā)板。
上載代碼后,在機器的終端上執(zhí)行以下命令。
1. 啟動ROS Master-roscore
2. 在計算機上運行rosserial客戶端-rosrun rosserial_python serial_node.py / dev / tty 《USB#或ACM#》
3. 在運行時確定ttyUSB或ttyACM的串行端口。可以從Arduino IDE或使用dmesg | grep tty找到確切的端口號。
4. 讀取是否按Arduino板上的按鈕返回的已發(fā)布數(shù)據(jù)-rostopic echo button_press
5. 發(fā)布數(shù)據(jù)以切換Arduino上連接的LED-rostopic pub toggle_led std_msgs / UInt16“ data:0”數(shù)據(jù)為“ 0”關(guān)閉LED,“ 1”打開LED。

使用多個終端選項卡執(zhí)行指令并在同一屏幕上觀察響應(yīng)
rosserial提供了一個非常標(biāo)準(zhǔn)的平臺,允許創(chuàng)客和開發(fā)人員在Arduino和ROS之間無縫連接。它可以使用兩種非常著名和有用的技術(shù)來探索機器人技術(shù)的新機遇。這種方法允許以非常低的成本為機器人系統(tǒng)提供分布式計算、集中控制、控制抽象以及其他一些好處。
編輯:hfy
-
機器人
+關(guān)注
關(guān)注
213文章
31098瀏覽量
222383 -
Arduino
+關(guān)注
關(guān)注
190文章
6526瀏覽量
196982
發(fā)布評論請先 登錄
資訊速遞 | 具身智能PMC(籌)發(fā)布“零成本”開源鴻蒙智能機器人系統(tǒng)
EtherCAT主站協(xié)議棧EC-Master在ROS(機器人操作系統(tǒng))中的應(yīng)用
探索RISC-V在機器人領(lǐng)域的潛力
高精度機器人控制的核心——基于 MYD-LT536 開發(fā)板的精密運動控制方案
RK3576機器人核心:三屏異顯+八路攝像頭,重塑機器人交互與感知
遨博機器人以 “更專業(yè)更智能” 破局,讓機器人從工業(yè)走向生活
工業(yè)機器人的特點
通過vmRT-Thread和ROS2賦能機器人智能開發(fā)
基于Arduino和ROS來創(chuàng)建更智能的機器人系統(tǒng)
評論