基于Rplidar二维雷达使用Hector_SLAM算法在ROS中建图

2023-05-16

文章目录

  • 前言
  • 一、ROS分布式通信(配置多机通信)
    • 1.简介
    • 2.步骤
      • 2.1 准备
      • 2.2 修改配置文件
      • 2.3配置主机IP
      • 2.4配置从机IP
  • 二、RPlidar的使用教程
    • 1.创建环境
    • 2.下载激光雷达的功能包
    • 3.编译
    • 4.启动雷达
  • 三、Hector的使用教程
    • 1.下载hector功能包
    • 2.编译
    • 3.添加launch文件
    • 4.分别启动雷达和hector的launch文件
  • 总结


前言

最近在学习Ros和激光SLam,反复折腾了一段时间,有了一点小结果,于是想分享一点经验。
本文是基于二维雷达Rplidar,使用Hector_slam算法在Ros中建图,同时在PC和Nvidia Jetson Xavier配置了多机通信, 我的电脑PC当从机,Nvidia Jetson Xavier当主机来跑雷达。
ubuntu的版本为20.04


一、ROS分布式通信(配置多机通信)

1.简介

ROS是一个分布式计算环境。一个运行中的ROS系统可以包含分布在多台计算机上多个节点。根据系统的配置方式,任何节点可能随时需要与任何其他节点进行通信。因此,ROS对网络配置有某些要求:
1.所有端口上的所有机器之间必须有完整的双向连接。
2. 每台计算机必须通过所有其他计算机都可以解析的名称来公告自己

2.步骤

2.1 准备

先要保证不同计算机处于同一网络中,最好分别设置固定IP,如果为虚拟机,需要将网络适配器改为桥接模式;
可以用PC或者Nvidia Jetson Xavier来开热点或者是连网线,让两台设备处于同一网络下,然后需要将两台设备的IP地址处于同一网段。
如果是用分享热点的话不需要修改IP地址,两台设备的IP地址会自动在同一网段,而采用网线连接的方法则需要手动设置IP地址。

ThinkPad-E480:~$ ifconfig //查看IP地址

我是用PC来热点给Nvidia连接,PC的IP地址如下所示:

