作者:Sco Lin
安裝小烏龜
首先,要安裝小烏龜:sudo apt-get install ros-kinetic-turtlesim
然後再下這個指令rosrun turtlesim turtlesim_node,最後再開一個Terminal,下rosrun turtlesim turtle_teleop_key,就可以用Keyboard的上下左右去控制烏龜移動。
這裡其實就用到我們在工作區運作篇寫到的Publisher與Subscriber的概念,此時我們再開一個Terminal輸入 rostopic list。
這樣就會看到目前是有哪些topic是正在使用的,然後我們需要用到/turtle1/pose。
再來輸入rostopic echo /turtle1/pose,代表我在其中的Terminal控制小烏龜移動後,另一個Terminal可以顯示出目前小烏龜的x y及theta,而當小烏龜移動到畫面的左下角時(如下圖紅框),x y是 0 (原點)。
這樣有沒有一點FU了!?在KNN室內定位那2篇文章(【Tutorial】:運用KNN演算法進行室內定位Part 1、【Tutorial】運用KNN演算法進行室內定位 Part 2),我們用了64個點去判斷定位,所以不再是三角定位或多點定位,而是Machine Learning定位,基本是一種硬體愈快,定位速度愈快的暴力定位法。這樣,還不足夠選ROS讓我們繼續進行的理由,接下來我們來讓小烏龜亂跑,畢竟掃地機器人也是自動跑的,哪有手動控制這麼笨的!?
這裡,要想介紹大家另一本書 “A Gentle Introduction to ROS” (by Jason M. O’Kane)(中文版)。
在本書中3.3提到的A publisher program會讓小烏龜亂跑(code請見 pp.48),而3.4 A subscriber program的程式是去Subscribe turtle1/pose,與前面我們用的rostopic echo /turtle1/pose有異曲同工之妙(code請見 pp.56),記得下載之後要放到catkin_ws/src內,然後再catkin_make哦~
catkin_make 100%就代表沒問題了!
這裡再寫一次步驟
- 新的Terminal -> roscore
- 開新的Terminal -> rosrun turtlesim turtlesim_node
- 再開新的Terminal -> rosrun turtlesim_publisher turtlesim_publisher_exe
- 再一次,開新的Terminal -> rosrun turtlesim_subscriber turtlesim_subscriber_exe
(每一次都需要開新的Terminal )
就會看到小烏龜在亂跑,而且Subscribe有吐出資料來,這代表我在Subscribe這裡寫成把資料丟到我們的Back_end,不就跟之前的課程,用Linkint7697把資料往後端丟一模一樣!?
更威猛的是,ROS官方有Android版本的Source code啊(下載連結),實在是太令人感動了!但上面的Source Code APP要用真實的硬體才容易了解它在做些什麼事。是手機控制Turtlebot3的硬體,然後在手機顯示出SLAM後的地圖,而Turtlebot3是一個小型機器人,如下圖:
這裡有e-Manual,提供給有興趣的夥伴研究,寫得真的很詳細。但我們目前是在Ubuntu上模擬,沒有硬體怎麼辦?別擔心!ROS都幫我們想好了,而且接下來的模擬SLAM就是小弟下定決心要玩ROS的主因了!
如果您跟第一篇一樣 sudo apt-get install ros-kinetic-desktop-full,那麼ROS裡應該有Rviz與Gazebo這兩套模擬器了,如果沒有就麻煩Google一下囉~
Gmapping和AMCL 的不同
先來了解一下何謂gmapping與AMCL。gmapping是沒有圖的時候,我們可以透過SLAM即時建圖,也是可以順便定位存圖的居家好夥伴;而AMCL是已經用gmapping做好圖,或是別人幫我們做好的圖,讓機器人或APP拿來定位用。古月居大神的網誌寫得更加詳細:導航與定位框架 move_base(路徑規劃)amcl(導航與定位)
準備開啟小烏龜
1. 開個Terminal
export TURTLEBOT3_MODEL=waffle_pi
roslaunch turtlebot3_gazebo turtlebot3_world.launch
居然出現Error!沒關係,我們在Terminal輸入export SVGA_VGPU10=0再roslaunch一次,或是把它加入.bashrc內 $ echo “export SVGA_VGPU10=0” >> ~/.bashrc
*註:大家有興趣可以參考
再一次roslaunch turtlebot3_gazebo turtlebot3_world.launch
終於開啟了烏龜世界
2. 再開個Terminal
export TURTLEBOT3_MODEL=waffle_pi
roslaunch turtlebot3_gazebo turtlebot3_gazebo_rviz.launch
3. 將Gazebo與RViz的視窗放在一起
如下圖:
上圖右邊會看到Rviz的Turtlebot3有一點點的紅線。沒錯!那個就是模擬的Lidar,SLAM出來的夢中的紅線!
4. 再開個Terminal
export TURTLEBOT3_MODEL=waffle_pi
roslaunch turtlebot3_slam turtlebot3_slam.launch slam_methods:=gmapping
就會看到它一直跑
5. 回到RViz按下ADD
6. 選擇Map按下OK
7. 選擇Map裡的Topic -> By topic,再選Map按下ok
8. 再開個Terminal用方向鍵去控制turtlebot3
roslaunch turtlebot3_teleop turtlebot3_teleop_key.launch
Turtlebot3跑完SLAM後會長這樣,如下圖:
9. 最後 rosrun map_server map_saver -f ~/map
10. 把SLAM相關的東西全部都關掉,然後:
export TURTLEBOT3_MODEL=waffle_pi
roslaunch turtlebot3_gazebo turtlebot3_world.launch
export TURTLEBOT3_MODEL=waffle
roslaunch turtlebot3_navigation turtlebot3_navigation.launch map_file:=$HOME/map1.yaml
rosrun rviz rviz -d `rospack find turtlebot3_navigation`/rviz/turtlebot3_nav.rviz
會發現左邊RViz的圖怪怪的,因為Turtlebot3的位置不對了,所以這樣玩導航就不會正確。
修正導航正確性
1. 在RViz使用2D Pose Estimate把Turtlebot3放在小紅框的位置,如下圖:
註:記得如果Turtlebot的方向是朝上,在RViz就要朝上哦!上圖就是在RViz的方向是朝下,所以看起來怪怪的,跑起來也不對
2. 再來,用2D Nav Goal選個方向,會發現綠色箭頭會愈來愈少(收斂中),Gazebo的Turtlebot也會跟著跑,終於玩到導航囉~
3. 再開個Terminal -> rostopic list 發現/amcl_pose就是我們要的位置資訊
4. 最後再開個Terminal -> rostopic echo /amcl_pose 會一直回傳目前Turtlebot的位置
小結
寫到這裡,應該知道為什麼Simple Care專案要挑選ROS繼續玩下去了吧?ROS在台灣也有2個很活躍的FB社團,一個是ROS Taipei,另一個是ROS Taiwan,2個版主都是神人等級,也感謝幫忙解惑的Steven,不然這一篇寫不出來啊!
最後再介紹一本中文譯本,是由CAVEDU的曾阿吉老大翻釋的,看這本就知道ROS能玩的確實不少!
(本文轉載自南科AI_ROBOT自造基地、原文連結;責任編輯:葉于甄)
- 【育教於樂】我家日常的康達效應 - 2019/04/25
- 【Tutorial】一起走進 ROS 的世界吧(5) - 語音辨識篇 - 2018/12/26
- 【Tutorial】一起走進 ROS 的世界吧(4) — 視覺辨識篇 - 2018/11/14
訂閱MakerPRO知識充電報
與40000位開發者一同掌握科技創新的技術資訊!
2020/02/05
是我漏看還是怎麼樣
稍微去作者提供的網站看了看
要用TurtleBOT3的模擬 需要裝一些pkg
先裝這個(參考6.1.3 http://emanual.robotis.com/docs/en/platform/turtlebot3/pc_setup/#install-dependent-ros-packages)(不知道sudo什麼的要不要 好多字)
$ cd ~/catkin_ws/src/
$ git clone https://github.com/ROBOTIS-GIT/turtlebot3_msgs.git
$ git clone https://github.com/ROBOTIS-GIT/turtlebot3.git
$ cd ~/catkin_ws && catkin_make
裝完turtlebot3_msg 跟 turtlebot3後 再裝simulator(參考11.1 http://emanual.robotis.com/docs/en/platform/turtlebot3/simulation/#turtlebot3-simulation-using-gazebo)
$ cd ~/catkin_ws/src/
$ git clone https://github.com/ROBOTIS-GIT/turtlebot3_simulations.git
$ cd ~/catkin_ws && catkin_make
然後catkin_make完成後就可以做原PO的roslaunch了
$ roslaunch turtlebot3_gazebo turtlebot3_world.launch
目前只做到這裡 後續再繼續做 也幫助其他卡住的人