思岚A1激光雷达hector_mapping建图与定位

2023-05-16

ROS中最常见的定位包还是gmapping,gmapping是需要里程计的数据也就是IMU或者视觉里程计的数据,但是目前还是仅仅在电脑中测试,并未实现树莓派与飞控通信,因此使用不用里程计数据的hector_mapping首先进行测试并熟悉ROS中建图所需要的基础技能。

首先下载好思岚A1激光雷达对应的ROS包,编译一下,然后启动rviz查看激光雷达获得的点云数据。

roslaunch rplidar_ros view_rplidar.launch

在这里插入图片描述
说明激光雷达正常工作。接着安装hector_mapping对应的包:

sudo apt-get install ros-kinetic-hector-slam

接着,写一个launch文件进行hector_mapping的设置与启动。

<launch>


<node pkg="hector_mapping" type="hector_mapping" name="hector_mapping" output="screen">
<!-- Frame names -->
<param name="pub_map_odom_transform" value="true"/>
<param name="map_frame" value="map" />
<param name="base_frame" value="base_link" />
<param name="odom_frame" value="base_link" />


<!-- Tf use -->
<param name="use_tf_scan_transformation" value="true"/>
<param name="use_tf_pose_start_estimate" value="false"/>


<!-- Map size / start point -->
<param name="map_resolution" value="0.05"/>
<param name="map_size" value="512"/>
<param name="map_start_x" value="0.5"/>
<param name="map_start_y" value="0.5" />
<param name="laser_z_min_value" value = "-1.0" />
<param name="laser_z_max_value" value = "1.0" />
<param name="map_multi_res_levels" value="2" />


<param name="map_pub_period" value="2" />
<param name="laser_min_dist" value="0.4" />
<param name="laser_max_dist" value="5.5" />
<param name="output_timing" value="false" />
<param name="pub_map_scanmatch_transform" value="true" />
<!--<param name="tf_map_scanmatch_transform_frame_name" value="scanmatcher_frame" />-->


<!-- 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.06" />


<!-- Advertising config --> 
<param name="advertise_map_service" value="true"/>
<param name="scan_subscriber_queue_size" value="5"/>
<param name="scan_topic" value="scan"/>
</node>


<node pkg="tf" type="static_transform_publisher" name="base_to_laser_broadcaster" args="0 0 0 0 0 0 /base_link /laser 100"/>


  <node pkg="rviz" type="rviz" name="rviz"
    args="-d $(find hector_slam_launch)/rviz_cfg/mapping_demo.rviz"/>


</launch>

解释一下代码。

<param name="pub_map_odom_transform" value="true"/>
<param name="map_frame" value="map" />
<param name="base_frame" value="base_link" />
<param name="odom_frame" value="base_link" />

第一句使得我们能获得map与odom的坐标系变换,这样才能根据地图获得激光雷达目前在地图中的位姿;然后由于没有里程计,因此odom_frame也设置为base_link就可以了。

<param name="map_resolution" value="0.05"/>
<param name="map_size" value="512"/>
<param name="map_start_x" value="0.5"/>
<param name="map_start_y" value="0.5" />

第一句设置图片分辨率,0.05m/pix;第二句为图片大小;三四句为初始点在图片中的位置,这里为中间。

<param name="advertise_map_service" value="true"/>
<param name="scan_subscriber_queue_size" value="5"/>
<param name="scan_topic" value="scan"/>

第一句设置发布地图的服务,第二句设置读取激光雷达数据的队列长度,第三句设置从哪个topic读取激光雷达是数据。

<node pkg="tf" type="static_transform_publisher" name="base_to_laser_broadcaster" args="0 0 0 0 0 0 /base_link /laser 100"/>

这里直接启动了一个tf中的static_transform_publisher,用来发布base_link与激光雷达的位姿关系,前三个0代表相对位移,后三个0代表转动的欧拉角,然后写出两个相对的坐标系名称,最后一个100是100ms发布一次。

