首页 > 其他分享 >4- LIO SAM+ Move_base 实现自主导航

4- LIO SAM+ Move_base 实现自主导航

时间:2024-10-24 10:10:07浏览次数:1  
标签:move Move SAM LIO octomap base https ros

在前面的工作中,我们成功使用了gmapping +move_base实现自主导航,并且成功在仿真环境中运行了lio sam,今天打算结合,采用LIO-SAM建图和定位,move_base实现导航。大致内容如下:

仿真环境准备

在之前的内容中,已经介绍了仿真实验环境怎么搭建,具体可以参考链接:
https://www.cnblogs.com/binbin2002/p/18296477
https://www.cnblogs.com/binbin2002/p/18326867

LIO SAM安装配置

LIO SAM作为一个开源的紧耦合的SLAM算法,网上教程太多了,这里贴几个个人觉得写的比较好的链接:
https://py1995.blog.csdn.net/article/details/137286327?spm=1001.2014.3001.5502
https://blog.csdn.net/weixin_40653140/article/details/137235669?spm=1001.2014.3001.5506

安装Octomap Server

https://blog.csdn.net/qq_41694024/article/details/134703116?spm=1001.2014.3001.5506

Octomap的安装

采用命令的形式安装octomap server功能包

sudo apt install ros-melodic-octomap-msgs ros-melodic-octomap-ros ros-melodic-octomap-rviz-plugins ros-melodic-octomap-server

img

Octomap节点的使用,构建octomap和occupied map

我们新建一个launch文件,在launch文件中输入以下内容:

<launch>
    <node pkg="octomap_server" type="octomap_server_node" name="octomap_server">
    <!-- 地图分辨率 -->
	<param name="resolution" value="0.50" />
		
	<!-- fixed map frame (set to 'map' if SLAM or localization running!)  -->
    <!-- 静态全局地图的 frame_id,但在增量式构建地图时,需要提供输入的点云帧和静态全局帧之间的 TF 变换 -->
	<param name="frame_id" type="string" value="map" />
		
	<!-- maximum range to integrate (speedup!) -->
    <!-- 传感器最大感知范围 -->
	<param name="sensor_model/max_range" value="50.0" />
    <param name="latch" value="true" />


  
     <!--max/min height for occupancy map, should be in meters-->
     <!-- 保留的z轴范围内的点 -->
    <param name="pointcloud_max_z" value="5" />
    <param name="pointcloud_min_z" value="-1.5" />

    <!-- 机器人坐标系 base_link,滤除地面需要该 frame -->
    <param name = "base_frame_id" type = "string" value = "base_link" /> 
      <!-- filter ground plane, distance value should be big!  -->
	<param name = "filter_ground" type = "bool" value = "true" /> 

     
    <!-- 要检测为平面的 Z 轴阈值 value 值 通常大于分割值  -->
	<param name = "ground_filter/plane_distance" type = "double" value = "0.4" /> 

    <!-- 分割地面的 Z 轴阈值 value 值 ,小于该阈值被认为是平面 -->
    <param name = "ground_filter/distance" type = "double" value = "0.3" /> 
    <!-- 分割地面的角度阈值 value 值,小于该阈值的平面被认为是地面-->
    <param name="ground_filter/angle" value="0.10" />


		<!-- data source to integrate (PointCloud2) -->
	<remap from="cloud_in" to="/lio_sam/deskew/cloud_deskewed" />
		<!-- <remap from="cloud_in" to="voxel_grid/output" /> -->
	
	</node>
</launch>

这里面各个参数的含义解释:

	resolution:分辨率或精度,越小精度越高计算需要资源越庞大

	frame_id:世界坐标系的话题,即原点坐标系

	sensor_model/max_range:扫描的最大距离

	cloud_in:点云话题

	pointcloud_max_z:最大的Z扫描值

	pointcloud_min_z:最小的Z扫描值(激光雷达和垂直平面有一定距离)

当然还有地面剔除相关参数:

	filter_ground:是否采用地面去除
	
	ground_filter/plane_distance:要检测为平面的 Z 轴阈值 value 值 通常大于平面阈值
	
	ground_filter/distance:要检测为平面的z轴阈值,低于这个值被认为是平面
	
	ground_filter/angle:分割地面的的角度阈值,低于这个值的平面被认为是地面

img

RVIZ显示和地图保存

