2018年9月23日 星期日

ROS學習紀錄-5:Gazebo的安裝與初次使用

光說不練假功夫,在這篇中會向大家介紹一個好玩的東西:Gazebo,我們會用它內建的robot範例結合ROS中的topic概念來做出一個簡單的碰碰車程式喔~大家一起來學吧~


5-0.前置作業

首先,請先看完這個教程:turtlebot_gazebo[1],安裝完Gazebo的相關套件,其中,他的教程目前只有indigo版本的,所以安裝不同版本的人要自行修改一下安裝的指令喔,例如:
$ sudo apt-get install ros-indigo-turtlebot-gazebo
要改成下面這行,如果你也是安裝kinetic版的話
$ sudo apt-get install ros-kinetic-turtlebot-gazebo 
另外,值得注意的是,當使用指令:
$ roslaunch turtlebot_gazebo turtlebot_empty_world.launch
可能會提示錯誤訊息,請改用以下指令
$ roslaunch turtlebot_gazebo turtlebot_world.launch
跑出有著幾個環境物件和一台小機器人的地圖,之後按照:Explore the Gazebo world[2]中的步驟跑出一個能操作小機器人的程式,並去玩玩看吧~
喔對了,也可以去跑跑看Explore the Gazebo world安裝rviz與後面mapping的導航程式喔~不過這篇並不會用到喔~但是可以讓大家更了解它的運作方式,是說它內建的程式有個小BUG,在導航時會讓robot轉得太多,而robot就會笨笨的再轉個一圈,極為浪費時間。
我解決的方法是將robot轉動的速度(max_rot_vel&min_rot_vel)調小,該文件的位置在:/opt/ros/kinetic/share/turtlebot_navigation/param/dwa_local_planner_params.yaml(我找超久的QQ),雖然它的轉的速度真的變得有夠慢,不過這個問題也算是解決了,有興趣的人可以去試看看有沒有更好的辦法喔~記得告訴我,霸脫,感恩的心!

5.Let's碰碰車

5-1.撞到了嗎?

各位還記得我們在ROS學習紀錄-4:node&topic學到的topic概念嗎?現在將告訴你們如何付諸實用,開啟終端機輸入
$ rostopic list
出現錯誤提示
如果你有看到看到一串錯誤訊息的話,那表示你還沒打開任何的ROS node、topic,現在打開前置作業的範例地圖,在新的終端機裡再次輸入
$ rostopic list
你可以各式各樣的topic列表
topic list
相信有點英文基礎的人都可以大概看懂topic本身正在發布的訊息大概是甚麼東西,在之前的練習:11.Writing a Simple Publisher and Subscriber (C++)[2]中,我想大家對怎麼運用topic都有一點基礎的概念了吧?這次我們的目標是碰碰車,要怎麼判定robot有沒有撞到東西是非常重要的一件事,那碰碰的英文是啥呢?
BUMP!
沒錯,就是bump!在topic列表中找找跟bump相關的吧~我們可以看到一個:/mobile_base/events/bumper,輸入指令:
$ rostopic info /mobile_base/events/bumper
讓它顯示info,如下圖。
bumper的info
好的,我們知道了這個topic長什麼樣了,恩,我知道,根本不知道怎麼運用它,對吧?來!我們上網找找它的資料吧!參:kobuki_msgs/BumperEvent Message[2]和Implement your own controller for Kobuki[3]從這裡可以看到它的格式,參考之前listener的練習,把車車撞到東西的消息顯示出來吧~如果寫不太出來的話可以參考我的程式碼BumpBump.cpp[4],不過裡面會包含下個步驟的東西,可以全部看完再來看。

5-2.動起來吧!羅伯特!

如果各位前置作業有完全跑完的話,裡面有個能操作小robot的程式[1](我不知道我的電腦裡為啥沒有QQ),大家一起來解讀這個重要的程式吧~也要參考:11.Writing a Simple Publisher and Subscriber (C++)[2]中的talker.cpp喔,就先讓它能直線跑就好,如下圖。
直線跑~~~
再來就運用你的程式技術將機器人的動作和撞到東西的訊息結合起來吧!(加油!!!

5-3.Package it!

現在可能還看不到成果,畢竟只有C++程式碼而已,接下來我們來建一個屬於它的package吧!
還記得我在ROS學習紀錄-3:ROS的package給大家的指令嗎?是時候用到了!就照著上面的步驟建立吧~記得喔!要改成你現在要用的名稱喔,像我就是叫它BumpBump.cpp,很有品味對吧?哈哈
之後執行看看,確保你已經開啟前置作業中提到的範例地圖(有機器人的喔),在新的終端機輸入
$ rosrun bumpbumptest BumpBump
若撞到東西,會有提示訊息還有robot會自動後退
撞到時會按照你的程式去做出反應優~有沒有很感動呢?哈哈。

5-4.What's next?

下篇會和大家一起學習在ROS和Gazebo上運用Opencv,會用到這篇最後寫出來的成果,請各位務必練習+實作出這篇喔~

如有問題可以留言大家一起討論,留言請勿出現不雅言語與無端謾罵喔~
If u have any question,just leave comments to me.I will answer u as soon as possible,but don't be mean to me.Thanks!

沒有留言:

張貼留言