Turtlebot建图、定位与导航实验总结

整体参考:自主移动机器人实验课

1 概述

硬件:Turtlebot3底盘 + 思岚rplidar A2
环境:Ubuntu 18.04 + ROS Melodic
流程:gmapping建图 + 蒙特卡洛定位 + A*自主导航

2 准备工作

2.1 解决catkin_make报错的问题

常见错误合集1:https://www.codenong.com/cs106660540
常见错误合集2:https://www.twblogs.net/a/5e80c790bd9eee2116866b77

ecl报错:https://blog.csdn.net/baidu_36645485/article/details/79020029(需要改ROS版本为melodic)

missing spnav.h:https://github.com/ros-drivers/joystick_drivers/issues/79

fatal error: bluetooth/bluetooth.h: No such file or directory:https://blog.csdn.net/p942005405/article/details/86559966

2.2 解决Turtlebot启动报错的问题

运行命令

roslaunch turtlebot_bringup minimal.launch

报错

[ WARN] [1426225321.364907925]: Kobuki : device does not (yet) available, is the usb connected?.
[ WARN] [1426225321.615097034]: Kobuki : no data stream, is kobuki turned on?

运行下面命令,发现/dev/kobuki设备不存在。

ls -n /dev | grep kobuki

解决方法:

sudo apt-get install ros-melodic-kobuki-ftdi
rosrun kobuki_ftdi create_udev_rules

参考:https://blog.csdn.net/EAIBOT/article/details/51212551

若报有关battery的错误,可运行如下指令解决

sudo apt-get install ros-melodic-laptop-battery-monitor

参考:https://blog.csdn.net/qq_41808841/article/details/113458565

2.3 解决rplidar端口号不固定的问题

由于ubuntu USB设备号为从零开始依次累加,所以多个设备每次开机后设备号不固定,如果launch文件以端口号(如ttyUSB0)索引rplidar,可能出现问题。
解决方法:
列出所有USB设备:

lsusb

在这里插入图片描述

ID 10c4:ea60 表示USB设备的ID,这个ID由芯片制造商设置,可以唯一表示该设备。因此,我们只需索引这个固定的ID。

sudo gedit /etc/udev/rules.d/rapliar.rules

在打开的文件中添加以下内容

KERNEL=="ttyUSB*", ATTRS{idVendor}=="10c4", ATTRS{idProduct}=="ea60", MODE:="0666", GROUP:="dialout",  SYMLINK+="rplidar"

这样我们就将"rplidar"与ID 10c4:ea60建立了联系,在launch等文件中,我们就不需要以/dev/ttyUSB0索引rplidar,而是以/dev/rplidar索引它。
具体地,在turtlebot_ws/src/rplidar_ros/launch/rplidar.launch,以及turtlebot_ws/src/rplidar_ros/src/node.cpp中将/dev/ttyUSB0改为/dev/rplidar
这样无论rplidar是USB0还是USB1,程序都可以找到它。
查看端口号命令(理论上无需用到):

ls -l /dev|grep ttyUSB

参考:
https://blog.csdn.net/lj164567487/article/details/120327666?spm=1001.2014.3001.5501
https://www.it610.com/article/1294851321765109760.htm

3 实验过程

3.1 Gmapping建图

环境配置:https://blog.csdn.net/lj164567487/article/details/120331552

开启turtlebot底盘:

roslaunch turtlebot_bringup minimal.launch

启动gmapping并开启rviz:

roslaunch turtlebot_navigation rplidar_gmapping_demo.launch
rviz

在rviz左下角,点击add,添加map,在左侧栏中选择不同的Topic可呈现不同样式的地图,如普通地图,代价地图(cost map)等。

启动键盘控制:

roslaunch turtlebot_teleop keyboard_teleop.launch

控制机器人移动,完成建图:

在这里插入图片描述

保存建好的地图:

rosrun map_server map_saver -f /home/yicheng/turtlebot_ws/map/map2

注意:建图误差较大,表现在直角弯很可能无法建成直角。原因:(1) 算法性能的局限性,(2) Turtlebot底盘的里程计有一定误差。

要提高建图精度,可以尽量减小机器人移动速度。

3.2 蒙特卡洛定位

环境配置:https://blog.csdn.net/lj164567487/article/details/120543517

注意,蒙特卡洛定位调用的是第三步Gamppinp创建的地图,launch文件指定了这个地图文件的路径,应确保turtlebot_ws/src/turtlebot_apps/turtlebot_navigation/launch/rplidar_amcl_demo.launch文件中地图的路径与上一步保存的地图的路径一致。

关闭rviz窗口,关闭rplidar_gmapping_demo.launch所在的进程,然后运行

roslaunch turtlebot_navigation rplidar_amcl_demo.launch
roslaunch turtlebot_rviz_launchers view_navigation.launch

在rviz中,点击2D Pose Estimate,将向量的位姿设置为机器人的当前位姿。使用键盘控制机器人移动,可见位姿估计的粒子群逐渐收敛。

在这里插入图片描述

如果人为搬动机器人到新位置,要重新定位,只需重新运行rplidar_amcl_demo.launch

3.3 A*导航

注意:在进行A*自主导航时,要关闭键盘控制节点。
在rviz中点击2D Nav Goal设定目标位姿,机器人将自动规划出轨迹并移动到目标位置。

  • 4
    点赞
  • 32
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值