配置
软件
- Ubuntu18.04
- ROS melodic
硬件
- turtlebot2
- rpldar A2
工作机和主机均由一台笔记本完成
一、安装
确保cartographer、cartographer_ros、rplidar_ros、cartographer_turtlebot、turtlebot_apps
二、制作雷达驱动启动文件
1、复制 rplidar.launch 到 rplidar-laser.launch
$ roscd turtlebot_navigation
$ mkdir -p laser/driver
$ sudo cp ~/catkin_ws/src/rplidar_ros/launch/rplidar.launch laser/driver/rplidar_laser.launch
2、打开 rplidar_laser.launch进行修改
检查 frame_id 是否指定为 laser:
<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"/>
3、增加 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 为自己的实际安装位置。详情查看,static_transform_publisher 部分
static_transform_publisher x y z qx qy qz qw frame_id child_frame_id period_in_ms
这里假设底盘的中心点为 0,雷达放在机器人托盘中心位置,X 为 0,高度为 18CM,Z 为 0.18m。
TF 的单位使用米的,测量单位是 CM。
rplidar_laser.launch修改后的完整代码如下:
<launch>
<node name="rplidarNode" pkg="rplidar_ros" type="rplidarNode" output="screen">
<param name="serial_port" type="string" value="/dev/ttyUSB0"/>
<param name="serial_baudrate" type="int" value="115200"/>
<param name="frame_id" type="string" value="laser"/>
<param name="inverted" type="bool" value="false"/>
<param name="angle_compensate" type="bool" value="true"/>
</node>
<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"/>
</launch>
三、使用cartographer_turtlebot构建地图
1、增加 turtlebot_lidar.launch
$ cd ~/catkin_ws/src/cartographer_turtlebot/cartographer_turtlebot/launch
$ touch turtlebot_lidar.launch (touch 创建空白文件)
$ vim turtlebot_lidar.launch
写入如下代码
<launch>
<arg name="configuration_basename"/>
<include file="$(find turtlebot_bringup)/launch/minimal.launch" />
<node name="cartographer_node" pkg="cartographer_ros"
type="cartographer_node" args="
-configuration_directory
$(find cartographer_turtlebot)/configuration_files
-configuration_basename $(arg configuration_basename)"
output="screen">
<remap from="scan" to="/scan" />
</node>
<node name="flat_world_imu_node" pkg="cartographer_turtlebot"
type="cartographer_flat_world_imu_node" output="screen">
<remap from="imu_in" to="/mobile_base/sensors/imu_data_raw" />
<remap from="imu_out" to="/imu" />
</node>
<node name="rviz" pkg="rviz" type="rviz" required="true"
args="-d $(find cartographer_turtlebot
)/configuration_files/demo_turtlebot.rviz" />
</launch>
2、新增启动文件 turtlebot_lidar_2d.launch
$ cd ~/catkin_ws/src/cartographer_turtlebot/cartographer_turtlebot/launch
$ touch turtlebot_lidar_2d.launch
$ vim turtlebot_lidar_2d.launch
写入如下代码
<launch>
<include file="$(find cartographer_turtlebot)/launch/turtlebot_lidar.launch">
<arg name="configuration_basename" value="turtlebot_urg_lidar_2d.lua" />
</include>
</launch>
3、重新编译
#重新编译
$ cd ~/catkin_ws
$ catkin_make_isolated --install --use-ninja
该处使用的url网络请求的数据。
四、运行
- 启动rplidarA2,打开一个新终端,输入:
$ roslaunch turtlebot_navigation rplidar_laser.launch
- 启动cartographer_turtlebot建地图,
再打开一个新终端,输入:
$ roslaunch cartographer_turtlebot turtlebot_lidar_2d.launch
- 使用键盘操作turtlebot2移动,又打开一个新终端
$ roslaunch turtlebot_teleop keyboard_teleop.launch
具体以及更多控制方式可参考:创客智造-Turtlebot 入门 - 遥控
五、保存地图
#新建map文件夹用于保存地图
$ mkdir -p ~/map
#启动存图,并将名为lidar_2d的地图文件保存在map文件夹
$ rosrun map_server map_saver -f ~/map/lidar_2d
#查看内容,包含lidar_2d.pgm lidar_2d.yaml
$ ls ~/map
六、运行结果
待调优
参考链接
- https://www.jianshu.com/p/cb87eab6535c
感谢原作者的分享~