发布以后,使用rostopic list可以看到octomap相关话题,也可以在rviz中选择话题名称显示。

源码编译使用

当然还可以使用源码编译的方法完成上述:相关操作参考我的github链接:https://github.com/binbin2002/octomap_with_slam

安装Pointcloud_to_Laserscan

sudo apt-get install ros-melodic-tf2-sensor-msgs

在launch文件中添加以下内容:

<?xml version="1.0"?>

<launch>
    <!-- run pointcloud_to_laserscan node -->
    <node pkg="pointcloud_to_laserscan" type="pointcloud_to_laserscan_node" name="pointcloud_to_laserscan">
						 <!-- 重映射订阅的cloud_in和发布的scan话题 -->
         <remap from="cloud_in" to="/non_ground_point"/>
    				<remap from="scan" to="base_scan"/>
					
       <rosparam>
        target_frame: base_link # Leave disabled to output scan in pointcloud frame
        transform_tolerance: 0.01
        min_height: -0.2
        max_height: 1.0

        angle_min: -3.1415926 # -M_PI
        angle_max: 3.1415926 # M_PI
        angle_increment: 0.003 # 0.17degree
        scan_time: 0.1
        range_min: 1.0
        range_max: 50
        use_inf: true
        inf_epsilon: 1.0

        # Concurrency level, affects number of pointclouds queued for processing and number of threads used
        # 0 : Detect number of cores
        # 1 : Single threaded
        # 2->inf : Parallelism level
        concurrency_level: 1
    </rosparam>

    </node>

</launch>

Move_base配置

move_base在前面的文章中已经详细介绍了,可以参考:https://www.cnblogs.com/binbin2002/p/18296477

这里只对关键内容进行进一步说明,采用官方给定的move_base文档:http://wiki.ros.org/move_base,
Move_base的核心图来讲解

img

图中,白色部分是move_base必须有的且已经实现的部分,灰色是我们可以提供的,蓝色是必须需要的。
通过查看move_base订阅和发布的topic来看,实践上我们只需要关注以下几个move_base关键的topic就行

  • /odom :Move_base订阅的里程计信息,
  • /map :Move_base订阅的地图服务信息
  • /scan:Move_base订阅的激光数据信息

在lio sam中,/odom需要remap为/lio_sam/mapping/odometry, /scan需要remap成pointcloud_to_laserscan发布的/base_scan /map则不需要变,对应的整体参数如下:参数用默认的yaml文件即可,也可根据需要自行调整。

</node>
    <node pkg="move_base" type="move_base" respawn="false" name="move_base" output="screen">
        <remap from="odom" to="/lio_sam/mapping/odometry"/>
        <remap from="scan" to="/base_scan"/>
        <remap from="cmd_vel" to="robot1/cmd_vel"/>

        <rosparam file="$(find gazebo_pioneer3at)/param/costmap_common_params.yaml" command="load" ns="global_costmap" />
        <rosparam file="$(find gazebo_pioneer3at)/param/costmap_common_params.yaml" command="load" ns="local_costmap" />
        <rosparam file="$(find gazebo_pioneer3at)/param/local_costmap_params.yaml" command="load" />
        <rosparam file="$(find gazebo_pioneer3at)/param/global_costmap_params.yaml" command="load" />
        <rosparam file="$(find gazebo_pioneer3at)/param/planner.yaml" command="load" />
        <param name="base_global_planner" value="global_planner/GlobalPlanner" />
        <param name="planner_frequency" value="1.0" />
        <param name="planner_patience" value="5.0" />
        <param name="base_local_planner" value="base_local_planner/TrajectoryPlannerROS" />
        <param name="controller_frequency" value="5.0" />
        <param name="controller_patience" value="15.0" />
        <param name="clearing_rotation_allowed" value="true" />
    </node>
		<!--  需要用navigation对应的rviz,默认rviz不能发布目标点,ps:不知道问题在哪  -->
		<node pkg="rviz" type="rviz" name="octomap_rviz" args="-d $(find gmapping)/navigation.rviz" />
		

img

运行效果截图

实验仿真环境
img

运行效果图(左 lio sam效果图 右 导航地图)
img

标签:move,Move,SAM,LIO,octomap,base,https,ros
From: https://www.cnblogs.com/binbin2002/p/18499013

