TurtleBot3使用课程-第二节a(北京智能佳)
目录
1.1.2 运行hlds_laser_publisher节点 2
1.1.3 在RViz中运行hlds_laser_publisher节点 3
2.1.1 Turtle Bot3支持各种类型的SLAM。 9

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.上测试)
- 从下面的Qt站点安装开源版本。
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} 



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参数。
定义了以下参数

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是一个件,例如地图的分辨率。


2. 5. 地图
ROS中的地图主要使用二维占用网格地图(OGM)。 当“地图”被指定为
${map_name},map.pgm区分了机器人可以去的白色区域,机器人不能去的黑色区域(被识别为障碍),以及机器人还没有探索的灰色区域。 以这种方式生成的地图可以用于下一次导航。

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

TurtleBot3使用课程-第二节a(北京智能佳)的更多相关文章
- TurtleBot3使用课程-第二节b(北京智能佳)
目录 1.导航 2 1.1 运行导航节点 3 1.1.1 [远程PC]运行roscore 3 1.1.2 [turtlebot3 SBC]运行提出turtlebot3 3 1.1.3[远程PC]运行导 ...
- TurtleBot3使用课程-第一节b(北京智能佳)
目录 1.模拟运行TurtleBot 2 1.1 ROS安装和设置2 1.1.1 turtlebot3 在Gazebo中模拟 3 1.1.1.1用于Gazebo的ROS包装 3 1.1.1.2 tur ...
- TurtleBot3使用课程-第一节a(北京智能佳)
目录 1.ROS设置(远程PC) 2 1.1 ROS安装和设置 2 1.1.1 设置source.list 2 1.1.2 键设置 2 1.1.3 ROS安装 2 1.1.4安装包构建的依赖关系 2 ...
- android内部培训视频_第二节 布局基础
第二节:布局入门 一.线性布局 需要掌握的属性: 1.orientation:排列方式 vertical:垂直 Horizontal:水平 2.weight:水平布局的权重 3.gravity:子控件 ...
- python课程第二周重点记录
python课程第二周重点记录 1.元组的元素不可被修改,元组的元素的元素可以被修改(字典在元组中,字典的值可以被修改) 2.个人感觉方便做加密解密 3.一些方法的使用 sb = "name ...
- seajs第二节,seajs各模块依赖关系
index.html <!DOCTYPE html> <html> <head> <meta charset="utf-8"> &l ...
- 学习javascript基础知识系列第二节 - this用法
通过一段代码学习javascript基础知识系列 第二节 - this用法 this是面向对象语言中的一个重要概念,在JAVA,C#等大型语言中,this固定指向运行时的当前对象.但是在javascr ...
- VUE2.0实现购物车和地址选配功能学习第二节
第二节 创建VUE实例 购物车项目计划: 1.创建一个vue实例 2.通过v-for指令渲染产品数据 3.使用filter对金额和图片进行格式化 4.使用v-on实现产品金额动态计算 5.综合演示 ① ...
- 逆向课程第二讲,寻找main入口点
逆向课程第二讲,寻找main入口点 一丶识别各个程序的入口点 入门知识,识别各个应用程序的入口点 (举例识别VC 编译器生成,以及VS编译生成的Debug版本以及Release版本) 1.识别VC6. ...
随机推荐
- 敏捷开发(Scrum)与敏捷测试
1.敏捷测试流程和传统测试流程 软件测试是贯穿整个软件开发生命周期.对软件产品(包括阶段性产品)进行验证和确认的活动过程,也是对软件产品质量持续的评估过程,其目的是尽快尽早地发现在软件产品(包括阶段性 ...
- Python实现自动整理文件
前言 工作上的文档和资料好几个月没整理了,因为平常太忙都是随手往桌面丢.整个桌面杂乱无章全是文档和资料.几乎快占满整个屏幕了,所有我必须要整理一下了.但是手动整理太费时间了,于是我想到了python. ...
- java中的反射(一)
在之前学java基础时学习过反射,但在因为没有相应的应用场景,所以也是一知半解.最近在学spring的时候发现反射是其中很重要的一部分,所以回顾一下,并看看它在spring中的应用. 目录 一.反射 ...
- linux 复制文件前n行到另外一个文件
head -n 100 train.txt > 123.txt head -100 train.txt > 123.txt
- Scrum 冲刺第六天
一.每日站立式会议 1.会议内容 1)进行每日工作汇报 张博愉: 昨天已完成的工作:学习如何编写用户手册 今日工作计划:编写测试计划 工作中遇到的困难:文档不知如何动手 张润柏: 昨天已完成的工作:完 ...
- MySQL存储引擎:MyISAM和InnoDB的区别
MyISAM和InnoDB的区别 定义 InnoDB:MySQL默认的事务型引擎,也是最重要和使用最广泛的存储引擎.它被设计成为大量的短期事务,短期事务大部分情况下是正常提交的,很少被回滚.InnoD ...
- NOI2008 志愿者招聘
文化课 + 竞赛双废物又来水题解了. 首先,对于题干中的人,很像网络流中的流量,但是他有一个每天人数的下限,我从网上借鉴(chaoxi)到了两种思路: 把下界限制转化为一条边的流量下界,这样就是最小费 ...
- 题解-Sakuya's task
题面 Sakuya's task \[\left(\sum_{i=1}^n\sum_{j=1}^n \varphi(\gcd(i,j))\right)\bmod 10^9+7 \] 数据范围:\(1\ ...
- 落谷 P2401 不等数列
题目链接. Solution 状态设计 设 \(f_{i, j}\) 为 \(1\) 到 \(i\) 的排列,其中有 \(j\) 个 \(\text{'<'}\) 的方案数. 状态转移 尝试从 ...
- Codeforces Edu Round 58 A-E
A. Minimum Integer 如果\(d < l\),则\(d\)满足条件 否则,输出\(d * (r / d + 1)\)即可. #include <cstdio> #in ...