static_transform_publisher具体写法格式如下,第一种为欧拉角形式:
static_transform_publisher x y z yaw pitch roll frame_id child_frame_id period_in_ms
或者四元数形式:
static_transform_publisher x y z qx qy qz qw frame_id child_frame_id period_in_ms

最后就是启动rviz了。我们来看一下绕房子一圈的效果:
在这里插入图片描述
效果还可以,因为是举着的很难保证高度一致,因此同一个地方走回来的时候可能会有偏差,也就是散出去的那些地方。
我们把这个地图保存下来:
先安装map_server包:

sudo apt-get install ros-kinetic-map-server

然后保存:

rosrun map_server map_saver -f ~/my_map

然后我们用下列tf命令行看一下现在坐标系的关系:

rosrun tf view_frames
evince frames.pdf

在这里插入图片描述
我们来看一下hector_mapping运行时的节点和话题关系:

rqt-graph

在这里插入图片描述
我们可以看到hector_mapping订阅了激光雷达节点发布的/scan话题和base_link与laser的tf,发布了base_link与map的tf,还发布了/map话题,这是一个珊格地图类型的msg,还有一个姿态,这里的姿态并不是base_link相对于map的姿态,因此我们想要获取base_link的姿态,需要手动获取对应的tf:

rosrun tf tf_echo /map /base_link

在这里插入图片描述
Translation是平移量,后面分别为四元数与欧拉角形式的转动量。致此,我们完成了用hector_mapping完成建图并且获取当前激光雷达在图坐标系中的位姿信息。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

思岚A1激光雷达hector_mapping建图与定位 的相关文章