wlp5s0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.1.111  netmask 255.255.255.0  broadcast 192.168.1.255
        inet6 fe80::6cab:8a8f:7d7c:c5d9  prefixlen 64  scopeid 0x20<link>
        ether 3c:91:80:5c:01:db  txqueuelen 1000  (以太网)
        RX packets 132659  bytes 106070983 (106.0 MB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 85589  bytes 64277025 (64.2 MB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

在Nvidia上面也可以用同样的方法,我的Nvidia的IP地址为:192.168.1.144
于是两个设备就在同一个网段中。

2.2 修改配置文件

分别修改不同计算机的 /etc/hosts 文件,在该文件中加入对方的IP地址和计算机名:

ThinkPad-E480:~$ cd /etc
ThinkPad-E480:/etc$ sudo gedit hosts

主机端:
从机的IP 从机计算机名

从机端:
主机的IP 主机计算机名

设置完毕后,可以通过 ping 命令测试网络通信是否正常。



    IP地址查看名: ifconfig

    计算机名称查看: hostname

2.3配置主机IP

配置主机IP,打开ubuntu中的文件,按住键盘上的ctrl+h,就会在文件中显示隐藏文件 .bashrc
在这里插入图片描述打开.bashrc文件追加

export ROS_MASTER_URI=http://主机IP:11311
export ROS_HOSTNAME=主机IP

然后在终端中刷新环境

ThinkPad-E480:~$ source ~/.bashrc 

2.4配置从机IP

也是和配置主机同样的方法,打开.bashrc文件追加内容,但是从机可以有多台,每台都做如下设置:
打开.bashrc 追加

export ROS_MASTER_URI=http://主机IP:11311
export ROS_HOSTNAME=从机IP

然后在终端中刷新环境

ThinkPad-E480:~$ source ~/.bashrc 

这样就完成了多机通信的配置,有一个地方需要注意 roscore必须由主机来启动

二、RPlidar的使用教程

关于RPlidar激光雷达,是有现成的功能包可以调用。

1.创建环境

打开一个终端,创建ros工作空间

mkdir -p ~/turtlebot_ws/src
cd ~/turtlebot_ws/src

2.下载激光雷达的功能包

再之前进入的turtlebot_ws/src目录下,输入如下命令

git clone https://github.com/ncnynl/rplidar_ros.git

rplidar的ros功能包就会出现在src目录下。

3.编译

回到turtlebot_ws目录下

cd ~/turtlebot_ws

编译工作空间

catkin_make

当编译结束后,在 turtlebot_ws 目录下就会出现 devel 和 build 两个文件夹
在这里插入图片描述

4.启动雷达

首先将雷达的USB连接到Nvidia上,并查看使用那个USB口,在给予相应USB口权限。

ls -l /dev |grep ttyUSB //查看USB口
sudo chmod 777 /dev/ttyUSB0 // 一般为USB0

回到turtlebot_ws 目录下,刷新环境变量

source /devel/setup.bash

启动launch文件即可运行雷达并打开Rviz查看

$ roslaunch rplidar_ros view_rplidar.launch

三、Hector的使用教程

hector在ROS中也有集成好的功能包,直接调用即可。

1.下载hector功能包

进入turtlebot_ws /src目录下,下载hector功能包

 cd  /turtlebot_ws/src
 git clone https://github.com/tu-darmstadt-ros-pkg/hector_slam.git

在turtlebot_ws /src目录下,就会有两个功能包,一个是激光雷达,一个是hector。
在这里插入图片描述

2.编译

回到turtlebot_ws 目录下,编译。

cd ..
catkin_make

同样地,查询雷达是连接的那个USB口,给予相应USB口权限

ls -l /dev |grep ttyUSB //查看USB口
sudo chmod 777 /dev/ttyUSB0 // 一般为USB0

3.添加launch文件

还需要给hector添加launch文件,进入turtlebot_ws / src / rplidar_ros / launch 文件夹内,添加一个launch文件

cd 	turtlebot_ws/src/ rplidar_ros/launch
touch hector_mapping_demo.launch

在hector_mapping_demo.launch内添加如下内容:

<launch><node pkg="hector_mapping" type="hector_mapping" name="hector_mapping" output="screen"><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" /><param name="use_tf_scan_transformation" value="true"/><param name="use_tf_pose_start_estimate" value="false"/><param name="map_resolution" value="0.05"/><param name="map_size" value="2048"/><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="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" /><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>

回到 turtlebot_ws 目录下,刷新环境变量

source /turtlebot_ws/devel/setup.bash

4.分别启动雷达和hector的launch文件

在主机(nvidia)上启动雷达的launch文件

roslaunch rplidar_ros rplidar.launch

在从机上启动hector的launch文件

roslaunch rplidar_ros rplidar.launch

就可以在从机的Rviz上看到雷达建图
在这里插入图片描述


总结

在使用rplidar基于hector_slam的建图过程中,都有已经写好的功能包可以调用,无需重复造轮子。
在rqt_graph中可以清楚的看到,雷达的节点(rplidarnode)在发布 /scan 话题,hector的节点(hector_mapping)会订阅 /scan 话题,这也就是把雷达的数据通过rplidar功能包发给hector功能包,进行运算后来建图
在这里插入图片描述

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

基于Rplidar二维雷达使用Hector_SLAM算法在ROS中建图 的相关文章

  • PX4:【启动流程】

  • 线程池和多线程的区别

    线程池的概念 线程池大类总共分为4种 fixThreadPool 正规线程 xff08 传统线程池 xff09 cacheThreadPool 缓存线程池singleThreadPoll 单线程线程池 xff08 单例线程池 xff09 S
  • C++ libcurl Digest Auth

    C 43 43 libcurl Digest Auth postman操作如下 xff1a 附认证原理如下 xff1a MD5 md5 span class token punctuation span string HA1 span cl
  • 如何安装postman(超简单)

    方法一 xff1a xff08 官网下载 xff09 1 打开https www crx4chrome com crx 1058 2 稍微往下微微一拉就出现 Download crx file from Crx4Chrome gt 的选择
  • 转 curl 参数大全

    curl是一个非常实用的 用来与服务器之间传输数据的工具 xff1b 支持的协议包括 DICT FILE FTP FTPS GOPHER HTTP HTTPS IMAP IMAPS LDAP LDAPS POP3 POP3S RTMP RT
  • DataX mysql同步到mysql

    使用Datax web 创建同步任务 准备工作 创建数据源 配置数据库相关信息 创建执行器 配置执行器执行地址相关信息 1 构建reade 1 1 SQL语句 xff08 querySql xff09 在json文件中此部分配置就是 que
  • MQTT协议简介

    目录 MQTT协议简介一 MQTT协议特点1 1 发布和订阅1 2 QoS Quality of Service levels 二 MQTT数据包结构2 1 MQTT固定头2 2 MQTT可变长 Variable header 2 3 消息
  • vins位姿图优化

    我们 的滑动窗口和边缘化方案限制了计算的复杂性 xff0c 但也给系统带来了累积漂移 更确切地说 xff0c 漂移发生在全局三维位置 x y z 和围绕重力方向的旋转 yaw 为了消除漂移 xff0c 提出了一种与单目VIO无缝集成的紧耦合
  • 基于STM32开发板实现温湿度传感数据采集

    一 实验要求 本实验将选用STM32F407ZGT6开发板进行项目开发 xff0c 选用的传感器为DHT11温湿度传感器 传感器将采集到的数据传输到STM32 xff08 MCU xff09 主控进行数据处理 xff0c 最后通过串口打印出
  • 相机成像模型、内参矩阵、外参矩阵

    相机针孔成像模型 基本的小孔成像过程 xff1a X坐标系是针孔所在坐标系 xff0c Y坐标系为成像平面坐标系 xff0c P为空间一点 xff0c 小孔成像使得P点在图像平面上呈现了一个倒立的像 xff0c 俯视图如下 xff1a 由三
  • 韦东山学习笔记——UART(串口)的使用

    基于jz2440的串口使用 搬砖的文章概述UART的发送和接收串口之间的数据传输UART的用途串口的数据帧参数说明起始位数据位奇偶校验位停止位波特率 怎么发送一字节数据 xff0c 比如 A UART的优缺点优点缺点 UART相关配置寄存器
  • C++源文件的编译流程简介

    概述 C 43 43 C源文件 xff0c 包含 c h cpp hpp等格式的文件 xff0c 经过预处理 编译 汇编 链接后 xff0c 形成可执行文件 xff0c 也就是 exe文件 以一个简单项目MyProject为例 xff0c
  • 无法修正错误,因为您要求某些软件包保持现状,就是它们破坏了软件包间的依赖关系

    使用 sudo apt get install 安装软件时 xff0c 出现错误 无法修正错误 xff0c 因为您要求某些软件包保持现状 xff0c 就是它们破坏了软件包间的依赖关系 错误的主要原因是 xff0c 系统中已经安装了被依赖的包
  • kalibr工具的编译与安装

    安装 kalibr提供了两种安装使用的方法 一 直接使用打包好的程序 下载地址 xff0c 选择CDE packages下载 xff08 需要访问Google xff09 使用注意事项 xff1a 只有64位系统可以使用 二 源码编译 安装
  • TCP/IP协议栈协议头

    目录 OSI与TCP IP模型UDP发送数据过程以太网协议头IP协议头UDP协议头UDP包 OSI与TCP IP模型 UDP发送数据过程 以太网协议头 把上面的以太网头用一个结构体表示如下 xff1a span class token ma
  • VLAN标签

    大家好呀 xff0c 我是请假君 xff0c 今天又来和大家一起学习数通了 xff0c 今天要分享的知识是VLAN标签 我们知道 xff0c 以太网交换机根据MAC地址表来转发数据帧 MAC地址表中包含了端口和端口所连接终端主机MAC地址的
  • fastjson的一些用法

    一般情况下 xff0c 在进行redis集群写入时 xff0c 使用jedisCluster set key value value为String类型 xff0c 那么就用到了fastjson进行序列化 以下是一些要点 xff1a 1 序列
  • 【视觉SLAM十四讲】第12讲 回环检测

    12 1 回环检测概述 前面已经介绍过了前端和后端 xff0c 前端用于特征点的提取以及轨迹 地图的初始值 xff0c 而后端负责对这部分数据进行优化 考虑到误差的存在 xff0c 每一个时刻存在的误差会不断累积 xff0c 从而产生累积误
  • LVGL——PC模拟器仿真模拟+VS2017

    目录 LVGL介绍移植说明资源下载环境搭建编译运行 本文只针对当时的LVGL v7 xff0c LVGL迭代过程中变化较大 xff0c 部分接口有可能做调整 本文仅供参考 LVGL介绍 官网 xff1a https lvgl io 官方在线
  • LVGL 优化帧率技巧

    目录标题 前文未优化版本LVGL帧率限制刷屏方法效率代码优化等级编译器版本LVGL显存单buffer非全尺寸双buffer全尺寸双buffer 本文只针对当时的LVGL v7 xff0c LVGL迭代过程中变化较大 xff0c 部分接口有可

随机推荐