Gmapping+amcl的turtlebot实现和Gazebo仿真实现


Gmapping包提供了基于激光雷达的SLAM的方法,你可以通过一个移动机器人的激光雷达数据和位置数据来创建一个2D的栅格地图。

For more information, please click wiki tutorial

安装雷达驱动和gmapping

  1. 下载驱动包,一般将雷达驱动安装在~/catkin/src/中:
$ git clone https://github.com/robopeak/rplidar_ros.git
# 以及三个源码包
$ git clone https://github.com/ros-perception/slam_gmapping
$ git clone https://github.com/ros-perception/openslam_gmapping
$ git clone https://github.com/ros-planning/navigation.git

或者通过直接安装的方式

$ apt-cache search ros-kinetic #查看可用的软件包列表
$ sudo apt-get install ros-kinetic-slam-gmapping
$ sudo apt-get install ros-kinetic-openslam-gmapping
$ sudo apt-get install ros-kinetic-navigation
  1. 编译包
$ cd ..
$ catkin_make
  1. 硬件连接,将rplidar通过usb与pc相连
  2. 查看usb的接口号
$ ls /dev/ttyUSB*

例如,返回 ttyusb0,要注意的是有的数据线只有充电功能,不能传输数据,如果查找不到应该首先更换数据线,查找到ttyusb0的话则设置为:

$ sudo chmod 666 /dev/ttyUSB0
  1. 打开两个新的终端,进行测试
$ roscore #第一个终端
$ cd ~/catkin_ws
$ source devel/setup.bash
$ roslaunch rplidar_ros view_rplidar.launch

Note:如果出现以下错误

[rplidarNode-1] process has died [pid 18250, exit code 255, cmd....

该问题出现的原因是 rplidar 没有获取数据造成的,很可能的原因是 USB 接口的编号错误,rplidar 应该接到 USB 0 上,可以通过 ls /dev/ttyUSB* 检查设备所链接的 USB 接口编号。
解决方法:拔下其他 USB 设备先将 rplidar 连接上去,再接其他设备,这样可以保证 rplidar 位于 USB0 接口上。

制作雷达驱动文件

首先要创建rplidar的串口别名。
确认 idVendor 和 idProduct,ID 后面的部分idVendor:idProduct

$ lsusb
# 输出结果包含:
Bus 001 Device 006: ID 10c4:ea60

新建 /etc/udev/rules.d/rplidar.rules 文件,内容如下:(别名为 rplidar,实际名称为:/dev/rplidar)

$ sudo gedit /etc/udev/rules.d/rplidar.rules
#复制以下内容
KERNEL=="ttyUSB*", ATTRS{
   idVendor}=="10c4", ATTRS{
   idProduct}=="ea60", MODE:="0666",
GROUP:="dialout", SYMLINK+="rplidar"

增加当前用户对串口的默认访问权限:

$ sudo usermod -a -G dialout 用户名

使 UDEV 配置生效:(使串口的默认访问权限生效,需要重启机器)

$ sudo service udev reload
$ sudo service udev restart

修改好串口名后,我们制作雷达驱动文。
复制 rplidar.launch 到 rplidar-laser.launch,并增加 TF 定义:

$ roscd turtlebot_navigation
$ mkdir -p laser/driver
$ sudo cp ~/turtlebot_ws/src/rplidar_ros/launch/rplidar.launch laser/driver/rplidar_laser.launch

打开 rplidar_laser.launch,并修改

$ rosed turtlebot_navigation rplidar_laser.launch

检查 frame_id 是否指定为 laser

<param name="frame_id" type="string" value="laser"/>

检查端口:

<param name="serial_port" type="string" value="/dev/rplidar"/>

设置好别名,或直接端口/dev/ttyUSB0。
增加TF:

<node pkg="tf" type="static_transform_publisher" name="base_to_laser" args="0.0 0.0 0.18 0 0.0
0.0 base_link laser 100"/>

修 改 为 args="0.0 0.0 0.18 0 0.0 0.0" 为 自 己 的 实 际 安 装 位 置 。 这六个值分别表示:x y z yaw pitch roll
这里我假设底盘的中心点为 0,雷达放在机器人托盘中心位置,X 为 0,高度为18CM,Z 为 0.18m。TF 的单位使用米的,测量单位是 CM
完整代码如下:

<launch>
<node name="
### 配置Gazebogmapping用于SLAM模拟 为了实现基于Gazebo环境下的gmapping算法配置,需确保安装并设置好ROS(Robot Operating System),因为大多数机器人仿真依赖于这一框架。对于ARM架构计算机而言,应先完成软件源的设定以便接受来自packages.ros.org上ARM镜像提供的软件包[^3]。 在准备阶段之后,具体操作涉及启动带有激光测距仪(Lidar)传感器模型的机器人实例以及相应的世界文件(world file),这可以通过编辑`.world`文件来定义场景中的静态物体机器人的初始位置。一旦完成了这些前置工作,在终端中通过如下命令加载特定的世界: ```bash roslaunch turtlebot_gazebo turtlebot_world.launch world_file:=<path_to_your_custom_world> ``` 接下来便是集成gmapping节点以执行同步定位与建图(SLAM)的任务。通常情况下,此过程由专门设计好的launch脚本简化处理;例如turtlebot系列提供了一个名为`amcl_demo.launch`的文件作为示范,但对于纯粹的gmapping应用,则应该寻找或构建一个更贴合需求的版本。下面给出了一种可能的方式去调用该功能模块: ```bash roslaunch turtlebot_gazebo gmapping_demo.launch custom_param_name:=value ``` 这里需要注意的是,实际路径规划服务质量取决于所选参数的选择,比如分辨率(resolution)、粒子数(particles)等,这些都是影响最终地图质量性能表现的重要因素之一[^1]。 最后一步是运行rviz可视化工具查看实时更新的地图数据其他调试信息: ```bash rosrun rviz rviz -d `rospack find turtlebot_rviz_launchers`/rviz/navigation.rviz ``` 上述指令假设读者已经熟悉基本的ROS概念及其常用命令行工具,并且拥有适当权限访问必要的硬件资源。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

RedGlass_lee

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值