基于ROS的slam 地图构建与navigation 自主导航

基于ROS的slam 地图构建与navigation 自主导航

一、slam 地图构建

一、实验原理
1.1 slam算法安装
ros-indigo-slam-gmapping是 ros平台激光 slam算法之一,在使用LIAOKE机器人做地图构建事先要安装该算法。终端输入命令:
$ sudo apt-get install ros-indigo-slam-gmapping 进行slam算法安装;

1.2 程序包
程序包位置:/LIAOKE_ws/src/LIAOKE_map。

1.3 节点通信图
1.3	节点通信图

二、实验步骤
2.1 硬件检查
插入手柄usb接口,终端输入:
$ ls /dev/input/
显示有js0则说明系统识别到手柄,如图;
输入信息组
输入:$ sudo jstest /dev/input/js0
检查手柄是否运行正常,如下则手柄运行正常;
在这里插入图片描述

2.2启动gmapping节点
新终端输入:$ roslaunch LIAOKE_map LIAOKE_gmapping.launch
窗口显示 rviz界面,用手柄控制 LIAOKE在室内环境中移动,得到如图的二维地图。界面上有LIAOKE车体模型,以及雷达扫描到的相关信息;

在这里插入图片描述
2.3 保存地图
打开一个新终端输入以下命令:首先切换到保存地图的目录中:
cd ~/LIAOKE/LIAOKE_map/maps

然后运行以下命令保存地图:
rosrun map_server map_saver –f map

二、navigation 自主导航

一、实验原理
1.1 程序包
LIAOKE 机器人导航算法实现的程序包是 LIAOKE_nav,程序包位置:
/LIAOKE_ws/src/LIAOKE_nav。

1.2 导航包格局图
在进行实验前,需要确保系统已经安装导航包集,终端输入:sudo apt-get install ros-indigo-navigation进行导航包安装。导航包格局如图。
在这里插入图片描述
配置机器人,导航功能包集将使其可以运动,上图概述了这种配置方式。
白色的部分是必须且已实现的组件,灰色的部分是可选且已实现的组件,蓝色的部分是必须为每一个机器人平台创建的组件。以下内容将介绍使用导航功能包集的先决条件:

(1)TF变换配置(其他变换)
导航功能包集需要机器人不断使用tf发布有关坐标系之间的关系的信息。

(2)传感器信息(sensor source)
导航功能包集使用来自传感器的信息避开现实环境中的障碍物,它假定这些传感器 在ROS上不断发布 sensor_msgs/LaserScan 消息或者sensor_msgs/PointCloud消息。

(3)里程信息(odometry source)
导航功能包集需要使用tf和nav_msgs/Odometry消息发布的里程信息。

(4)基座控制器(base controller)
导航功能包集假定它可以通过话题"cmd_vel"发布 geometry_msgs/Twist 类型的消息,这个消息基于机器人的基座坐标系,它传递的是运动命令。这意味着必须有一个节点订阅"cmd_vel"话题, 将该话题上的速度命令(vx, vy, vtheta转换为电机命令(cmd_vel.linear.x, cmd_vel.linear.y, cmd_vel.angular.z)发送给移动基座。

(5)地图服务器(map_server)
将代价地图作为 ROS Service发布,提供了 map_saver节点,可以通过命令行存储地图。

1.3 节点通信图
在这里插入图片描述
1.4 amcl节点分析
蒙特卡洛定位节点 amcl:amcl 节点输入激光地图,激光扫描,和 tf 转换信息,输出位姿估计。amcl在启动时候依据提供的参数完成粒子滤波器初始化。

(1)订阅话题:
坐标转换信息/tf(tf/tfMessage)
导航地图信息/map(nav_msgs/OccupancyGrid)
初始姿态/initialpose(geometry_msgs/PoseWithCovarianceStamped)
激光扫描/scan(sensor_msgs/LaserScan)

(2)发布话题:
位姿估计/amcl_pose(geometry_msgs/PoseWithCovarianceStamped)粒子滤波器维护的位姿估计集合/particlecloud(geometry_msgs/PoseArray) 坐标转换息/tf(tf/tfMessage)

(3)服务:global_localization(std_srvs/Empty),用于启动全局定位,其中所有粒子随机分散通过地图中的自由空间。

二、 测试步骤
终端输入命令:$ roscore 运行一个master;
终端输入:$ roslaunch LIAOKE_nav LIAOKE_nav.launch 弹出的 rviz 上出现gmapping包里的地图,如图;
在这里插入图片描述
要准确的导航,首先要给出机器人的初始位置,使用菜单栏中的”2D Pose Estimate”在地图中给出机器人实际在地图中的位置。

然后点击上排的2D Nav Goal ,在图中任意位置标注箭头,给出机器人的目标位置,机器人将自动规划路径移动到箭头位置。
在这里插入图片描述
通过如图所示路径规划算法即可实现navigation 自主导航。

猜你喜欢

转载自blog.csdn.net/qq_45252077/article/details/107881266