Ros版本:ROS-Kinect
工作目录:~/carto_ws
1.RoboSense 16线雷达驱动安装
安装依赖项
sudo apt-get install libpcap-dev
下载源码到工作目录的src/文件夹下
cd ~/carto_ws/src
git clone https://github.com/RoboSense-LiDAR/ros_rslidar
修改文件权限
cd ~/carto_ws/src/ros_rslidar/rslidar_drvier
chmod 777 cfg/*
cd ~/carto_ws/src/ros_rslidar/rslidar_pointcloud
chmod 777 cfg/*
源码编译
cd ~/carto_ws
catkin_make
设置电脑的静态ip地址
默认 RS-LiDAR-16 固件情况下,配置电脑系统的静态 IP 地址为“192.168.1.102”,子网掩码为“255.255.255.0”,网关不需要配置。配置完成后,可以通过 ifconfig 命令查看静态 IP 是否生效。
我的方法很简单,直接显示器右上角选择有线连接,设置IPV4网络,如下图:
连接雷达电源和网线,连接网络
cd carto_ws
source devel/setup.bash
roslaunch rslidar_pointcloud rs_lidar_16.launch
可以在RVIZ中看到点云,注意要设置全局坐标系为rslidar。
2.Cartographer的安装
cartographer的安装主要是ceres、prtobuf和cartographer的安装,cartographer_ros是ROS的功能包,调用cartographer算法。
安装依赖:
sudo apt-get update
sudo apt-get install -y python-wstool python-rosdep ninja-build
安装Ceres solver
cd ~/carto_ws/document
git clone https://github.com/BlueWhaleRobot/ceres-solver.git
cd ceres-solver
mkdir build
cd build
cmake ..
make
sudo make install
安装Prtobuf 3.0
cd ~/carto_ws/document
git clone https://github.com/google/protobuf.git
cd protobuf
git checkout v3.6.1
mkdir build
cd build
cmake -DCMAKE_POSITION_INDEPENDENT_CODE=ON -DCMAKE_BUILD_TYPE=Release -Dprotobuf_BUILD_TESTS=OFF ../cmake
make
sudo make install
安装Cartographer
cd ~/carto_ws/document
git clone https://github.com/BlueWhaleRobot/cartographer.git
cd cartographer
mkdir build
cd build
cmake ..
make
sudo make install
安装cartographer_ros
cd ~/carto_ws/src #请修改路径到自己的ROS catkin工作空间
git clone https://github.com/BlueWhaleRobot/cartographer_ros.git
cd ..
catkin_make_isolated --install --use-ninja
测试
下载文件:https://www.bwbot.org/s/vQ2D9Z
然后运行。根据个人平台计算能力不同,完整运行时间一般为半个小时到1个小时之间
source devel_ioslated/setup.bash
roslaunch cartographer_ros offline_backpack_2d.launch bag_filenames:=${HOME}/Desktop/cartographer_paper_deutsches_museum.bag
##修改到自己保存的路径
提取建立的地图,结束测试
上面步骤会生成一个pbstream文件,用cartographer_ assets_writer可以转换成ROS使用的栅格地图。
roslaunch cartographer_ros assets_writer_ros_map.launch bag_filenames:=${HOME}/Desktop/cartographer_paper_deutsches_museum.bag pose_graph_filename:=${HOME}/Desktop/cartographer_paper_deutsches_museum.bag.pbstream
配置文件结构说明
工作目录为carto_ws,src同级目录除了编译产生的,其余都是安装依赖留下的文件夹。
Cartographer配置文件主要存在src/cartographer_ros/cartographer_ros下的urdf文件夹的myself_robot.urdf、configuration文件夹下的myself_rslidar_2(3)d.lua,myself_backpack_2(3)d_localization.lua以及rslidar_2(3)d.rviz、demo_2d.rviz配置文件、launch文件夹下的myself_rslidar_2(3)d.launch、myself_backpack_2(3)d_localization.launch。这里定位由于和后面导航rviz显示冲突,注释了rviz,纯定位时需要取消注释,显示调用rviz。
在3D建图还需要后面进行离线处理,需要assets_writer_myself_3d.launch,其中相关的配置文件为 assets_writer_myself_3d.lua。
利用bag包进行离线3D SLAM建图可以使用offline_myself_rslidar_3d.launch
配置文件详解
URDF文件的配置(这里2D和3D都是使用的同一个urdf):
<?xml version="1.0"?>
<robot name="myfirstrobot">
<!--设置颜色-->
<material name="orange">
<color rgba="1.0 0.5 0.2 1"/>
</material>
<material name="gray">
<color rgba="0.2 0.2 0.2 1"/>
</material>
<!--设置imu link,长方体,长宽高为0.06 0.04 0.02,这里的单位为米m-->
<link name="imu">
<visual>
<origin xyz="0.0 0.0 0.0"/>
<geometry>
<box size="0.06 0.04 0.02"/>
</geometry>
<material name="orange"/>
</visual>
</link>
<!--设置lidar link,圆柱,半径0.05,高为0.07,这里的单位为米m-->
<link name="laser">
<visual>
<origin xyz="0.0 0.0 0.0"/>
<geometry>
<cylinder length="0.07" radius="0.05"/>
</geometry>
<material name="gray"/>
</visual>
</link>
<!--设置base link,box 0.5x0.5x0.5,可根据实际机器人大小设置-->
<link name="base_link">
<visual>
<origin xyz="0 0 0"/>
<geometry>
<box size="0.5 0.5 0.5"/>
</geometry>
<material name="Cyan"/>
<color rgba="0 0.4 0.2 0.6"/>
</visual>
</link>
<!--设置imu和基座base的关系,imu和base没有偏移和旋转,默认为同一个坐标系,根据实际情况修改,注意子零件在父零件的坐标中的位姿表示,(右手坐标系,车头方向为x正向,车体左侧为y正向,天空为z正向)-->
<joint name="imu2base" type="fixed">
<parent link="base_link"/>
<child link="imu"/>
<origin xyz="0 0 0" rpy="0 0 0"/>
</joint>
<!--设置lidar和基座base的关系,在base的x方向上偏移0.25,z方向偏移0.5-->
<joint name="laser2base" type="fixed">
<parent link="base_link"/>
<child link="laser"/>
<origin xyz="0.25 0.0 0.5" rpy="0. 0. 0."/>
</joint>
</robot>
模型图
本文参照合工大实验室的帖子编写,在调试过程中发现了帖子代码有几处小错误,故修改记录。参考链接