文章目录

  • 前言
  • 一、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 1500inet 192.168.1.111  netmask 255.255.255.0  broadcast 192.168.1.255inet6 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 0TX 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/srcgit 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功能包,进行运算后来建图

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

  1. 【转】二维异形件排版算法介绍(三)

    转自:https://bbs.huaweicloud.com/blogs/203947 [摘要] 相比于基于可行解的排样算法,重叠移除算法在改变解的状态时,允许零件之间发生重叠,然后采用分离技术消除重 ...

  2. 基于多二维码识别的无人机运动真值获取

    基于多二维码识别的三维运动真值获取 1.背景介绍 2.原理 2.1 二维码基础 2.2图像预处理 2.3 定位标轮廓提取 2.4 多二维码鲁棒识别 3 运行结果 3.1对单张图片进行多二维码识别 3. ...

  3. 基于栅格地图的路径规划(一)基于Matlab二维、三维栅格地图的构建

    基于栅格地图的路径规划(一)基于Matlab二维.三维栅格地图的构建 前言 1.二维栅格地图的创建 1.1.二维栅格地图构建原理 1.2.二维栅格地图构建例程 2.三维栅格地图的创建 2.1.三维栅格 ...

  4. python画二维散点图-基于python 二维数组及画图的实例详解

    1.二维数组取值 注:不管是二维数组,还是一维数组,数组里的数据类型要一模一样,即若是数值型,全为数值型 #二维数组 import numpy as np list1=[[1.73,1.68,1.71 ...

  5. C++旋转二维MxN矩阵的算法(附完整源码)

    C++旋转二维MxN矩阵的算法 C++旋转二维MxN矩阵的算法完整源码(定义,实现,main函数测试) C++旋转二维MxN矩阵的算法完整源码(定义,实现,main函数测试) #include < ...

  6. 关于二维码分块上色(彩色二维码)的算法研究

    原文:关于二维码分块上色(彩色二维码)的算法研究 众所周知,二维码通常是黑白的,而且是由若干个长方形或正方形小块平铺而成.但从人们的审美角度来看,常见的黑白二维码不免让人审美疲劳.本文试着从分块上色的 ...

  7. 求二维形状渐变的算法

    如:三角形变成四边形.. 谁有这程序的源代码 ..好人呀你在哪? 课题名称  二维形状渐变对应算法 课题类型  理论研究 招收对象  计科 招收人数  1 课题要求  (1) 仔细阅读指定的若干篇相关 ...

  8. python画二维数组散点图_基于python二维数组及画图的实例详解

    基于python二维数组及画图的实例详解 下面小编就为大家分享一篇基于python 二维数组及画图的实例详解,具有很好的参考价值,希望对大家有所帮助.一起跟随小编过来看看吧 1.二维数组取值 注:不管 ...

  9. 二维码里德所罗门算法

    这是一个相当古老的项目了. 前序 之前一直想写一个有关二维码生成器的教程,由于各种各样的原因,当然主要原因是懒,一直没有下手.最近感觉还是要做点什么,不然有种要烂尾的冲动. 我之所以要写这个教程,主要 ...

最新文章

  1. 生成静态文件的新闻系统核心代码
  2. 【工具类】时间相关的方法
  3. 【STM32】FreeRTOS系统配置
  4. oracle 窗口函数 (keep)
  5. 吴恩达深度学习 —— 4.5 搭建深层神经网络块
  6. 常见性能问题:慢sql导致响应时间长分析定位
  7. 前端开发工程师应该关注什么?
  8. python求解二次规划问题
  9. 服务器连交换机配置lacp协议,LACP(链路聚合控制协议)
  10. jqueryui引用出错(base is not a constructor,widget no found)
  11. Slurm的前处理prolog和后处理epilog
  12. Android应用的persistent属性
  13. 2022-01-19:青蛙过河。 一只青蛙想要过河。 假定河流被等分为若干个单元格,并且在每一个单元格内都有可能放有一块石子(也有可能没有)。 青蛙可以跳上石子,但是不可以跳入水中。 给你石子的位置列
  14. Android应用程序文件结构,Android项目文件及应用程序—目录结构详解
  15. 单片机中断系统(部分以AT89S52为例)
  16. 题目:中国有句俗话叫“三天打渔,两天晒网”,某人从2010年1月1日期开始“三天打渔,两天晒网” 问这个人在以后的某一天是“打渔”还是“晒网”。用C或着C++语言实现程序解决问题。
  17. 利用计算机进行会计造假的案例分析,账簿会计造假的形式和识别技巧
  18. Altium designer 备注手册
  19. BIOS知识枝桠——HII
  20. 客户关系管理咨询 - 获取最佳CRM解决方案

热门文章

  1. 清理Windows系统的C盘空间
  2. MySQL 大表性能优化
  3. lenovo L480 进入bios_B20A-BTC主板魔BIOS安装I5 94OOF CPU教程
  4. r语言 面板数据回归_面板数据估计的R实现
  5. 几个指标(同比,环比,定期比)(转载)
  6. win11触控板使用不了的解决方法
  7. httpclient4 请一定设置超时时间
  8. 联想m100显示耗材_联想领像M100系列打印机加粉及清零方法
  9. python定义定长数组_python 初始化一个定长的数组实例
  10. dell r630 配置raid_DELL服务器硬件 配置RAID磁盘阵列 iDRAC配置