ROS中階筆記(八):機器人SLAM與自主導航—機器人自主導航node
其中白色框內的是ROS已經爲咱們準備好的必須使用的組件,灰色框內的是ROS中可選的組件,藍色的是用戶須要提供的機器人平臺上的組件。python
$ sudo apt-get install ros-kinetic-navigation
一、全局路徑規劃(global planner)git
二、本地實時規劃(local planner)github
參數含義請參考:http://wiki.ros.org/move_base算法
mbot_navigation/launch/move_base.launch來啓動move_base 節點。bash
<launch> <node pkg="move_base" type="move_base" respawn="false" name="move_base" output="screen" clear_params="true"> <rosparam file="$(find mbot_navigation)/config/mbot/costmap_common_params.yaml" command="load" ns="global_costmap" /> <rosparam file="$(find mbot_navigation)/config/mbot/costmap_common_params.yaml" command="load" ns="local_costmap" /> <rosparam file="$(find mbot_navigation)/config/mbot/local_costmap_params.yaml" command="load" /> <rosparam file="$(find mbot_navigation)/config/mbot/global_costmap_params.yaml" command="load" /> <rosparam file="$(find mbot_navigation)/config/mbot/base_local_planner_params.yaml" command="load" /> </node> </launch>
藍色點是根據機率算法來估算機器人的位置,藍色點越密集的地方,說明機器人在這個位置機率越高app
具體算法可參考:《機率機器人》框架
mbot_navigation/launch/amcl.launch來啓動amcl功能包dom
<launch> <arg name="use_map_topic" default="false"/> <arg name="scan_topic" default="scan"/> <node pkg="amcl" type="amcl" name="amcl" clear_params="true"> <param name="use_map_topic" value="$(arg use_map_topic)"/> <!-- Publish scans from best pose at a max of 10 Hz --> <param name="odom_model_type" value="diff"/> <param name="odom_alpha5" value="0.1"/> <param name="gui_publish_rate" value="10.0"/> <param name="laser_max_beams" value="60"/> <param name="laser_max_range" value="12.0"/> <param name="min_particles" value="500"/> <param name="max_particles" value="2000"/> <param name="kld_err" value="0.05"/> <param name="kld_z" value="0.99"/> <param name="odom_alpha1" value="0.2"/> <param name="odom_alpha2" value="0.2"/> <!-- translation std dev, m --> <param name="odom_alpha3" value="0.2"/> <param name="odom_alpha4" value="0.2"/> <param name="laser_z_hit" value="0.5"/> <param name="laser_z_short" value="0.05"/> <param name="laser_z_max" value="0.05"/> <param name="laser_z_rand" value="0.5"/> <param name="laser_sigma_hit" value="0.2"/> <param name="laser_lambda_short" value="0.1"/> <param name="laser_model_type" value="likelihood_field"/> <!-- <param name="laser_model_type" value="beam"/> --> <param name="laser_likelihood_max_dist" value="2.0"/> <param name="update_min_d" value="0.25"/> <param name="update_min_a" value="0.2"/> <param name="odom_frame_id" value="odom"/> <param name="resample_interval" value="1"/> <!-- Increase tolerance because the computer can get quite busy --> <param name="transform_tolerance" value="1.0"/> <param name="recovery_alpha_slow" value="0.0"/> <param name="recovery_alpha_fast" value="0.0"/> <remap from="scan" to="$(arg scan_topic)"/> </node> </launch>
執行如下命令:
$ cd ~/catkin_ws/src $ git clone https://github.com/pirobot/rbx1.git $ cd rbx1 # ~/catkin_ws/src/rbx1 $ git checkout indigo-devel $ cd ~/catkin_ws $ catkin_make $ source ~/catkin_ws/devel/setup.bash $ rospack profile # 加入ROS package路徑
若是這個package的代碼後來更新了,須要執行如下代碼:
$ cd ~/catkin_ws/src/rbx1 $ git pull $ cd ~/catkin_ws $ catkin_make $ source ~/catkin_ws/devel/setup.bash
rviz+arbotix來進行仿真,實現ROS功能包算法的功能。
分別在四個終端下面運行這四個命令:
roslaunch rbx1_bringup fake_turtlebot.launch #啓動機器人,ArbotiX節點,加載機器人的URDF文件 roslaunch rbx1_nav fake_move_base_map_with_obstacles.launch # 啓動導航節點 rosrun rviz rviz -d 'rospack find rbx1_nav'/nav_obstacles.rviz # 啓動rviz rosrun rbx1_nav move_base_square.py # 啓動歷程
ERROR: cannot launch node of type [arbotix_python/arbotix_driver]: arbotix_python ROS path [0]=/opt/ros/kinetic/share/ros ROS path [1]=/home/ggk/ORB_SLAM2/Examples/ROS/ORB_SLAM2 ROS path [2]=/home/ggk/catkin_ws/src ROS path [3]=/opt/ros/kinetic/share
一、檢查是否安裝 arbotix_python package
roscd arbotix_python
二、安裝 arbotix_python
方法一:不推薦
sudo apt-get install ros-kinetic-arbotix-*
方法二:推薦
cd ~/catkin_ws/src git clone https://github.com/vanadiumlabs/arbotix_ros.git cd ~/catkin_ws catkin_make source ~/catkin_ws/devel/setup.bash
ERROR: cannot launch node of type [arbotix_python/arbotix_driver]: can't locate node [arbotix_driver] in package [arbotix_python]
說明:
安裝 arbotix_python,用方法一不行,沒法啓動節點,所以應該用方法二
roslaunch mbot_gazebo mbot_laser_nav_gazebo.launch # 啓動仿真環境 roslaunch mbot_navigation nav_cloister_demo.launch # 啓動導航節點
2D Nav Goal來選擇目標點,點擊左鍵,來選擇一個目標姿態。
2D Pose Estimate調整機器人的位姿,
綠色線:全局規劃
紅色線:局部規劃
前面經過各類功能包來完成SLAM功能,經過導航機器人到達目標點的路徑規劃;
接下來,把SLAM和導航結合起來:
在導航的過程中,不斷的自主的去探索未知的環境,最終來完成地圖的構建;
roslaunch mbot_gazebo mbot_laser_nav_gazebo.launch # 啓動仿真環境 roslaunch mbot_navigation exploring_slam_demo.launch # 啓動SLAM+導航的節點 # 機器人一邊導航,一變建圖
徹底自主在環境當中作運動,去把整個地圖構建起來;
roslaunch mbot_gazebo mbot_laser_nav_gazebo.launch roslaunch mbot_navigation exploring_slam_demo.launch rosrun mbot_navigation exploring_slam.py # 控制機器人運動,完成地圖構建
微信公衆號:喵哥解說 公衆號介紹:主要研究機器學習、計算機視覺、深度學習、ROS等相關內容,分享學習過程當中的學習筆記和心得!期待您的關注,歡迎一塊兒學習交流進步!同時還有1200G的Python視頻和書籍資料等你領取!!!