随机推荐

  • 记录一下jetson xaiver 连接51串口

    记录一下jetson xaiver 连接51串口 引脚说明 jetson方面 xff1a UART1 TX pin8 UART1 RX pin10 挂载节点 xff1a dev ttyTHS051方面 xff1a UART1 TX GPIO
  • Linux 动态库 undefined symbol 原因定位与解决方法

    在使用动态库开发部署时 xff0c 遇到最多的问题可能就是 undefined symbol 了 xff0c 导致这个出现这个问题的原因有多种多样 xff0c 快速找到原因 xff0c 采用对应的方法解决是本文写作的目的 可能的原因 依赖库
  • 【pycharm】关于pycharm-代码运行后-控制台的输出-不完整被截断的处理

    https www likecs com show 305675529 html sc 61 300 来源 xff1a https www cnblogs com 5201351 p 15557690 html 设置配置文件修改buffer
  • webpack One CLI for webpack must be installed. These are recommended choices, delivered as separate

    场景 安装webpack的时候 遇到的情况 直接按照提示安装 提示Module webpack cli 不存在 One CLI for webpack must be installed These are recommended choi
  • 使用巨控GRM530模块远程通信连接TIA WINCC(异地组网)SIMATIC NET与S7-200 SMART 集成以太网口OPC 通信

    使用巨控GRM530模块远程通信连接TIA WINCC xff08 异地组网 xff09 SIMATIC NET与S7 200 SMART 集成以太网口OPC 通信 硬件 xff1a S7 200 SMART SR40PC 机 集成以太网卡
  • 01_使用cMake编译目标文件与库文件

    1 将单个源文件构建为可执行文件 1 1 准备工作 假设有以下源代码 xff0c 希望使用cMake将其构建为一个可执行文件 示例源码如下 span class token macro property span class token d
  • ROS image_transport及cv_bridge

    ROS image transport 压缩 此外上面提到过FPS这个参数 xff0c 自然少不了介绍图像的压缩 一般使用的时候直接会使用没有压缩的图像 xff0c 但是在需要传输的时候 xff0c 这一些大图像非常占用带宽 xff0c 所
  • NEMA格式

    NMEA標準格式 大部份的GPS receiver都具被有美國國家海洋電子學會 National Marine Electronics Association xff0c NMEA 所制定的標準規格 xff0c 其制定了所有航海電子儀器間的
  • 在 JETSON 上配置 CAN 总线收发并基于Node.js编写应用DEMO

    概述 CAN 总线 是汽车电子行业常用的通信协议 Nvidia 推出的边缘 AI 推理设备 JETSON TX2 AGX Xavier 两款开发板支持 CAN 总线通信 这里以 AGX Xavier 开发者套件 为例 介绍如何配置实现基本的
  • C++开发UDP通信:使用socket创建UDP服务器端和客户端

    我的主页视频讲解 博客不经常在线 xff0c 私信请到西瓜视频搜索 智能之心 xff0c 以智能之心赴智能之梦 UDP通信步骤 引用UDP通信步骤 一 UDP套接字服务端架构步骤 1 xff0e 初始化套接字环境WSAStartup 2 x
  • D6 PRO充电器使用方法

    充电方式两种 xff1a 接220V供电 xff08 推荐 xff09 接XT60电池供电 接线 xff1a 大头XT60接口平衡头6S 4S 3S 2S接口 xff0c 123456 黑线从右侧减号一侧开始接 xff0c 红线在左侧数字一
  • uORB和MAVLink通讯例程

    uORB uORB 是一种异步 publish subscribe 的消息传递 API xff0c 用于进程或者线程间通信 IPC 添加新的Topic xff08 主题 xff09 在msg 目录下创建一个新的 msg文件 xff0c 并将
  • 往android studio原生java工程中添加jni的过程

    一 配置步骤 xff1a 第一步是在 src main 中建立一个文件夹cpp 第二步是在文件夹中建立两个文件一个是native lib cpp和CMakeLists txt 第三步在上述两文件中添加如下内容 xff1a span clas
  • C++迭代器

    一 什么是迭代器 xff1a C 43 43 中 xff0c 迭代器就是一个类似于指针的对象 xff0c 它能够用来遍历C 43 43 标准模板库容器中的部分或全部元素 xff0c 每个迭代器对象代表容器中的确定的地址 以下面的string
  • webpack vue-loader was used without the corresponding plugin. Make sure to include VueLoaderPlugin

    场景 webpack2 4 集成vue loader 64 15 2 4报错 vue loader was used without the corresponding plugin Make sure to include VueLoad
  • slamugv使用说明--5.电机编码测速

    电机编码器测速 编码器 xff08 encoder xff09 是将信号 xff08 如比特流 xff09 或数据进行编制 转换为可用以通讯 传输和存储的信号形式的设备 编码器把角位移或直线位移转换成电信号 编码器分类及原理 xff1a 按
  • STM32相关名词解释

    L N NO NC COM名词解释 L是line的意思 xff0c 相线 xff0c 俗称火线 xff1b N是neutral xff0c 中性线的意思 xff0c 在两相线中也称为零线 NO xff1a 也就是常开 xff0c 即在未通电
  • 三轴加速度计、三轴陀螺仪、三轴磁力计

    1 今天要做的事情 列出 xff1a 可能影响因素 xff0c 对影响因素做实验 如何设置对比实验 xff1f 如何设置对比实验 xff1f 三轴加速度计 1 加速度计的原理 三轴加速度 xff1a 输出的速度是去掉重力后的整体加速度 xf
  • zed相机使用

    zed立体相机 43 pyhon 43 opencv zed相机网上资料都是关于安装的教程 xff0c 后续的一些使用介绍的不是很多 xff0c 因为官方文档已经介绍的很详细 xff0c 这里介绍一下自己的学习过程 xff0c 以备查阅 x
  • 思岚A1激光雷达hector_mapping建图与定位

    ROS中最常见的定位包还是gmapping xff0c gmapping是需要里程计的数据也就是IMU或者视觉里程计的数据 xff0c 但是目前还是仅仅在电脑中测试 xff0c 并未实现树莓派与飞控通信 xff0c 因此使用不用里程计数据的