這段時間導師讓研究一下amcl,在這以前只有一點ros基礎,根本不知道amcl是什麼東東,因而開始查資料找教程,可是真心沒有找到面向小白的配置教程,在這幾天的摸索中,終於讓amcl正常跑起來了,因此,必定要作一下筆記,省得之後忘光了。
amcl的英文全稱是adaptive Monte Carlo localization,即自適應蒙特卡羅定位,它是2D機器人運動的機率定位系統,它實現了自適應(或KLD採樣)Monte Carlo定位方法,該方法使用粒子濾波器跟蹤已知地圖上的機器人姿態。好了,廢話就這麼多,接下來開始介紹配置過程,面向小白哦。
既然是面向小白,那從ros安裝開始提及吧:(以安裝ros的indigo爲例,ubuntu選用14.04版本,ubuntu版本不建議過高)
首先官網安裝教程網址:http://wiki.ros.org/indigo/Installation/Ubuntu ,若是你不想看英文,那麼對於下面的東西,一路複製粘貼就ok了。php
sudo sh -c 'echo "deb http://packages.ros.org/ros/ubuntu $(lsb_release -sc) main" > /etc/apt/sources.list.d/ros-latest.list'
sudo apt-key adv --keyserver hkp://ha.pool.sks-keyservers.net:80 --recv-key 421C365BD9FF1F717815A3895523BAEEB01FA116
sudo apt-get update
# ------------下面幾個不一樣功能的版本任選一個(強烈建議選第一個)------------------
1. 完整版:
sudo apt-get install ros-indigo-desktop-full
2. ROS,rqt,rviz和機器人通用庫(rqt,用來顯示節點、消息傳遞圖;rviz,可視化界面)
sudo apt-get install ros-indigo-desktop
3. ROS包,構建和通訊庫,沒有GUI工具。
sudo apt-get install ros-indigo-ros-base
4. 也能夠安裝特定的ROS軟件包,例如gmapping;經過 apt-cache search ros-indigo 命令能夠查看找到可用的軟件包
sudo apt-get install ros-indigo-slam-gmapping
------------------------------以上4選1-------------------------------------
sudo rosdep init
rosdep update
echo "source /opt/ros/indigo/setup.bash" >> ~/.bashrc
source ~/.bashrc
sudo apt-get install python-rosinstall
嗯…,而後,再貼一個新手入門教程:http://wiki.ros.org/cn/ROS/Tutorials ,接下來,開始建立一個工做空間,開始鼓搗amclhtml
建立工做空間:node
mkdir -p ~/catkin_ws/src
切換目錄到src:python
cd ~/catkin_ws/src
下載navigation,rbx包:git
git clone https://github.com/ros-planning/navigation
git clone https://github.com/pirobot/rbx1
下載完以後編譯github
cd ..
catkin_make
而後報錯:
而後(參考 https://answers.ros.org/question/220676/how-to-install-bullet-on-indigo-in-ubuntu/):web
sudo apt-get install libbullet-dev
再編譯,報錯:
解決方案(參考 https://answers.ros.org/question/201630/orocos-bfl-not-found-while-installing-navigation-stack-ros-indigo-ubuntu-1404/):ubuntu
sudo apt-get install ros-indigo-navigation
再編譯,報錯 Error: ‘shared_ptr’ in namespace ‘std’ does not name a type (參考http://www.javashuo.com/article/p-etvuwpbj-np.html),按照它的方法,在catkin_ws/src目錄下的 CMakeLists.txt 文件中加如一行:ruby
SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -std=gnu++0x")
再編譯,報錯(參考 https://blog.csdn.net/handsome_for_kill/article/details/53288771):
解決方案,找到一個FindEigen3.cmake文件,直接在電腦裏面搜索就行,應該會有的,找不到的話我給個百度雲連接:https://pan.baidu.com/s/1zzK–WiLauQChzjDagbNhQ 密碼:v58s,下下來放到 ~/catkin_ws/src 目錄下,而後在該目錄下的 CMakeLists.txt 文件中加一行:bash
set(CMAKE_MODULE_PATH ${CMAKE_CURRENT_SOURCE_DIR})
再 catkin_make 一下,編譯成功,完美!
如今開始運行,
cd ~/catkin_ws
source devel/setup.bash
cd src/navigation
roscore
再開一個終端,每次開一個終端以後,記得運行一下 source ~/catkin_ws/devel/setup.bash 文件,固然,爲避免麻煩,把 source ~/catkin_ws/devel/setup.bash 添加到 ~/.bashrc 文件下的最後一行,這樣每次再開一個終端,系統會自動運行這條命令。接着運行機器人節點:
roslaunch rbx1_bringup fake_turtlebot.launch
接着報錯(參考 https://answers.ros.org/question/243919/cannot-launch-node-of-type-arbotix_pythonarbotix_driver-arbotix_python/):
解決方案:
sudo apt-get install ros-indigo-arbotix
再次運行機器人節點,成功,而後再開一個終端運行 amcl 節點,使用測試地圖:
roslaunch rbx1_nav fake_amcl.launch map:=test_map.yaml
接着再開一個終端,運行 rviz :
rosrun rviz rviz -d `rospack find rbx1_nav`/nav_fuerte.vcg
貌似不行,
錯誤提示是一種老的rviz格式,而後查看 rbx1/rbx1_nav 目錄下發現都是.rviz格式的文件,因此將擴展名改成 rviz ,解決。
rosrun rviz rviz -d 'rospack find rbx1_nav'/nav_fuerte.rviz
另一種解決方案,在 https://github.com/pirobot/ros-by-example 裏面下載 nav_fuerte.vcg 下來放到 rbx1/rbx1_nav 目錄下,而後再運行該命令便可:
rosrun rviz rviz -d `rospack find rbx1_nav`/nav_fuerte.vcg
rviz 節點運行成功以後,會彈出顯示界面,而後 add –> By topic –> 分別添加 Map, Pose, Odometry, 而後OK肯定,詳情見下圖:
在添加這幾個顯示 topic 以後, 以下圖所示,會顯示地圖和初始位姿(在 home/sun/catkin_ws/src/rbx1/rbx1_nav/maps 目錄下有幾個pgm圖和對應的yaml文件,yaml文件中包含了關於相應的地圖信息,詳情見下面),而後點擊上面的 2D Nav Goal ,在地圖上點擊肯定目標點,它就會自動導航到目的位姿。
效果圖以下圖所示:
以 test_map.yaml 文件爲例, 其內容爲:
image: test_map.pgm # 地圖名稱(也能夠寫成絕對路徑)
resolution: 0.050000 # 地圖分辨率,含義爲每一個像素 0.05m
origin: [-13.800000, -12.200000, 0.000000] # 【初始點座標 x,y, 方向 yaw】
negate: 0 #下面三個參數含義不太清楚,通常的yaml文件這幾個參數值是相同的
occupied_thresh: 0.9
free_thresh: 0.196
因此,若是你想生成本身定義的地圖,只須要建立yaml文件,根據須要修改前3行的值就好了,而後關於生成自定義地圖的話,在ubuntu裏面用gimp能夠作,用 google 開源的 catgrapher 也能夠跑一個地圖再導出來,其實用 matlab(直接 imwrite(‘map.pgm’, ‘map_matrix’) 用imwrite函數便可), C++均可以作一個 pgm地圖出來,它其實和通常的png圖片區別不大,只要你的地圖最終能被正常加載進去就是勝利。關於pgm信息,能夠參考這個網址:http://www.javashuo.com/article/p-vqclhkyk-mp.html ,(注:裏面說「每行長度不能超過70個字符」,我以前按照它的說法生成的地圖用map_server加載進去報錯,而後拋棄這個規則生成地圖嘗試了下,結果正確加載沒有問題) 我根據它提供的頭文件建了一個工程,作了些許修改,成功生成了pgm地圖,而且能經過map_server正常加載進去沒有問題,下載請見:https://download.csdn.net/download/sunqin_csdn/10431375, 有積分的童鞋幫忙捧個場,沒積分的同窗能夠聯繫我2942087962@qq.com 。而後關於使用map_server加載pgm地圖:
開終端,運行roscore, 開另一個終端,運行 map_server 節點,參數爲對應的yaml文件,再開一個終端,運行rviz, 而後 add –> by topic –> Map 就能夠再rviz中查看地圖了。
roscore
# 開另一個終端, 這個yaml文件須要本身根據地圖本身按照對應格式建立。
rosrun map_server map_server you_map_yaml_file.yaml
# 再開另一個終端
rviz
而後,若是輸出下面信息,說明地圖加載成功了, 而後再打開rviz顯示就能夠了。
若是出現下面這個狀況,請把map_server後面的 yaml 文件寫成絕對路徑或者 cd 到 yaml 文件所在的路徑再執行該指令。
若是是下面這種狀況,說明你的地圖文件格式有問題,map_server 不能正常打開。
好了,到這裏差很少能夠告一段落了,若是想接着日後玩, https://www.cnblogs.com/yoyo-sincerely/p/5774622.html, http://www.javashuo.com/article/p-acmakjul-gb.html, 這兩個連接能夠試一下。
參考連接:
ros安裝配置:
http://wiki.ros.org/indigo/Installation/Ubuntu
http://wiki.ros.org/cn/ROS/Tutorials
https://github.com/ros-planning/navigation
https://github.com/pirobot/rbx1
amcl配置使用:
https://blog.csdn.net/hcx25909/article/details/12110959
https://www.cnblogs.com/yoyo-sincerely/p/5774622.html
http://www.javashuo.com/article/p-acmakjul-gb.html
報錯解決方案連接:
https://answers.ros.org/question/220676/how-to-install-bullet-on-indigo-in-ubuntu/
https://answers.ros.org/question/201630/orocos-bfl-not-found-while-installing-navigation-stack-ros-indigo-ubuntu-1404/
https://blog.csdn.net/handsome_for_kill/article/details/53288771
https://answers.ros.org/question/243919/cannot-launch-node-of-type-arbotix_pythonarbotix_driver-arbotix_python/