我來答一波這個問題,目前某西北某985高校大四自動化專業學生,學ROS已經一年有余。
剛開始也糾結過這個問題,畢竟搭建一個底盤,先不說硬件價格,操作還是比較麻煩的。雖說ROS wiki(https://www. ros.org/ )上的開源社區上提供了大量功能包,各種網誌上也包含了各種快速搭建的教程和方法,但仍然躲不開幾個問題:編碼器的驅動怎麽配置?底盤驅動程式怎麽寫?上位機和下位機怎麽進行通訊?如何把整個系統耦合到ROS中,比如如何利用/cmd_vel話題控制底盤運動?miniPC,激光雷達,各個傳感器的單獨供電怎麽解決?需不需要升壓電路?這裏只舉了幾個可觀的例子,不再贅述。(要不然各個高校實驗室也不會買那麽多turtlebot是吧...)
剛開始 的時候是一定要先在自己電腦上仿真的,節省精力和時間成本。必然要看一遍古月的課or中科院軟件所那個也挺好(源於中國大學慕課的風格,每節課程教學短小精悍),大致了解一些ros下的基本命令,三種通訊方式怎麽調怎麽自訂,如何改工作空間裏的CMakelists,細節到如何配置OpenCV(主要是怎麽改cmake加表頭檔把opencv的API引進工程裏),如何安裝navigation功能包和配置一些建圖演算法Gmapping,hector,karto等。
之後要達到什麽程度呢 ,你要你能把你學到的功能:比如建圖,定位導航,cv辨識,語音辨識等拼接起來。比如在gazebo的仿真環境裏(以中科院那個虛擬環境為例 \Rightarrow 第一個連結),你能實作從大廳走到教研室,辨識出那個屋子裏面是椅子or桌子or黑板or電腦,返回原點,輸出這個資訊:教研室有一個椅子)。這些其實並不是難事,你不需要改各個功能的具體程式碼,ROS的控制方式是點對點的,各個節點都是松耦合的不會互相影響,你只需要讓各個node之間以ROS間通訊的形式互相觸發就可以了。
學到這個程度,你的ROS水平足夠了,但還是對具體演算法一無所知,但這起碼保證了你拿到實體機器人後可以快速上手。因為答主說了以後想搞SLAM,不是嵌入式,所以拿到的機器和你之前仿真的區別應該就是gazebo那個節點,改成了底盤驅動控制器,話題名字可能也有輕微改變。半個小時上手沒問題,不多贅述。如何學SLAM,可以看我另一個回答:
看到這我廢話了這麽多,這裏可以休息下了^_^
分享給題主一個我借助Turtlebot3的一系列功能包,自己搭建的一個學Cartographer的仿真環境~
先附倉庫地址:
sudo apt-get install ros-kinetic-joy ros-kinetic-teleop-twist-joy ros-kinetic-teleop-twist-keyboard ros-kinetic-laser-proc ros-kinetic-rgbd-launch ros-kinetic-depthimage-to-laserscan ros-kinetic-rosserial-arduino ros-kinetic-rosserial-python ros-kinetic-rosserial-server ros-kinetic-rosserial-client ros-kinetic-rosserial-msgs ros-kinetic-amcl ros-kinetic-map-server ros-kinetic-move-base ros-kinetic-urdf ros-kinetic-xacro ros-kinetic-compressed-image-transport ros-kinetic-rqt-image-view ros-kinetic-gmapping ros-kinetic-navigation ros-kinetic-interactive-markers
mkdir -p ~/catkin_ws/src/ &&
cd
~/catkin_ws/src/
sudo cp ~/Cartographer_ICAR/{
turtlebot3,turtlebot3_msgs,turtlebot3_simulations,waterplus_map_tools}
~/catkin_ws/src/
cd ~/catkin_ws
catkin_make
echo "source ~/catkin_ws/devel/setup.bash" >> ~/.bashrc
echo "export TURTLEBOT3_MODEL=burger" >> ~/.bashrc
1. cartographer建圖
開啟仿真環境
cd shell_carto/
./gazebo_empty_start.sh
Cartographer建圖
./mapping_cartographer.sh
保存地圖
mkdir ~/map
./savemap.sh
2. 利用 cartographer純定位+movebase 進行定點導航
./gazebo_empty_start.sh
./carto_localization.sh
3. 基於2實作多點連續導航
利用Add Waypoint設定多個目標點
sudo cp waypoints.xml ~/waypoints.xml
./gazebo_empty_start.sh
./tools_carto_localization.sh
保存標註目標點資訊到~/waypoints.xml,並依次發送move_base_msgs::MoveBaseGoal goal資訊
./map_tools.sh
如果想自己diy一個底盤玩玩的話推薦這個ros_arduino_bridge,下位機程式不用寫,有個16進制檔可以直接燒進去。Realsense可以買一個跑個orb玩玩,Intel這個RGBD網絡攝影機教程多便宜效果還不錯。
我們社團現在已經買了這個了,再也不用自己搞底層了,可惜已經要畢業了...
附一下這一年時間學習ROS過程中得到的一些榮譽吧(都是服務機器人相關:超市,多人辨識,智能管家三個方面):
溜了溜了,去肝畢設了,如果覺得有幫助的話左側三角贊同走一下哦 !!
謝謝各位同僚這麽有耐心看到這句話哈哈哈哈 !
竟然這麽多贊了 ❗ ️
我的論文答辯前幾天剛剛結束,我也得到了我最終的論文評級,如下:
最後成為優秀論文讓我非常驚訝,這是對我這階段工作的認可。作為本科生選擇這樣的課題著實是一種挑戰,且不說演算法推導,光是敲公式就快給我搞崩潰了。(學校不讓用latex)
看到評論裏對我的認可深感榮幸,也有很多人私聊我請教問題,但我真的只是我校普普通通的一名喜歡SLAM的本科生。相比於周圍很多人,無論從科研能力還是競賽方面,我真的差得太多。歡迎各位來報考我交,你將會充分理解我上面的話。祝各位學業順利,paper多多!