SLAM建图入门(以X2L为例)

前言

本次的探索是从激光雷达拆开上电开始,到SLAM图建立的过程,中间涉及的专业性知识,比如订阅与发布之类的,可以在B站搜索ROS进行学习

正文

前提条件

Ubuntu20.04(不要使用21.04,这是个大坑)
YDLIDAR X2 激光雷达(包括转接器,usb转type-c线,以及雷达本体)
一个善于思考的大脑和一双手

资料引用`

https://ydlidar.cn/service_support/download.html
官方资料支持
https://blog.csdn.net/zhu751191958/category_7380985.html
感谢这位大佬的整理
https://blog.csdn.net/r1141207831/article/details/106327172
20.04版本的ROS(包括rviz)安装

在Ubuntu20.04中安装ROS Noetic(包括可视化的rviz)

在20.04版本下,最最最推荐安装Noetic(此版本为Ubuntu20.04使用)版本

1、添加 sources.list(设置你的电脑可以从 packages.ros.org 接收软件.)

sudo sh -c 'echo "deb http://packages.ros.org/ros/ubuntu $(lsb_release -sc) main" > /etc/apt/sources.list.d/ros-latest.list'

2、添加 keys

sudo apt-key adv --keyserver 'hkp://keyserver.ubuntu.com:80' --recv-key C1CF6E31E6BADE8868B172B4F42ED6FBAB17C654

3、安装,首先,确保你的Debian软件包索引是最新的:

sudo apt update

4、安装桌面完整版 : 包含ROS、rqtrviz、机器人通用库、2D/3D 模拟器、导航以及2D/3D感知

sudo apt install ros-noetic-desktop-full

5、您必须在使用ROS的每个bash终端中获取此脚本的源代码。

source /opt/ros/noetic/setup.bash

6、环境配置

echo "source /opt/ros/noetic/setup.bash" >> ~/.bashrc
source ~/.bashrc

至此已经在Ubuntu20.04的系统中完整安装ROS Noetic。

ROS的启动和使用

在一个控制台下使用

roscore

image.png

启动整个ROS服务,其子服务在本控制台不关闭的情况下重新打开新的控制台使用

rosrun rviz rviz

打开rviz
image.png
image.png
至此,我们需要的软件完成

在ubuntu20.04下安装X2L的SDK以及驱动包

注意,在这里,我们的根目录是cd ~目录

安装官方SDK

$ git clone https://github.com/YDLIDAR/YDLidar-SDK.git
$ cd YDLidar-SDK
$ cmake .
$ make
$ sudo make install

这里官方说是build,然而并没有这个文件夹,所以我修改了一下

ROS驱动包安装

依旧是在cd ~目录

1) 克隆github的ydlidar_ros_driver软件包:
$ git clone https://github.com/YDLIDAR/ydlidar_ros_driver.git ydlidar_ws/src/ydlidar_ros_driver

这里其实是创建了一个目录~/ydlidar_ws/src/这也是我们项目的目录(工作空间)

2) 构建ydlidar_ros_driver软件包:
$ cd ydlidar_ws
$ catkin_make
3) 软件包环境设置:(这个步骤后面也会设置)
$ source ./devel/setup.sh

注意:添加永久工作区环境变量。如果每次启动新的shell时ROS环境变量自动添加到您的bash会话中,将很方便:

$ echo "source ~/ydlidar_ws/devel/setup.bash" >> ~/.bashrc
$ source ~/.bashrc
4) 确认要确认已设置您的软件包路径,请回显该ROS_PACKAGE_PATH变量。
$ echo $ROS_PACKAGE_PATH

**您应该看到类似以下内容:/home/tony/ydlidar_ws/src:/opt/ros/melodic/share**

创建串行端口别名[可选]
$ chmod 0777 src/ydlidar_ros_driver/startup/*
$ sudo sh src/ydlidar_ros_driver/startup/initenv.sh
现在,我们运行一下

使用启动文件运行ydlidar_ros_driver,例子如下:

$ roslaunch ydlidar_ros_driver X2.launch

image.png
雷达被顺利驱动,我们现在将它展示到RVIZ上。
修改一处地方,文件默认以G4雷达为例,若使用其它型号雷达,需将lidar_view.launch文件中的lidar.launch改为对应的**.launch文件。(如使用X2雷达,需改成X2.launch)
image.png
之后

$ roslaunch ydlidar_ros_driver lidar_view.launch

image.png
注意!!!
1)在运行roslaunch ydlidar_ros_driver lidar_view.launch 这句代码时,应该另外打开控制台。
2)请确保在运行roslaunch ydlidar_ros_driver lidar_view.launch 之前roslaunch ydlidar_ros_driver X2.launch 已经运行,这句话的意思是,这两句指令不能同时运行,一次只能使用一个。

绘制SLAM图(使用hector_slam)建图

现在,我们的~/ydlidar_ws/src/以其其资源驱动应该已经存在了

在工作空间目录下下载gmapping与laser_scan_matcher以及依赖csm的源码包:
cd ~/ydlidar_ws/src
git clone https://github.com/tu-darmstadt-ros-pkg/hector_slam
cd ~/ydlidar_ws
catkin_make
修改发布内容,这部份涉及专业内容,需要了解ROS的发布
cd ~/ydlidar_ws/src/hector_slam/hector_slam_launch/launch/
sudo vim All_nodes.launch

编写以下代码

<?xml version="1.0"?>
<launch>
 <include file="$(find ydlidar_ros_driver)/launch/X2.launch" />
 <node pkg="tf" type="static_transform_publisher"
	 name="map_to_odom" args="0.0 0.0 0.0 0 0 0.0 /odom /base_link 40"/>

<node pkg="tf" type="static_transform_publisher" 
	name="base_frame_laser" args="0 0 0 0 0 0 /base_link /laser_frame 40" />
 <!--<node pkg="rviz" type="rviz" name="rviz"args="-d $(find hector_slam_launch)/rviz_cfg/mapping_demo.rviz"/>-->
  <include file="$(find hector_mapping)/launch/mapping_default.launch" />
  <node pkg="rviz" type="rviz" name="rviz" args="-d $(find ydlidar_ros_driver)/launch/lidar.rviz" />
  <include file="$(find hector_geotiff_launch)/launch/geotiff_mapper.launch" />
</launch>

$(find ydlidar_ros_driver)就是找激光雷达的驱动文件,
<include file="$(find ydlidar_ros_driver)/launch/X2.launch" />是用来找驱动文件的,
根据自己的情况来

修改mapping

进入hector_mapping/launch文件夹下

cd ~/ydlidar_ws/src/hector_slam/hector_mapping/launch

备份原文件为mapping_default_backups.launch

cp mapping_default.launch  ./mapping_default_backups.launch

打开mapping_default.launch
修改为

<?xml version="1.0"?>
<launch> 
  <arg name="tf_map_scanmatch_transform_frame_name" default="/scanmatcher_frame" /> 
  <arg name="base_frame" default="base_link" /> 
  <arg name="odom_frame" default="base_link" /> 
  <arg name="pub_map_odom_transform" default="true" /> 
  <arg name="scan_subscriber_queue_size" default="5" /> 
  <arg name="scan_topic" default="scan" /> 
  <arg name="map_size" default="2048" /> 
  <node pkg="hector_mapping" type="hector_mapping" name="hector_mapping" output="screen"> 
    <!-- Frame names --> 
    <param name="map_frame" value="map" /> 
    <param name="base_frame" value="$(arg base_frame)" /> 
    <param name="odom_frame" value="$(arg base_frame)" /> 
    <!-- Tf use --> 
    <param name="use_tf_scan_transformation" value="true" /> 
    <param name="use_tf_pose_start_estimate" value="false" /> 
    <param name="pub_map_odom_transform" value="$(arg pub_map_odom_transform)" /> 
    <!-- Map size / start point --> 
    <param name="map_resolution" value="0.050" /> 
    <param name="map_size" value="$(arg map_size)" /> 
    <param name="map_start_x" value="0.5" /> 
    <param name="map_start_y" value="0.5" /> 
    <param name="map_multi_res_levels" value="2" />     
    <!-- Map update parameters --> 
    <param name="update_factor_free" value="0.4" /> 
    <param name="update_factor_occupied" value="0.7" />     
    <param name="map_update_distance_thresh" value="0.2" /> 
    <param name="map_update_angle_thresh" value="0.9" /> 
    <param name="laser_z_min_value" value = "-1.0" /> 
    <param name="laser_z_max_value" value = "1.0" />     
    <!-- Advertising config --> 
    <param name="advertise_map_service" value="true" /> 
    <param name="scan_subscriber_queue_size" value="$(arg scan_subscriber_queue_size)" /> 
    <param name="scan_topic" value="$(arg scan_topic)" /> 
    <!-- Debug parameters --> 
    <!-- 
      <param name="output_timing" value="false" /> 
      <param name="pub_drawings" value="true" /> 
      <param name="pub_debug_output" value="true" /> 
    --> 
    <param name="tf_map_scanmatch_transform_frame_name" value="$(arg tf_map_scanmatch_transform_frame_name)" /> 
  </node> 
  <!--<node pkg="tf" type="static_transform_publisher" name="map_nav_broadcaster" args="0 0 0 0 0 0 map nav 100" />--> 
</launch>
重新编译
cd ~/ydlidar_ws
catkin_make
添加环境配置
source ~/ydlidar_ws/devel/setup.bash
运行

确保ROS核心开启
另起控制台
roslaunch hector_slam_launch All_nodes.launch
image.png

image.png

image.png

点击add,选中map
image.png

image.png
至此,阶段性数据完成。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值