位置: IT常识 - 正文

gazebo中给机器人添加16线激光雷达跑LIO-SAM(gazebo中机器人导航在rviz中不显示地图仅限显示轨迹)

编辑:rootadmin
gazebo中给机器人添加16线激光雷达跑LIO-SAM 目录:前言1、下载雷达仿真包2、添加雷达支架描述文件3、添加雷达描述文件4、启动仿真5、添加IMU模块6、添加RGB-D相机7、LIO-SAM仿真安装依赖安装GTSAM编译LIO-SAM运行8、源码遇到的问题1、error: ‘class std::unordered_map<unsigned int, std::vector<unsigned int> >’ has no member named ‘serialize’2、gazebo中机器人静止,rviz中反复横跳3、运行时报错 [lio_sam_mapOptmization-5] process has died [pid 260348, exit code -114、运行时报错 error while loading shared libraries: [libmetis-gtsam.so](https://link.zhihu.com/?target=http%3A//libmetis-gtsam.so/): cannot open shared object file: No such file or directory5、运行时报 Warning: TF_REPEATED_DATA ignoring data with redundant timestamp for frame前言

推荐整理分享gazebo中给机器人添加16线激光雷达跑LIO-SAM(gazebo中机器人导航在rviz中不显示地图仅限显示轨迹),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:gazebo中机器人不显示,gazebo中机器人动作太慢,gazebo中机器人不显示,gazebo中给机器人添加16线激光雷达跑LIO-SAM,gazebo中机器人飞天了怎么办,gazebo中机器人导航在rviz中不显示地图仅限显示轨迹,gazebo中给机器人添加16线激光雷达跑LIO-SAM,gazebo中机器人动作太慢,内容如对您有帮助,希望把文章链接给更多的朋友!

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

1、下载雷达仿真包

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

git clone https://bitbucket.org/DataspeedInc/velodyne_simulator/src/master/

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

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

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

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

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

<?xml version="1.0"?><robot name="laser_support" xmlns:xacro="http://wiki.ros.org/xacro"> <!-- 雷达支架 --> <xacro:property name="support_length" value="0.30" /> <!-- 支架长度 --> <xacro:property name="support_radius" value="0.025" /> <!-- 支架半径 --> <xacro:property name="support_x_size" value="-0.2" /> <!-- 支架安装的x坐标 --> <xacro:property name="support_y_size" value="0.0" /> <!-- 支架安装的y坐标 --> <xacro:property name="support_z_size" value="${base_z_size}" /> <!-- 支架安装的z坐标:底盘高度 / 2 + 支架高度 / 2 --> <xacro:property name="support_m" value="0.02" /> <!-- 支架质量 --> <link name="support"> <visual> <geometry> <cylinder radius="${support_radius}" length="${support_length}" /> </geometry> <origin xyz="0 0 0" rpy="0.0 0.0 0.0" /> <material name="red"> <color rgba="0.8 0.2 0.0 0.8" /> </material> </visual> <collision> <geometry> <cylinder radius="${support_radius}" length="${support_length}" /> </geometry> <origin xyz="0 0 0" rpy="0.0 0.0 0.0" /> </collision> <xacro:cylinder_inertial_matrix m="${support_m}" r="${support_radius}" h="${support_length}" /> </link> <joint name="support2base_link" type="fixed"> <parent link="base_link" /> <child link="support" /> <origin xyz="${support_x_size} ${support_y_size} ${support_z_size}" /> </joint> <gazebo reference="support"> <material>Gazebo/White</material> </gazebo></robot>3、添加雷达描述文件

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

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

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

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

4、启动仿真

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

<launch> <arg name = "model_xacro" default = "$(find scout_gazebo)/urdf/base.xacro" /> <!-- 将 Urdf 文件的内容加载到参数服务器 --> <param name="robot_description" command="$(find xacro)/xacro $(arg model_xacro)" /> <!-- Launch the joint state publisher --> <node name="joint_state_publisher" pkg="joint_state_publisher_gui" type="joint_state_publisher_gui" ></node> <!-- Launch the robot state publisher --> <node name="robot_state_publisher" pkg="robot_state_publisher" type="robot_state_publisher" /> <!-- Loading rviz files --> <node name="rviz" pkg="rviz" type="rviz" args="-d $(find scout_gazebo)/config/show_robot.rviz" /> <!-- 启动 gazebo --> <include file="$(find gazebo_ros)/launch/empty_world.launch"> <arg name="world_name" value="$(find scout_gazebo)/worlds/lab.world" /> </include> <!-- 在 gazebo 中显示机器人模型 --> <node pkg="gazebo_ros" type="spawn_model" name="model" args="-urdf -model scout -param robot_description" /> </launch>

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

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

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

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

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

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

5、添加IMU模块gazebo中给机器人添加16线激光雷达跑LIO-SAM(gazebo中机器人导航在rviz中不显示地图仅限显示轨迹)

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

<?xml version="1.0"?><robot xmlns:xacro="http://wiki.ros.org/xacro"> <xacro:macro name="imu" params="sensor_name parent_link *origin"> <xacro:property name="imu_offset_x" value="0" /> <xacro:property name="imu_offset_y" value="0" /> <xacro:property name="imu_offset_z" value="0.2" /> <xacro:property name="imu_size" value="0.05" /> <xacro:property name="imu_m" value="0.01" /> <!-- imu质量 --> <!-- imu --> <joint name="imutobase" type="fixed"> <!-- <origin xyz="${imu_offset_x} ${imu_offset_y} ${imu_offset_z}" rpy="0 0 0" /> --> <xacro:insert_block name="origin" /> <parent link="${parent_link}"/> <child link="imu_base"/> </joint> <link name="imu_base"> <visual> <origin rpy="0 0 0" xyz="0 0 0" /> <geometry> <box size="${imu_size} ${imu_size} ${imu_size}"/> </geometry> <material name= "black" > <color rgba="1.0 0.0 0.0 0.6" /> </material> </visual> <collision> <geometry> <box size="${imu_size} ${imu_size} ${imu_size}" /> </geometry> <origin xyz="0.0 0.0 0" rpy="0.0 0.0 0.0" /> </collision> <xacro:Box_inertial_matrix m = "${imu_m}" l = "${imu_size}" w = "${imu_size}" h = "${imu_size}"/> </link> <!-- 被引用的link --> <gazebo reference="imu_base"> <material>Gazebo/Bule</material> <gravity>true</gravity> <sensor name="imu_sensor" type="imu"> <always_on>true</always_on> <update_rate>100</update_rate> <visualize>true</visualize> <topic>__default_topic__</topic> <plugin filename="libgazebo_ros_imu_sensor.so" name="imu_plugin"> <topicName>imu/data</topicName> <bodyName>imu_base</bodyName> <updateRateHZ>100.0</updateRateHZ> <gaussianNoise>0.01</gaussianNoise> <xyzOffset>0 0 0</xyzOffset> <rpyOffset>0 0 0</rpyOffset> <frameName>imu_base</frameName> </plugin> <pose>0 0 0 0 0 0</pose> </sensor> </gazebo> </xacro:macro></robot>

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

6、添加RGB-D相机

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

$ git clone https://github.com/nilseuropa/realsense_ros_gazebo.git

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

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

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

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

7、LIO-SAM仿真安装依赖$ sudo apt-get install -y ros-noetic-navigation$ sudo apt-get install -y ros-noetic-robot-localization$ sudo apt-get install -y ros-noetic-robot-state-publisher安装GTSAM$ git clone https://github.com/borglab/gtsam$ cd gtsam$ mkdir build && cd build# 注意这里要加-DGTSAM_BUILD_WITH_MARCH_NATIVE=OFF这个选项,不然后面运行会报错$ cmake -DGTSAM_BUILD_WITH_MARCH_NATIVE=OFF ..$ sudo make install -j8$ sudo ln -s /usr/local/lib/libmetis-gtsam.so /usr/lib/libmetis-gtsam.so编译LIO-SAM$ cd ~/robot_ws/src$ git clone https://github.com/TixiaoShan/LIO-SAM$ cd ..$ catkin_make运行

首先启动仿真环境

$ roslaunch scout_gazebo scout_gazebo.launch

然后启动 lio-sam

$ roslaunch lio_sam run.launch

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

$ rosrun teleop_twist_keyboard teleop_twist_keyboard.py

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

8、源码

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

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

遇到的问题1、error: ‘class std::unordered_map<unsigned int, std::vector >’ has no member named ‘serialize’

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

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

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

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

3、运行时报错 [lio_sam_mapOptmization-5] process has died [pid 260348, exit code -11

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

4、运行时报错 error while loading shared libraries: libmetis-gtsam.so: cannot open shared object file: No such file or directory

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

5、运行时报 Warning: TF_REPEATED_DATA ignoring data with redundant timestamp for frame

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

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

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

本文链接地址:https://www.jiuchutong.com/zhishi/278515.html 转载请保留说明!

上一篇:Win10 预览版 21286更新了什么?Win10 预览版 21286更新介绍(windows 10预览版)

下一篇:Win10 20H1/20H2 KB5001391补丁今日发布(内附下载)

  • 小米测距仪在哪(小米测距仪在哪里设置)

    小米测距仪在哪(小米测距仪在哪里设置)

  • 小米手环5nfc怎么放音乐(小米手环5nfc怎么连接手机)

    小米手环5nfc怎么放音乐(小米手环5nfc怎么连接手机)

  • 微信运动看不到对方了(微信运动看不到对方了怎么恢复?)

    微信运动看不到对方了(微信运动看不到对方了怎么恢复?)

  • 苹果手表有什么功能(苹果手表有什么好玩的游戏)

    苹果手表有什么功能(苹果手表有什么好玩的游戏)

  • 红米手环有几种颜色呢(红米手环功能最全介绍)

    红米手环有几种颜色呢(红米手环功能最全介绍)

  • 微信绑定邮箱有什么用(微信绑定邮箱有风险吗)

    微信绑定邮箱有什么用(微信绑定邮箱有风险吗)

  • 电脑突然很卡很迟钝(电脑突然很卡很迟钝重启电脑也是,然后还连不上网)

    电脑突然很卡很迟钝(电脑突然很卡很迟钝重启电脑也是,然后还连不上网)

  • 度量cpu时钟主频的单位是(cpu时钟主频是什么单位)

    度量cpu时钟主频的单位是(cpu时钟主频是什么单位)

  • 苹果x搜不到wifi怎么回事(苹果x搜不到wifi或无法连接网络)

    苹果x搜不到wifi怎么回事(苹果x搜不到wifi或无法连接网络)

  • 钉钉能用电脑登录吗(钉钉用电脑登录会显示嘛)

    钉钉能用电脑登录吗(钉钉用电脑登录会显示嘛)

  • 抖音下单后为什么查不到订单(抖音下单后为什么查不到订单,抖音付了款没有找到订单)

    抖音下单后为什么查不到订单(抖音下单后为什么查不到订单,抖音付了款没有找到订单)

  • 密码锁系统锁定要多久才能恢复(密码锁系统锁定怎么解决)

    密码锁系统锁定要多久才能恢复(密码锁系统锁定怎么解决)

  • 抖音火山版多少火苗一块钱(抖音火山版多少火苗等于一元)

    抖音火山版多少火苗一块钱(抖音火山版多少火苗等于一元)

  • 管理信息系统有哪些(管理信息系统有关论文)

    管理信息系统有哪些(管理信息系统有关论文)

  • 登录微信显示操作频率过快(登录微信显示操作太频繁请稍后再试怎么办)

    登录微信显示操作频率过快(登录微信显示操作太频繁请稍后再试怎么办)

  • 高性能处理器拒绝访问(高性能处理器英文)

    高性能处理器拒绝访问(高性能处理器英文)

  • ipad突然关机就开不起来了怎么办(ipad突然关机就开不了充电黑屏了)

    ipad突然关机就开不起来了怎么办(ipad突然关机就开不了充电黑屏了)

  • ppt如何设置16:9模式(PPT如何设置倒计时)

    ppt如何设置16:9模式(PPT如何设置倒计时)

  • 固态硬盘在主板哪(固态硬盘在主板上的接口)

    固态硬盘在主板哪(固态硬盘在主板上的接口)

  • 华为crrul00 属于什么机型(华为型号crr-ul00手机)

    华为crrul00 属于什么机型(华为型号crr-ul00手机)

  • hdd和ssd区别(hdd是机械硬盘吗)

    hdd和ssd区别(hdd是机械硬盘吗)

  • 快手怎么刷赞

    快手怎么刷赞

  • 华为录屏黑屏咋回事(华为录屏怎么会黑屏怎么解决)

    华为录屏黑屏咋回事(华为录屏怎么会黑屏怎么解决)

  • 苹果x怎么关掉碰屏就亮(苹果X怎么关掉盲人模式)

    苹果x怎么关掉碰屏就亮(苹果X怎么关掉盲人模式)

  • 手机sd卡是不是内存卡(手机sd卡是不是电脑卡)

    手机sd卡是不是内存卡(手机sd卡是不是电脑卡)

  • qq名称前的耳朵符号是什么(qq名称前的耳朵怎么去掉)

    qq名称前的耳朵符号是什么(qq名称前的耳朵怎么去掉)

  • 电脑维修中常用的一些工具(电脑维修中常用的软件)

    电脑维修中常用的一些工具(电脑维修中常用的软件)

  • Ai实现FPS游戏自动瞄准 yolov5fps自瞄(游戏ai模式是什么意思)

    Ai实现FPS游戏自动瞄准 yolov5fps自瞄(游戏ai模式是什么意思)

  • js原型的实时性介绍(js原型函数)

    js原型的实时性介绍(js原型函数)

  • 房子税票是什么意思
  • 增值税额的计算公式写销售额除以1.13*0.13对吗
  • 无形资产专利技术计入什么科目
  • 或有资产的确认条件ACCA
  • 承兑汇票属于货款吗
  • 公允价值变动借方是增加还是减少
  • 发票查询校验码看不清怎么办
  • 财政部颁布的具体准则
  • 政策性用房包括哪些
  • 税控盘抵减增值税需要结转吗
  • 营改增后房地产企业增值税税率
  • 购买未完工的厂房会计分录
  • 权益资本成本率计算
  • 设备服务费是什么
  • 普通发票计量单位没填
  • 个人应纳税所得额怎么算
  • 私立幼儿园收的特色课费可以追回吗
  • 临时员工什么意思
  • 必要报酬率的计算公式Rm
  • 二手车销售统一专票哪里开
  • 接受捐赠后会引起
  • 没有收入能结转损益吗
  • 购进原材料科目
  • 怎么恢复系统win10
  • 以前年度多计提的税金怎么调整
  • 专票一年可以抵扣吗
  • 手撕票怎么做会计分录
  • macos itunes
  • windows10我得电脑
  • 房产置换是什么
  • SCHDPL32.EXE - SCHDPL32是什么进程 有什么用
  • 非合理损耗怎么做分录
  • 都柏林圣三一学院图片
  • 阿里php面试题
  • thinkphp分表
  • 期初金额和期末金额怎么算
  • php面试基础题
  • ahs日志
  • vue实现回车登录
  • 委托加工物资如何做账
  • 举报民间借贷利息收入所得税
  • 增值税普通发票和电子普通发票的区别
  • 转出未交增值税会计处理
  • 应付职工薪酬属于什么会计科目
  • 增值税销项税红字应如何报税
  • 政府补贴流程
  • 专项扣除影响实绩吗
  • 检查sqlserver是否安装完成
  • 工程分包需要注意什么
  • 个人增值税发票税率
  • 中秋福利做账
  • 增值税税控系统技术维护费怎么抵扣
  • 其他应付款借方余额怎么调整
  • 损益类科目调整到未分配利润分录
  • 公司自己搭建的房子出租可以按投资性房地产吗
  • 进项税额已抵扣又红字冲红税务系统自动冲回吗
  • 未达到起征点的税金怎么做凭证
  • mysql查询语句大全及用法
  • mongodb与mysql相比的优缺点
  • 当恢复系数e=1时碰撞属于什么碰撞
  • 怎么关闭windows更新提示
  • win8分盘怎么分
  • windows8的word在哪里
  • win7系统添加右键菜单在哪里设置
  • Win10预览版拆弹
  • win7开机系统恢复
  • unity Toggle Groud
  • android 界面滑动
  • 浅析js动态创建方法
  • unity编辑工具软件介绍
  • node.js 配置
  • javascript面向对象精要pdf
  • css怎么设置
  • 土地招标拍卖挂牌
  • 旅游景区可免交土地使用税
  • 租房完税证明需要房东交钱吗?
  • 大同县税务局
  • 房屋赠与给子女要交多少税
  • 天津市东丽区军粮城派出所电话
  • 昱铭这个公司名字怎么样
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设