由于市面上專門講ROS 2開發(fā)的書籍不多,近期看完了《ROS機器人開發(fā)實踐》其中大部分內容還是基于ROS 1寫的,涉及topic,service,action等一些重要的概念,常用組件,建模與仿真,應用(機器視覺,機器語音,SLAM,機械臂),最后一章寫了ROS 2的安裝,話題通信和服務通信的示例??傆X得不是太系統(tǒng),于是決定按著ROS官方文檔學習ROS 2,把學習過程中的要點記錄下來。
一、安裝ROS 2
?官方提供了部分操作系統(tǒng)平臺的ROS 2的二進制安裝包,分別為Ubuntu Linux、RHEL、Windows,不同ROS 2的版本對應的Linux版本也略有不同。
截至目前有兩個ROS 2的版本還沒有到項目終止日期(EOL end-of-life),一個是最新的發(fā)布版本為Iron Irwini,發(fā)布時間是2023年5月23日,EOL date是2024年11月,另一個是Humble Hawksbill,發(fā)布時間是2022年5月23日,EOL date是到2027年5月,比較后我選擇了Humble這個版本來學習。
為了方便,我選擇了直接安裝二進制安裝包,首先在虛擬機上安裝了Ubuntu 22.04(Jammy),
然后按照官方文檔一步一步安裝即可。
命令整理如下:
?
#--------準備工作--------
#1.確保有universe源
sudo apt install software-properties-common
sudo add-apt-repository universe
#2.獲取ROS 2 GPG key以便在接下來的apt命令中使用
sudo apt update && sudo apt install curl -y
sudo curl -sSL https://raw.githubusercontent.com/ros/rosdistro/master/ros.key -o /usr/share/keyrings/ros-archive-keyring.gpg
#3.將ROS倉庫加入sources list列表
echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/ros-archive-keyring.gpg] http://packages.ros.org/ros2/ubuntu $(. /etc/os-release && echo $UBUNTU_CODENAME) main" | sudo tee /etc/apt/sources.list.d/ros2.list > /dev/null
#--------安裝ROS包--------
#1.更新源
sudo apt update
sudo apt upgrade
#2.安裝桌面版(包含了ROS-Base)
sudo apt install ros-humble-desktop
#3.安裝開發(fā)包
sudo apt install ros-dev-tools
#--------設置環(huán)境(這一步很重要,后面使用到ROS的地方都需要執(zhí)行此命令,所以一般可以直接寫到.bashrc中--------
source /opt/ros/humble/setup.bash
這里值得注意的是獲取ROS 2 GPG key的地方,可能由于某些原因不能獲取到,就需要科學上網(wǎng)了,這個不再贅述(其實我還真是折騰了一陣子)。
二、按教程學習
1.CLI 工具
配置環(huán)境
首先還是上一步中最后提到的設置環(huán)境,可以通過如下命令查看環(huán)境變量:
printenv | grep -i ROS
?此外還要設置以下兩個環(huán)境變量:
ROS_DOMAIN_ID:可以為一個ROS節(jié)點組設置唯一的一個編號,在DDS中,使不同邏輯網(wǎng)絡共享一個物理網(wǎng)絡的主要機制被稱為域ID,相同域ID的ROS2節(jié)點可以互相友好的發(fā)現(xiàn)和發(fā)送消息,而不同域ID的節(jié)點之間則不行。所有的ROS2節(jié)點默認域ID為0。為了避免在同一網(wǎng)絡上運行ROS 2的不同計算機組之間的干擾,應為每個組設置不同的域ID。簡單來說,域ID被DDS用來計算將用于發(fā)現(xiàn)和通信的UDP端口,只需要將域ID設置為[0,101]之間的數(shù)字即可,深究的話可以參考這里。
?ROS_LOCALHOST_ONLY:ROS2通信默認不會只限制本地的。這個環(huán)境變量就是用來限制這個的。這意味著你的ROS2系統(tǒng)和他的話題(topic),服務(service),動作(action)對本地網(wǎng)絡中的其他計算機不可見。在特定場合設置該項是有幫助的,比如在教室里,多個機器人可能會發(fā)布相同的話題,從而導致奇怪的行為。
使用turtlesim,ros2和rqt
turtlesim是一個用來學習ROS 2輕量模擬器。ros2工具可以被用戶用于管理,內查并與一個ROS系統(tǒng)交互。它是安裝ROS 2的一部分。rqt是ROS 2的一個圖形用戶接口(GUI)工具。
安裝 turtlesim
sudo apt update
sudo apt install ros-humble-turtlesim
查詢一個包的可執(zhí)行程序(這個個人感覺還是很有用的)
ros2 pkg executables turtlesim
啟動 turtlesim
執(zhí)行如下命令會出現(xiàn)一個模擬窗口,窗口正中有一個隨機形狀的烏龜。
ros2 run turtlesim turtlesim_node
使用 turtlesim
重新打開一個終端,設置環(huán)境,執(zhí)行如下命令后,可以通過鍵盤上的箭頭按鍵控制烏龜?shù)囊苿?,并留下移動的軌跡。
使用list命令可以查看節(jié)點,話題,服務,動作信息,具體如下:
ros2 node list
ros2 topic list
ros2 service list
ros2 action list
安裝 rqt
sudo apt update
sudo apt install ~nros-humble-rqt*
在終端鍵入rqt,啟動rqt程序。
使用 rqt
首次啟動時,界面內容是空白的,只需要選擇Plugins > Services > Service Caller,如果點擊Plugins沒有看到Services,你應該關閉rqt并在終端輸入rqt --force-discover
。
1.選中/spawn服務(該服務用于產生另一只的烏龜),修改name參數(shù)給這個烏龜重命名,修改x,y的值給這個烏龜設置新的位置,然后點擊Call按鈕,完成修改。
2.選中/set_pen服務,修改r,g,b的值設置烏龜軌跡的顏色。
重映射
由于新創(chuàng)建的控制終端(turtle_teleop_key)還是只能控制第一只烏龜,為了讓控制終端可以控制新產生的烏龜,使用如下命令重定向cmd_vel話題。
ros2 run turtlesim turtle_teleop_key --ros-args --remap turtle1/cmd_vel:=turtle2/cmd_vel
這個終端就可以控制新產生的烏龜了,再啟動一個turtle_teleop_key的終端又可以控制第一只烏龜了。文章來源:http://www.zghlxwxcb.cn/news/detail-678863.html
關閉turtlesim
可以在turtlesim_node終端輸入Ctrl + C
并且在turtle_teleop_key終端輸入q
。文章來源地址http://www.zghlxwxcb.cn/news/detail-678863.html
到了這里,關于ros2官方文檔(基于humble版本)學習筆記的文章就介紹完了。如果您還想了解更多內容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網(wǎng)!