ROS 使用指南
簡介
ROS ( Robot Operating System, 機(jī)器人操作系統(tǒng)) ,提供一系列程序庫和工具以幫助軟件開發(fā)者創(chuàng)建機(jī)器人應(yīng)用軟件。它提供了硬件抽象、設(shè)備驅(qū)動(dòng)、函數(shù)庫、可視化工具、消息傳遞和軟件包管理等諸多功能。ROS 遵循 BSD 開源許可協(xié)議。
ROS 維基
ROS 支持版本
目前 ROS 的發(fā)布版本,官方只支持 Ubuntu Linux 等安裝,但由于在 OpenEmbedded/Yocto 框架下維護(hù)了meta-ros layer,使得我們可以將ROS集成到同樣基于 Openembedded 框架 的嵌入式Linux中運(yùn)行。
OpenEmbedded 框架提供了通用的交叉編譯環(huán)境。在此開發(fā)環(huán)境允許開發(fā)人員自己配置編譯工具鏈,編譯程序,并為其嵌入式系統(tǒng),創(chuàng)建完整的Linux發(fā)行版。 它可通過豐富的板級(jí)支持包,以支持各種硬件架構(gòu)和嵌入式主板。
目前 ROS OpenEmbedded meta-ros Layer 有三個(gè)版本,分別支持 ROS hydro,indigo 和 kinetic 發(fā)行版本。其中 ROS indigo是支持最好的一個(gè)版本,ROC-RK3308-CC ROS 系統(tǒng)所集成的也是這個(gè)版本,同時(shí)根文件系統(tǒng)是基于的 Yocto 版本為 Rocko所構(gòu)建的。
PC 端(Ubunut主機(jī))安裝 ROS
查看ROS所有的發(fā)行版本。目前 ROS 最新的版本,也是官方推薦的版本是 ROS Melodic Morenia 。其安裝教程官方有很詳細(xì)的介紹,需要注意的是,不同的Ubuntu版本,對應(yīng)安裝不同的 ROS 版本,例如 ROS Melodic Morenia 主要針對 Ubuntu 18.04 (Bionic) release,而 ROS Indigo Igloo 則針對 Ubuntu 14.04 LTS (Trusty) release。
由于 ROC-RK3308-CC 的 ROS 系統(tǒng)使用的是 ROS Indigo Igloo 版本,所以我們主機(jī)這里也安裝 ROS Indigo Igloo 版本進(jìn)行測試,下面的簡要安裝教程也是主要針對 Ubuntu 14.04 (ROS Indigo),其他版本的安裝教程可到官網(wǎng)維基查詢。
平臺(tái)說明
ROS Indigo 僅僅只支持Ubuntu 13.10 (Saucy) 和 Ubuntu 14.04 (Trusty)。這里在Ubuntu 14.04系統(tǒng)上安裝ROS。
安裝步驟
配置Ubuntu倉庫
允許”restricted”,”universe”,”multiverse.”。
設(shè)置軟件源
sudo sh -c 'echo "deb http://packages.ros.org/ros/ubuntu $(lsb_release -sc) main" > /etc/apt/sources.list.d/ros-latest.list'
或者來自中國的源:
sudo sh -c '. /etc/lsb-release && echo "deb http://ros.exbot.net/rospackage/ros/ubuntu/ $DISTRIB_CODENAME main" > /etc/apt/sources.list.d/ros-latest.list'
可根據(jù)UbuntuMirrors自己選。
添加key
sudo apt-key adv --keyserver hkp://ha.pool.sks-keyservers.net:80 --recv-key 421C365BD9FF1F717815A3895523BAEEB01FA116
安裝
1、更新軟件索引:
sudo apt-get update
2、安裝:
這里推薦 Desktop-Full 安裝: ROS, rqt, rviz, robot-generic libraries, 2D/3D simulators and 2D/3D perception。
sudo apt-get install ros-indigo-desktop-full
3、初始化 rosdep:
使用ROS之前,需要初始化rosdep,以解決一些系統(tǒng)依賴問題。
sudo rosdep init rosdep update
4、環(huán)境配置
echo "source /opt/ros/indigo/setup.bash" >> ~/.bashrc source ~/.bashrc
5、推薦安裝 rosinstall,一個(gè)非常好用的命令行工具
sudo apt-get install python-rosinstall
6、測試
安裝官方的教學(xué)例子:
sudo apt-get install ros-indigo-ros-tutorials
啟動(dòng)其中一個(gè)例子:
roslaunch roscpp_tutorials talker_listener.launch
一切正常的話,你將會(huì)看到以下結(jié)果:
SUMMARY ======== PARAMETERS * /rosdistro: indigo * /rosversion: 1.11.21 NODES / listener (roscpp_tutorials/listener) talker (roscpp_tutorials/talker) ROS_MASTER_URI=http://localhost:11311 core service [/rosout] found process[listener-1]: started with pid [9520] process[talker-2]: started with pid [9521] [ INFO] [1545896255.189016471]: hello world 0 [ INFO] [1545896255.289000624]: hello world 1 [ INFO] [1545896255.388990355]: hello world 2 [ INFO] [1545896255.489031727]: hello world 3 [ INFO] [1545896255.489457481]: I heard: [hello world 3] [ INFO] [1545896255.589028597]: hello world 4 [ INFO] [1545896255.589358894]: I heard: [hello world 4]
使用教程
接下來。通過我們一個(gè)簡單的demo:firefly_controller,來闡述 ROS 系統(tǒng)的使用方式。
此 Demo 展示了如何在兩臺(tái)機(jī)器上使用ROS系統(tǒng),詳述了使用ROS_MASTER_URI來配置多臺(tái)機(jī)器使用同一個(gè)master ,其主要功能是:
通過PC端的鍵盤,控制 ROC-RK3308-CC 主板上的兩個(gè)LED燈的亮滅
外接溫濕度傳感器,獲取當(dāng)前的溫濕度值
其中采用的溫濕度傳感器模塊是:SHT30,盛世瑞恩出產(chǎn)的一款溫濕度傳感器,基于i2c傳輸協(xié)議。代碼主要參考了ROC-RK3308-CC開發(fā)實(shí)例總結(jié)–SHT30溫濕度模塊調(diào)試。
ROC-RK3308-CC 設(shè)備端準(zhǔn)備
燒寫固件
按照《升級(jí)固件》進(jìn)入loader模式,從固件地址: ROC-RK3308-CC_Yocto_ROShttps://pan.baidu.com/s/16tzgJBa-jY0lRB_K_yvcqA下載固件,解壓,執(zhí)行命令:
sudo upgrade_tool ul MiniLoaderAll.bin && \ sudo upgrade_tool di -p parameter.txt && \ sudo upgrade_tool di -uboot uboot.img && \ sudo upgrade_tool di -trust trust.img && \ sudo upgrade_tool di -boot zboot.img && \ sudo upgrade_tool di -rootfs rootfs.img && sudo upgrade_tool rd
按照《上手教程》,給 ROC-RK3308-CC 主板上電開機(jī),接上串口。上電后需要輸入賬號(hào)密碼進(jìn)入系統(tǒng),輸入root即可,無需密碼。
注意:如果有溫濕度傳感器模塊SHT30,先接上模塊再上電,這里使用I2C1進(jìn)行通信,按引腳描述圖接上VCC5、GND、I2C1_SDA、I2C1_SCL即可。
初始化配置
根文件系統(tǒng)里,我們放了兩個(gè)小工具,方便配置環(huán)境:
ls /home/root setup.sh wifi.sh
首先上電開機(jī)后,先連接wifi(WiFi需要和PC主機(jī)在同一網(wǎng)段,可互相ping通),通過腳本配置,其中ssid為你的WiFi賬號(hào),psk為你的密碼
./wifi.sh $ssid $psk
接著配置 ROS 環(huán)境,這里我們將以PC主機(jī)端為master(整個(gè)ROS運(yùn)行環(huán)境只需要一個(gè)master),所以這里不需要啟動(dòng) roscore
source ./setup.sh $master_ip
其中master_ip是PC主機(jī)端的ip地址,這里主要配置了ROS_MASTER_URI和ROS_HOSTNAME,具體細(xì)節(jié)查看 setup.sh 腳本。
運(yùn)行 demo 節(jié)點(diǎn)
rosrun firefly_controller firefly_controller
等待 PC主機(jī)端 準(zhǔn)備好即可。
PC 端準(zhǔn)備
注意:以下操作方法使用了catkin工具,只適用于ROS Groovy及后期版本,對于ROS Fuerte及早期版本請使用rosbuild,這里不講述。
Demo 軟件包下載
Demo 軟件包下載:firefly_iot_keyboard.tar.bz2https://pan.baidu.com/s/11DojLWYYJ9uuUsmNMsWyFg
創(chuàng)建 ROS 工作空間
如果你是初次安裝 ROS,可通過catkin方式創(chuàng)建ROS工作空間:
mkdir -p ~/catkin_ws/src cd ~/catkin_ws/src
即使這個(gè)工作空間是空的(在src目錄中沒有任何軟件包,只有一個(gè)CMakeLists.txt鏈接文件),你也可以編譯它。
cd ~/catkin_ws/ catkin_make
編譯
現(xiàn)在先將下載的Demo 軟件包解壓到工作空間的src目錄:
tar -xjf firefly_iot_keyboard.tar.bz2 -C ~/catkin_ws/src/
然后編譯工作空間:
cd ~/catkin_ws/ catkin_make
執(zhí)行
分別打開兩個(gè)終端,每個(gè)終端都需要按以下操作配置。
配置當(dāng)前工作空間為ROS工作環(huán)境的最頂層:
cd ~/catkin_ws/ source devel/setup.bash
配置ROS_HOSTNAME為主機(jī)ip地址,不然設(shè)備端那邊不識(shí)別。
export ROS_HOSTNAME=$master_ip
其中一個(gè)終端運(yùn)行demo鍵盤控制節(jié)點(diǎn):
rosrun firefly_iot_keyboard keyboard.py
另一個(gè)終端運(yùn)行demo接收節(jié)點(diǎn)
rosrun firefly_iot_keyboard receiver.py
最終效果
效果圖如下:
PC 端
注意,如果不能控制,請選中 keyboard.py 所在的終端窗口以確保你的按鍵輸入能夠被捕獲。
終端鍵盤控制:
rosrun firefly_iot_keyboard keyboard.py Reading from the keyboard and Publishing to firefly_controller! ---------------------------------------------------------------- keymap: LED: b : Blue LED ON/OFF r : Red LED ON/OFF Sensor: t : show Temperature and Humidity
當(dāng)按下r和b,將會(huì)控制設(shè)備端紅藍(lán)LED燈的亮滅,如果外接了溫濕度傳感器sht30,按下t將會(huì)獲得設(shè)備端傳過來的溫濕度值,被另一”receiver.py”所在終端接受。
終端接收:
rosrun firefly_iot_keyboard receiver.py currently: Temperature 28.607613c Humidity 49.396507%
ROC-RK3308-CC 設(shè)備端
串口效果:
root@rockchip-rk3308-evb:~# rosrun firefly_controller firefly_controller [ INFO] [1545900033.047350122]: I heard: [blue] [ INFO] [1545900034.086951914]: I heard: [red] [ INFO] [1545900035.106874956]: I heard: [sht30]
調(diào)試
使用rosnode list命令,列出活躍的節(jié)點(diǎn):
rosnode list /firefly_base_controller /firefly_iot_keyboard /firefly_iot_receiver /rosout
可看到當(dāng)前運(yùn)行的demo,有三個(gè)節(jié)點(diǎn)在運(yùn)行:/firefly_base_controller、/firefly_iot_keyboard、/firefly_iot_receiver
通過rostopic list命令,能夠列出所有當(dāng)前訂閱和發(fā)布的話題:
rostopic list /cmd_vel /rosout /rosout_agg /temphumidity
這里可看到當(dāng)前運(yùn)行的demo有發(fā)布了兩個(gè)Topic:/temphumidity、/cmd_vel
使用命令rostopic echo可以顯示在某個(gè)話題上發(fā)布的數(shù)據(jù):
rostopic echo /temphumidity humidity: 50.0968933105 temp: 24.1374816895 --- humidity: 51.638053894 temp: 23.3657588959 ---
使用工具rqt_graph查看當(dāng)前 ROS 系統(tǒng)運(yùn)行情況的圖形:
rosrun rqt_graph rqt_graph
這里需要事先安裝 rqt_graph :
sudo apt-get install ros-indigo-rqt sudo apt-get install ros-indigo-rqt-common-plugins
-
Linux
+關(guān)注
關(guān)注
87文章
11314瀏覽量
209783 -
嵌入式主板
+關(guān)注
關(guān)注
7文章
6085瀏覽量
35419 -
Firefly
+關(guān)注
關(guān)注
2文章
538瀏覽量
7066 -
RK3308
+關(guān)注
關(guān)注
1文章
39瀏覽量
1144
發(fā)布評論請先 登錄
相關(guān)推薦
評論