在ros環境下的amcl配置筆記


這段時間導師讓研究一下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了。

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
------------------------------以上41-------------------------------------
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 ,接下來,開始創建一個工作空間,開始鼓搗amcl

創建工作空間:

mkdir -p ~/catkin_ws/src

切換目錄到src:

cd ~/catkin_ws/src

下載navigation,rbx包:

git clone https://github.com/ros-planning/navigation
git clone https://github.com/pirobot/rbx1

下載完之后編譯

cd ..
catkin_make

然后報錯:
這里寫圖片描述
然后(參考 https://answers.ros.org/question/220676/how-to-install-bullet-on-indigo-in-ubuntu/):

sudo apt-get install libbullet-dev

再編譯,報錯:
這里寫圖片描述
解決方案(參考 https://answers.ros.org/question/201630/orocos-bfl-not-found-while-installing-navigation-stack-ros-indigo-ubuntu-1404/):

sudo apt-get install ros-indigo-navigation

再編譯,報錯 Error: ‘shared_ptr’ in namespace ‘std’ does not name a type (參考https://blog.csdn.net/WangJiankun_ls/article/details/56277272),按照它的方法,在catkin_ws/src目錄下的 CMakeLists.txt 文件中加如一行:

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 文件中加一行:

set(CMAKE_MODULE_PATH ${CMAKE_CURRENT_SOURCE_DIR})

FindEigen3.cmake文件放置位置
注意,CMakeLists.txt右下角有個鎖圖標,需要在終端 sudo gedit CMakeLists.txt 的方式打開修改,建議這一行加在盡量前面,圖中在第9行,不一定是非要加在這一行
再 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信息,可以參考這個網址:https://www.cnblogs.com/cxchanpin/p/6816981.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.htmlhttps://www.cnblogs.com/talugirl/p/5962806.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
https://www.cnblogs.com/talugirl/p/5962806.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/


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM