TurtleBot3使用课程-第二节a(北京智能佳)


1.[第3类]LRF(LDS)传感器

TurtleBot3中使用的LDS(LASER距离传感器)是一种传感器,它可以测量二维平面上的360度距离值,并为SLAM和导航提供必要的信息。 该LDS传感器通过USB电缆连接到RaspberryPI到USB2LDS板,但也可以通过UART接口直接连接到OpenCR。

由于传感器的性质,很难在强烈的阳光直射下使用传感器。 因此,该传感器适用于在亮度为10,000勒克斯或以下的室内空间工作的机器人。

TurtleBot3的LDS传感器可以以二进制包格式安装,也可以在下载源代码后构建。

1.1传感器包安装

安装驱动TurtleBot3的LDS传感器所需的驱动程序包。

1.1.1传感器端口访问设置


当使用USB将传感器与Linux连接到PC时,必须正确设置USB端口的权限以访问指定的端口。

上面的命令授予/dev/ttyUSB0端口的读写权限。

1.1.2运行hlds_laser_publisher节点



1.1.3在RViz中运行hlds_laser_publisher节点





1.2传感器源代码下载


支持下载的LDS-01的驱动程序可以在Windows、Linux和MacOS的开发环境中运行。

软件需求如下:

GCC(使用Linux和Mac OS时)、Min GW(使用Window时Boost库(在v1.66.0上测试)

1.从下面的GitHub地址下载源代码。


或者,您可以通过单击绿色来下载源代码 在下面的网站

https://github.com/ROBOTIS-GIT/hls_lfcd_lds_driver

2.安装开发环境所必需的软件和库。 GCC(Linux,Mac OS)或Min

GW(Windows)

启动图书馆

1.2.1建筑资料来源守则

下面的命令使用Linux的makefile集合构建源代码。 对于Windows和MacOS,请适当修改Makefile


1.2.2在CLI环境下运行

如果源代码成功构建,可以通过运行检查LDS传感器值的 的文件如下所示。

1.2.3 在GUI环境上运行

为了直观地检查LDS传感器的值,必须另外安装QtCreator和QtLibs。

 Qt Creator(在V4.5.0上测试)

 Qt Libs(在V5.10.上测试)

  1. 从下面的Qt站点安装开源版本。

https://www.qt.io/download 

2.运行Qt创建者。

3.打开  在源代码下面。

(hls_lfcd_lds_driver/applications/lds_polar_graph/lds_polar_graph.pro

4.检查源代码中连接到传感器的端口,如果分配到另一个端口,更改口号。

5.新闻 来构建代码。

6.当构建成功完成后,按来运行程序

1.2.4运行在嵌入式董事会

LDS-01传感器可以在Open CR或Arduino板上操作。在这种情况下,需要一个液晶面板来可视化传感器数据。

LDS-01传感器的TX和RX电缆与预埋板的UART引脚兼容,可通过连接电源和TX、RX引脚与预埋板连接使用请务必参考产品数据表,因为实际电缆的颜色可能与下面的图片不同。

1.2.4.1 从OpenCR导入LDS传感器

要从OpenCR板导入传感器值,需要将Arduino示例上传到OpenCR板。

1.在ArduinoIDE中,转到Tools>BoardsManager并搜索Open CR以安装库。

2.在工具>板下选择打开CR。

3.在“工具>端口”下选择连接到打开CR的端口。

4.从文件>示例中选择绘制LDS示例>打开CR>等>并上传到打开CR。

当示例成功上传时,传感器值将显示如下图所示。


2.SLAM

同时定位和映射(SLAM)是指通过从机器人上的传感器获取信息,探索未知区域并创建机器人探索位置的地图。 SLAM是无人驾驶汽车自主导航或自主驾驶不可或缺的重要技术。 用于获取外部信息的传感器包括可以测量距离或获取周围图像的传感器。

红外距离传感器(IR)、声波传感器(Sonar)和激光传感器(LRF)被广泛应用。 最近,图像分析算法的发展也增加了相机的使用。

为了预测机器人的位置,通过使用Dead Reckoning测量连接到机器人车轮上的编码器的值来计算行程距离(里程。 然而,由于车轮与地面之间的摩擦,存在误差。 为了减少实际机器人位置与预测机器人位置之间的误差,可以使用惯性测量传感器(IMU)获得的数据对位置进行校正)。

此外,卡尔曼滤波、马尔可夫定位、蒙特卡罗定位等。 是利用距离传感器的值来减小位置误差的一些方法。

在使用SLAM创建地图时,有一些事情需要记住。

当像大仓库或礼堂那样在传感器范围之外映射一个大面积时,映射将无法正常工作。 如果我们想象传感器的范围是我们手臂的长度,映射一个大面积就像试图用两只手臂找到当前的位置,你的眼睛闭在一个大礼堂的中间。

同样,绘制没有具体特征的走长廊也很困难。这就像在你闭着眼睛走路的时候,通过触摸墙壁来测量走廊的长度,在这种情况下,考虑在地图上防止对象或障碍物,而不是一个特定的模式或对称的形式。

常用的Gmapping和Cartography在生成地图的方式上略有不同。 直接发布地图的Gmapping不同,制图师发布子地图并收集这些子地图来创建一个完整的地图。 由于这个原因,制图师可以帮助创建一个更准确的地图时,映射大地图由较小的互联子地图。

2.1运行SLAM

1.[远程PC]运行roscore。


2.运行Turtle Bot3所需的基本包


3.[远程PC]打开一个新的终端窗口并运行SLAM。 在下面的命令中,更改${tb3_model}  Turtle Bot3的模型名称之一。 你可以在其中选择根据正在使用的机器人。







2.1.1 Turtle Bot3支持各种类型的SLAM。

Turtle Bot3支持Gmapping和Cartography等几个SLAM,可以通过直接输入的参数值来选择  在命令中网络包含

例如,如果你想使用Google的制图器而不是gmap,你可以运行SLAM节点通过传递制图器作为SLAM_方法的参数值作为如下所示。





如果您想使用默认提供的Gmapping以外的SLAM,则需要安装相关的包,如下所示。

安装制图员:自2018年以来,最新版本的制图员(v1.0.0)尚未更新,在使用Turtlebot3包进行模拟时可能无法正常运行。 在模拟Turtlebot3的SLAM时使用Gmapping。


以下安装方法仅适用于ROS1动力学。


安装Hector Mapping


安装 Karto

安装 Frontier Exploration



当SLAM节点运行时,应用各种类型SLAM的可视化工具RViz可以单独执行,如下所示。 如果RViz已经在运行,程序可能会崩溃。

2.2运行远程控制节点

[远程PC]要用SLAM创建地图,机器人需要移动到地图的未探索区域。 为此,TurtleBot3可以通过运行下面的节点来远程控制,如下所示。

使用SLAM创建地图时,避免突然移动或方向变化有助于创建准确的地图。 通过将机器人移动到RViz地图中显示的未完成区域来完成地图。



2.3调整指南

映射可以设置几个参数来实现各种环境的优化性能。 映射可以在没有单独设置的情况下使用,并且经常在其中使用默认有关可配置参数的列表请参阅ROSwiki上的Gmapping参数。

定义了以下参数

文件, 当文件运行时,将参数加载到roscore的参数服务器中,并基于Gmapping应用于SLAM。

2.3.1最大Urange

此参数设置LDS传感器的最大距离。

2.3.2map_update_interval

更新地图的秒数越小,地图更新的频率就越高。 然而,地图计算需要更大的负荷。 把这个弄好

根据环境参数


2.3.3 最低得分

设置确定传感器扫描数据匹配测试成功或失败的最小得分值。 这可以减少机器人在大面积预期位置的误差。 如果参数设置得当,您将看到类似于下面所示的信息。


如果这个值太大,您将看到如下所示的警告。

2.3.4 线性更新

如果机器人转换的距离比这个值长,它将运行扫描过程。

2.3.5 角度更新

如果机器人的旋转超过这个值,它将运行扫描过程。 建议将此值设置为小于线性更新。

2. 4. 保存地图

[远程PC]地图完成后,运行map_saver节点保存创建的地图。 在RViz上完成的通过距离旅行的地图,TF,机器人在运动过程中的扫描数据可以保存为一个文件,下面的命令。

完成的地图分为两个文件;pgm是一个PortableGrayMap类型的图像文件,yaml是一个件,例如地图的分辨率。


 选项指定地图文件的位置和文件名。在命令中上面,这些文件保存在用户的主文件夹(~/或/home/<用户名>)中因为选择已使用

2. 5. 地图

ROS中的地图主要使用二维占用网格地图(OGM)。 当“地图”被指定为

${map_name},map.pgm区分了机器人可以去的白色区域,机器人不能去的黑色区域(被识别为障碍),以及机器人还没有探索的灰色区域。 以这种方式生成的地图可以用于下一次导航。


下面的图片是一个使用制图师绘制大面积地图的例子。 大约花了一个小时,通过控制机器人的总距离350米来创建一个像下面的地图。