相关文章

  • 征程 6 环视快启 sample
    01功能概述环视4V解串器直接接到main域,mcu访问main域i2c、gpio、lpwm,对camerasensor、serdes以及lpwm进行初始化,完成环视的快速出图。mcu启动后,会在mcutask中调用Camera_Init接口,完成camerasensor、serdes以及lpwm的配置,并使能数据流,数据会通过加串器......
  • Helio World!
    串台了,这不是“自豪地使用Wordpress”,不过我更多的还是想纪念一下我的第一个放了一堆打油诗的Wordpress博客。(尽管最后还是死了)鉴于琵琶行论坛目前上不去了,而且我也没想好该把我写的一些东西该贴到哪里,最后我还是决定在博客园安家落户了,顺便也去做一些前人做过的事情。你可能......
  • 从 GPU 到 SambaNova,spatial computing 的数据流解决方案
    很早前看到知乎的这篇回答[1],技术栈太浅薄不能理解spatialcomputing的核心问题,而今年groq、tensotorrent、SambaNova各种新鲜技术范式出现层出不穷,把我的胃口吊得高高的,遂调研spatialcomputing。DataflowAccelerator(i.e.Graph-basedAccelerator)扯到spatialcomput......
  • 强推!首个全面涵盖LiDAR里程计算法的综述(一):LiDAR-Only与LIO算法综述
    该篇文章是对LiDAR里程计(Odometry)的最新进展和挑战进行的全面综述。是首个全面涵盖LiDAR里程计各类方法的综述,填补了之前研究的空白。为了让读者深入了解该项技术,笔者结合自身的一些经验和理解,将拆分成三个部分为大家详细解读,分别为:LiDAR-Only与LIO算法综述(一),多激光与多传感器......
  • 如何高效彻底卸载Windows下的Office套件:使用o15-ctrremove软件
    在处理Windows系统中的Office套件时,我们可能会遇到一些棘手的问题,尤其是当卸载或重装过程中出现错误,导致无法继续进行下一步操作时。幸运的是,有一个名为o15-ctrremove的软件可以帮助我们解决这些问题。卸载Office套件的步骤首先,你需要进入Windows的控制面板,找到“程序和功......
  • kamailio+rtpengine安装部署
    融合通信平台安装部署1、环境说明序号IP系统版本cpu内存硬盘1172.27.54.65Ubuntu22.04.4LTS8c16G200G2172.27.54.66Ubuntu22.04.4LTS8c16G200G安装中文语言包,并修改字符集为中文aptinstalllanguage-pack-zh-han*-yupdate-localeLANG=zh_CN.UT......
  • lintsampler:高效从任意概率分布生成随机样本的新方法
    在实际应用中,我们经常需要从给定的概率密度函数(PDF)中抽取随机样本。这种需求在多个领域都很常见,例如:估计统计量进行蒙特卡洛模拟生成粒子系统用于物理仿真对于标准概率分布,如均匀分布或高斯分布(正态分布),numpy和scipy生态系统提供了现成的解决方案。通过numpy.rand......
  • prometheus 报错 Error on ingesting samples that are too old or are too far into
    level=warnts=2021-08-16T03:20:04.960Zcaller=scrape.go:1507component="scrapemanager"scrape_pool=mtailtarget=http://18.167.146.20:3903/metricsmsg="Erroroningestingsamplesthataretoooldoraretoofarintothefuture"num_dro......
  • 知名服务-Samba服务漏东(CVE-2017-7494)
    Samba服务漏动原理说明CVE-2017-7494是一个Samba服务中的严重远程代码执行漏动,影响了Samba3.5.0至4.6.4/4.5.10/4.4.14之间未打补丁的版本。该漏动允许远程公鸡者在受影响的Samba服务器上执行任意代码,只要他们能够向SMB服务写入文件。公鸡者可以通过向Samba服务器上传一个特制的共......
  • 基于BP神经网络的CoSaMP信道估计算法matlab性能仿真,对比LS,OMP,MOMP,CoSaMP
    1.算法仿真效果matlab2022a仿真结果如下(完整代码运行后无水印):   仿真操作步骤可参考程序配套的操作视频。 2.算法涉及理论知识概要        LS估计法实现方式较为简单,其估计过程没有考虑实际信道的噪声因素。因此,特别当毫米波MIMO信道干扰较大时,其估计性能较......