博舍

gazebo中给机器人添加16线激光雷达跑LIO 给机器人拍照的软件

gazebo中给机器人添加16线激光雷达跑LIO

目录:前言1、下载雷达仿真包2、添加雷达支架描述文件3、添加雷达描述文件4、启动仿真5、添加IMU模块6、添加RGB-D相机7、LIO-SAM仿真安装依赖安装GTSAM编译LIO-SAM运行8、源码遇到的问题1、error:‘classstd::unordered_map’hasnomembernamed‘serialize’2、gazebo中机器人静止,rviz中反复横跳3、运行时报错[lio_sam_mapOptmization-5]processhasdied[pid260348,exitcode-114、运行时报错errorwhileloadingsharedlibraries:[libmetis-gtsam.so](https://link.zhihu.com/?target=http%3A//libmetis-gtsam.so/):cannotopensharedobjectfile:Nosuchfileordirectory5、运行时报Warning:TF_REPEATED_DATAignoringdatawithredundanttimestampforframe前言

最近想搭建一个机器人移动平台,但是设备还没完全到齐,在设备全部到齐之前,我们先在gazebo中做一个仿真,进行相关的算法和功能包的部署。在这个仿真中机器人在一个移动底盘上搭载了16线激光雷达、IMU、RGB-D相机,并在最后跑了一个LIO-SAM,建图效果还不错。整个过程遇到了一些问题,都一一解决了,对主要的问题做了一些记录,有其他问题的可以在讨论区回复。另外,本工程的源码放在在GitHub上,欢迎大家下载学习。

1、下载雷达仿真包

首先下载VLP的激光雷达的仿真开发包到自己的工作空间中

gitclonehttps://bitbucket.org/DataspeedInc/velodyne_simulator/src/master/

下载之后/src的文件结构如下

下载好激光雷达的仿真包之后重新catkin_make一次,主要是为了生成激光雷达的点云产生库文件,不然后面仿真的时候会没有点云相关话题。编译一次之后就会在我们工作空间的的devel/lib文件夹下生成两个动态链接库如下:

在仿真中会调用这两个库生成点云信息。

2、添加雷达支架描述文件

给激光雷达添加一个支架,把激光雷达在车上立起来,在自己的机器人包里面的urdf文件夹里面新建一个laser_support.xacro文件写入如下内容

Gazebo/White3、添加雷达描述文件

在机器人的base.xacro描述文件中添加激光雷达的描述

首先,包含激光雷达的支架描述文件

然后,添加雷达的两个属性描述变量

最后,包含激光雷达的描述文件,这里会用到上面两个属性变量

4、启动仿真

编写launch文件,启动rviz看看我们的机器人

roslaunch之后就可以打开gazebo和rviz,并在里面显示我们的机器人携带着激光雷达如下:

此时可以打开我们的话题,看看是否有点云输出

可以看到是有点云话题的,我们在rviz里面尝试把点云可视化出来看看

可以看到我们的点云是正常输出的。注意,我们我们为了在gazebo里面看到我们的机器人,所以没有在gazebo里面吧激光点云可视化出来,如果想要可视化可以通过修改VLP-16.urdf.xacro文件中这个地方

修改之后,我们就可以在gazebo里面看到激光点云了,如下:

把我们的车都给盖住了,16线激光雷达的点云还是比较稠密的。现在激光雷达已经加入到仿真中了,下一步我们跑一个经典的激光SLAM框架LIO-SAM试试看。

5、添加IMU模块

因为我们需要跑的框架是LIO-SAM,需要用到IMU模块,所以我们在仿真中也添加进去。同样地,我们在工程中的urdf文件夹下面再增加一个imu.xacro文件

Gazebo/Buletruetrue100true__default_topic__imu/dataimu_base100.00.01000000imu_base000000

然后在我们主描述文件base.xacro中包含这个文件

6、添加RGB-D相机

我们这里使用一个realsense系列的RGB-D相机,先去下载它的仿真SDK

$gitclonehttps://github.com/nilseuropa/realsense_ros_gazebo.git

这里是下载到工程的源码目录下

然后同样地,在主描述文件base.xarco中把相机也包含进去

添加完之后,我们这个仿真机器人已经配备了IMU、RGB-D相机、16线激光雷达这些传感器,我们把环境启动起来,看看发布了多少话题

可以看到发布了很多话题,双目的、IMU的、点云的……都有,基本是机器人配置已经完成,下面准备跑一个SLAM框架试试

7、LIO-SAM仿真安装依赖$sudoapt-getinstall-yros-noetic-navigation$sudoapt-getinstall-yros-noetic-robot-localization$sudoapt-getinstall-yros-noetic-robot-state-publisher安装GTSAM$gitclonehttps://github.com/borglab/gtsam$cdgtsam$mkdirbuild&&cdbuild#注意这里要加-DGTSAM_BUILD_WITH_MARCH_NATIVE=OFF这个选项,不然后面运行会报错$cmake-DGTSAM_BUILD_WITH_MARCH_NATIVE=OFF..$sudomakeinstall-j8$sudoln-s/usr/local/lib/libmetis-gtsam.so/usr/lib/libmetis-gtsam.so编译LIO-SAM$cd~/robot_ws/src$gitclonehttps://github.com/TixiaoShan/LIO-SAM$cd..$catkin_make运行

首先启动仿真环境

$roslaunchscout_gazeboscout_gazebo.launch

然后启动lio-sam

$roslaunchlio_samrun.launch

最后启动我们的控制机器人移动的节点,这个节点是ros自带的一个包,通过sudoaptinstallros-noetic-teleop-twist-keyboard命令安装,这个节点主要是发布速度信息到/cmd_val控制机器人在gazebo中进行移动,移动机器人即可进行建图

$rosrunteleop_twist_keyboardteleop_twist_keyboard.py

可以看到机器人在gazebo中接收我们的运动控制指令进行运动,lio-sam节点进行了位姿估计与建图。

8、源码

这里我把源码上传到我的GitHub仓库,大家可以自行下载进行实验

https://github.com/linzs-online/robot_gazebo.git

遇到的问题1、error:‘classstd::unordered_map’hasnomembernamed‘serialize’

原因:PCl库依赖的flann与Opencv冲突。opencv头文件中的一些宏定义和flann库中的冲突解决:保证pcl库中依赖的flann在opencv头文件之前先包含进去。我这里是把opencv的头文件放在PCL库之后就解决了

2、gazebo中机器人静止,rviz中反复横跳

原因:lio-sam会对点云进行下采样滤波,滤波体素设置太大了,匹配过程出现误差,导致机器人优化出来的位姿反复横跳。

解决:因为我们这里是在室内建图,所以在lio-sam的配置文件中把体素大小设置小一些

3、运行时报错[lio_sam_mapOptmization-5]processhasdied[pid260348,exitcode-11

解决:gtsam编译时带上这个参数,cmake-DGTSAM_BUILD_WITH_MARCH_NATIVE=OFF…

4、运行时报错errorwhileloadingsharedlibraries:libmetis-gtsam.so:cannotopensharedobjectfile:Nosuchfileordirectory

解决:sudoln-s/usr/local/lib/libmetis-gtsam.so/usr/lib/libmetis-gtsam.so

5、运行时报Warning:TF_REPEATED_DATAignoringdatawithredundanttimestampforframe

原因:机器人TF变换不正常

解决:通过运行roswtf命令分析目前环境中的TF变换,这里查到是base_link和odom这两个坐标之间的变换产生了冲突

显然,是我们的gazebo仿真中的控制已经发布了base_link到odom的TF变换,但是我们的SLAM节点又发布了一次,这两个产生了冲突,下面我们通过修改lio-sam发布的TF变换来解决这个问题,修改lio-sam的配置文件,把SLAM位姿估计结果发布的坐标换个名字即可

发那科机器人视觉功能详解

iRVision视觉堆垛程序_2(从堆垛层数提取Z轴偏移)

此功能通过视觉结合视觉检测结果和根据目标比例确定的目标层数(目标高度)计算目标的位置。目标层数依照参考比例和高度数据自动确定,因而,即使在视觉检测中存在细微的比例误差,也可以通过一个离散的层数(目标高度)来计算目标的具体位置。

iRVision2DV复数视野功能

2D复数视野程序提供通过若干固装式照相机定位大型目标的能力,对通过Robot-Mounted式照相机进行检测同样有效。

iRVision3DL复数视野功能

3D复数视野程序提供通过若干固装式3D照相机定位大型目标的能力,对通过Robot-Mounted式照相机进行检测同样有效。

iRVision浮动坐标系功能(FloatingFrame)

Robot-mounted式照相机的标定可以用于如下图所示任意位置和方向下的iRVision程序。2D状态下的移动补偿与照相机实际位置相关联。照相机的标定可以在任意位置下进行。减少示教工作量。

iRVision3DLLED光源控制

此功能支持在3DL视觉程序中,在捕获2D图象和激光照射图象时,同步控制LED光源的ON/OFF。通过此功能,可以获得适当的外部光线环境,提升整个视觉系统的能力。

iRVision自动曝光功能

根据周围环境光线强度的变化,iRVision将自动调节曝光时间,以取得和示教良好图象类似的成像效果,全天候运行可能。

iRVision多重曝光功能

通过多个不同曝光时间的成像,选择一个接近示教效果的成像,以取得一个具有宽泛的、动态的曝光范围和成像效果。此功能在环境光线变化强烈时会有较好的效果。

iRVision环形网络功能(RobotRing)

通过此功能,未附有iRVision视觉系统的机器人可以通过网络调用附有iRVision视觉系统的机器人的偏移检测数据。

iRVision斑点检测功能(BlobLocatorTool)

在成像范围内检测与示教模型具有相似特性(如周长、曲率等)的二元(黑白)目标位置。与条件检测(Conditionalexecutiontool)同时使用,可以应用于目标排列和品质检测等多种场合。

iRVision灰度检测功能(HistogramTool)

在指定区域内检测光线强度(成像灰度),且计算多种特性例如平均数、最大值、最小值等。与条件检测(Conditionalexecutiontool)同时使用,可以对应目标排列和目标在位检测等多种场合。

此功能等同V-500iA/2DV中Associatetool。

iRVision多窗口检测功能(Multi-WindowTool

通过机器人控制器内寄存器R的数值变化切换对应的预设搜索窗口。

iRVision多目标检测功能(Multi-LocatorTool)

通过机器人控制器内寄存器R的数值变化切换对应的预设目标视觉程序。

iRVision长度计测功能(CaliperTool)

对应指定区域,侦测目标边缘并测量两条边缘间长度(单位:像素pixel),乘以转换因子可以换算为mm。可以对应目标排列及品质检测等应用场合。

iRVision截面检测功能(CrossSection)

侦测目标的局部3D特性,显示沿激光衍条照射路径上的目标截面形状。对在3D视觉程序中因2D成像缺乏有效的特征量而无法进行准确定位时会比较有效。

iRVision子检测功能(ChildTool)

允许在一个父目标检测(GPMlocatortool)下添加一个子目标检测(GPMlocatortool)构成二级检测目录。子检测将根据父检测的结果进行动态的判定。与条件检测(Conditionalexecutiontool)同时使用,可以对应目标排列和目标在位检测等多种场合。

iRVision定位调整功能(PositionAdjustTool)

依据子检测的结果,对应目标表面明显特征(如孔,键槽)调整父检测的定位位置,获得更精确的偏移和旋转数据。对不能以整个示教模型进行方向性定位的应用较有效。对一个上级检测,可以使用多个下级子检测来分析目标的多种局部特性。

iRVision曲面匹配功能(CurvedSurfaceMatchingTool)

通过目标表面阶梯状的光线强度分布(亮或暗,模型内显示为不同颜色)来检测曲面目标的偏移与旋转。识别全圆形物体可能。

iRVision计测输出功能(MeasurementOutputTool)

输出测量数值(Locatortool中的”Score/分值“、”Size/比例“,Calipertool中的”Length/长度“等)至视觉寄存器VR。这些数据可以复制至机器人数据寄存器R并在TP程序中自由调用。

iRVision视觉替换功能(VisionShift)

通过视觉程序调整机器人TP程序以对应实际的工件位置,只需在机器人手爪端添加一台相机即可执行此功能。固定工件上的3处任意的参考点的位置数据将被自动检测并计算出补偿数据。在离线编程或机器人系统搬迁后,使用此功能可极大减少机器人重新示教的时间。

iRVision视觉零位功能(VisionMastering)

通过视觉程序补偿机器人J2~J5轴的零位数据,只需在机器人手爪端添加一台相机即可执行此功能。机器人变换不同的姿态,相机与确定目标点间的相对位置数据将被自动检测并计算补偿数据。此功能可应用于提升机器人TCP示教准确性,Visionshift离线编程和其他视觉应用。

iRVision视觉坐标系设置功能_1(VisionFrameSet)

通过视觉程序设置机器人TCP,只需在机器人手爪端TCP对应位置添加一台相机即可执行此功能。机器人变换不同的姿态,基于对应用户坐标系下相机与目标点间的相对位置数据将被自动检测并计算机器人对应TCP。此功能可提升TCP示教的速度和精确性。

iRVision视觉坐标系设置功能_2(VisionFrameSet)

坐标系设置的另一种功能:通过视觉设置一个与视觉标定板对等的用户坐标系。通过装置在机器人手爪末端的相机,用户坐标系UF设置在视觉标定板的原点位置(四点法),或当视觉标定板装置在机器人手爪末端,则工具坐标系UT设置在视觉标定板的原点位置(六点法)。

返回搜狐,查看更多

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。

上一篇

下一篇