當前位置: 華文問答 > 數位

學習ROS需要硬體嗎?

2017-08-17數位

我來答一波這個問題,目前某西北某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 navigation功能包的流程圖鎮樓

學到這個程度,你的ROS水平足夠了,但還是對具體演算法一無所知,但這起碼保證了你拿到實體機器人後可以快速上手。因為答主說了以後想搞SLAM,不是嵌入式,所以拿到的機器和你之前仿真的區別應該就是gazebo那個節點,改成了底盤驅動控制器,話題名字可能也有輕微改變。半個小時上手沒問題,不多贅述。如何學SLAM,可以看我另一個回答:

看到這我廢話了這麽多,這裏可以休息下了^_^

分享給題主一個我借助Turtlebot3的一系列功能包,自己搭建的一個學Cartographer的仿真環境~

先附倉庫地址:

  • 配置好cartographer (carographer cartographer_ros cartographer_turtlebot ceres-solver)
  • 安裝依賴項
  • 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

  • 使用說明: 為了方便使用我把launch檔合成了shell指令碼放在倉庫目錄的shell_carto資料夾內
  • 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多多!