隨想錄(ros學習筆記)
技術標籤:隨想錄
【 宣告:版權所有,歡迎轉載,請勿用於商業用途。 聯絡信箱:feixiaoxing @163.com】
ros,全稱robot operating system。說它是作業系統,其實也不全對,因為它實現的其實是一個類似於中介軟體的作用。使用者只需要在上面關注於自己演算法的實現,這就可以了,不需要重複造輪子,因為通訊、工具、模擬、通用演算法、常用硬體驅動,所有這些別人都替你做好了。如果大家有這方面的興趣,可以先了解下ros,再一步步去做,
1、找一個靠譜的學習視訊
在b站上面,有一個ros入門21講,個人覺得還是比較適合的,https://www.bilibili.com/video/BV1zt411G7Vn
2、ros的構成
ros主要可以分成4個部分,分別是ros通訊框架、ros基礎命令工具(包括rviz、gazebo)、ros場景演算法(導航、slam、moveit)、ros生態(比如第三方硬體廠商的ros包、各種網站,論壇、bbs、wiki等等)。
3、ros依賴的軟體平臺
ros是執行在linux上面,一般使用ubuntu,不過注意不同的ubuntu版本對應不同的ros版本。
4、ros依賴的硬體平臺
通常而言,如果是學習的話,一般ros直接執行在pc上面,如果是開發和部署,一般執行在類似的樹莓派這樣的開發板上。
5、機器人的硬體平臺
不管是導航還是機械臂,除了ros執行在ubuntu的開發板上面,一般還是需要一個stm32的嵌入式開發板,這個是控制電機的,常採用rtos來控制。
6、ros安裝
ros的安裝,其實非常簡單,一句話就可以
sudo apt-get install ros-kinetic-desktop-full
當然,第一次使用的時候,一般需要初始化一下,
sudo rosdep init
sudo rosdep update
接著,將ros的path路徑加到環境變數裡面
source /opt/ros/kinetic/setup.bash
這個時候,我們輸入roscore,如果程式正常執行,其實代表ros已經安裝好了,
roscore
如果需要知道詳細的安裝細節,可以看一下這個連結,http://wiki.ros.org/cn/kinetic/Installation/Ubuntu
7、ros開發常用的語言
主要是python和cpp,其他就是各種指令碼的編寫、命令的運行了
8、常用的ros命令有哪些
有一些常用的命令都是以ros開頭,這些命令都是為了讓你除錯目前的系統,分析下當前的分散式系統有哪些資訊、哪些節點,或者是啟動指令碼等等,比如
roscore
rosrun
roslaunch
rosparam
rosmsg
rossrv
rosbag
9、建立自己的工作區
mkdir -p ~/catkin_ws/src
cd ~/catkin_ws
catkin_init_workspace
cd ~/catkin_ws
catkin_make
source devel/setup.bash
cd ~/catkin_ws/src
catkin_create_pkg learning_communication std_msgs rospy roscpp
cd ~/catkin_ws
catkin_make
source ~/catkin_ws/devel/setup.bash
10、ros中比較值得學習的navigation和slam
如果是navigation,那麼就是amcl演算法
如果是slam,那麼就是gmapping演算法
這兩個在工業生產中是用的比較多的。但是,知道了這兩個演算法,並不等於,可以直接拿來在工業中使用,這還是遠遠不夠的,必須要做一些修改和優化。比如,實際生產中,嵌入式開發板的算力和pc不能比,但是執行效率又不能太低,如何對演算法進行加速就是各位小夥伴需要做的事情了。
11、ros其他值得學習的模組
理論上,作為一個框架或者生態,ros除了上面說的導航、slam、moveit,還可以順帶學習下嵌入式電路、rtos、電機控制、影象處理、語音識別、機器學習、深度學習這些,對系統實時性有要求的同學可以看一下ros2、rtlinux這些,看自己的興趣了。
12、ros生態或者第三方支援
很多硬體廠商都有ros支援包,比如lidar、3d lidar、3d camera,直接github下載、拿過來就能用,不需要自己造輪子,這也算是ros的優勢把。
13、ros學習的誤區
很多同學,特別是本科學習,或者剛進入研究生的同學,一下子進入ros的世界裡面,不知道怎麼下手,ros學的又比較雜,其實沒有必要,一步一步來,只要按照自己的節奏來,就可以了。重點關注與自己的領域,其他的方面夠用就好。比如說,你從來沒有學過linux,甚至只用過windows,那麼你可以這麼做,
先安裝一個virtualbox,
然後安裝一個ubuntu,
熟悉一下ubuntu的常用命令、使用方法、配置一下網路,
安裝一個ros版本,
熟悉一下python語言,看看會不會編譯、會不會配置檔案
看一下cpp語言,不會的話,找一本《c++ primer》補一下知識,
按照b站上面的ros教程掌握一下分散式通訊機制,
看看node、topic、subscribe、publish、service弄懂了沒,
自己寫幾個小程式,測試一下
下載小烏龜程式,
編寫程式控制小烏龜,
掌握常用的ros命令,
編譯有問題的話,學一下cmake語法,
看看launch的指令碼會不會配置
試試rviz、tf、gazebo這些工具,主要為了後面的場景搭建使用
選一個應用領域,比如slam看一下gmapping
搭建一個場景,看看能不能生成map
看看能不能下載amcl原始碼包
手動控制機器人,看看在map中,能不能用amcl定位
買一個便宜的robot實體
將程式部署在robot上
看看pc和robot能不能正常通訊
看看能不能讓robot動起來,在robot上執行amcl演算法,能不能在map中定位自己
實現amcl在robot上面的加速
robot上壓力測試
在robot上測試其他功能,比如攝像頭等等
14、最後的話
ros本身內容比較多,也比較雜,專注於自己熟悉的領域就可以了。當然基礎部分還是要掌握好,比如通訊機制、ros命令,以及linux、python、cpp、cmake除錯,這些都是基礎中的基礎,和專業沒有很大的關係。等到領域知識和基礎都沒有大問題之後,就可以考慮一下如何用ros開發出合適的產品了,是選擇工業機器人、消費、醫療,還是其他領域,這個就是另外一個topic了。 這個時候,或許你想做的,就是自己要不要做了掃地機器人呢?:-)反正,一步一步往前走就對了,沒有什麼捷徑。