在gazebo里搭建一个livox mid360 + 惯导仿真平台测试 FAST-LIO2

在gazebo里搭建一个livox mid360 + 惯导仿真平台测试 FAST-LIO2

  • 前言
  • 立方体平台
  • 加入 livox mid360 激光雷达
  • 加入IMU模块
  • 调整底盘大小 并设计调用接口
  • 测试 Fast-Lio2

前言

livox mid360 在官网一直没有货,在gazebo里可以仿真该雷达形式的点云。

但是其只发布雷达的数据,没有imu数据,实际的雷达是可以发布既有雷达也有imu的数据的

运行 FAST-LIO2 也需要雷达和惯导的数据

本篇博客在gazebo中搭建了一个有livox mid360 和惯导的平台,并成功运行了FAST-LIO2

立方体平台

先做一个最简单的立方体平台,用来放livox mid360 和惯导

编写一个xacro文件,如下

<?xml version="1.0"?>
<robot xmlns:xacro="http://www.ros.org/wiki/xacro" name="example"><!-- Base Footprint --><link name="base_footprint" /><!-- Base Link --><joint name="footprint" type="fixed" ><parent link="base_footprint" /><child link="link_platform" /><origin xyz="0 0 0.05" rpy="0 0 0" /></joint><link name="link_platform" ><visual><geometry><box size="0.5 0.5 0.1" /></geometry></visual><collision><geometry><box size="0.5 0.5 0.1" /></geometry></collision><inertial><origin xyz="0 0 0"/><mass value="0.01"/><inertia ixx="0.001" ixy="0.0" ixz="0.0"iyy="0.001" iyz="0.0" izz="0.001" /></inertial></link></robot>

写一个launch文件来启动它,加载到gazebo和rivz中

<?xml version="1.0" ?>
<launch><arg name="paused" default="false"/><arg name="use_sim_time" default="true"/><arg name="gui" default="true"/><arg name="headless" default="false"/><arg name="debug" default="false"/><arg name="verbose" default="false"/><!-- Start gazebo and load the world --><include file="$(find gazebo_ros)/launch/empty_world.launch" ><arg name="paused" value="$(arg paused)"/><arg name="use_sim_time" value="$(arg use_sim_time)"/><arg name="gui" value="$(arg gui)"/><arg name="headless" value="$(arg headless)"/><arg name="debug" value="$(arg debug)"/><arg name="verbose" value="$(arg verbose)"/></include>
![在这里插入图片描述](https://img-blog.csdnimg.cn/1a7fdea939be47c8b0a1c6d7d064e1fa.png)![在这里插入图片描述](https://img-blog.csdnimg.cn/1a7fdea939be47c8b0a1c6d7d064e1fa.png)<!-- Spawn the platform --><param name="robot_description" command="$(find xacro)/xacro --inorder '$(find livox_laser_simulation)/urdf/mid360_IMU_platform.xacro' " /><node pkg="gazebo_ros" type="spawn_model" name="spawn_model" args="-urdf -param /robot_description -model example"/><node pkg="robot_state_publisher" type="robot_state_publisher" name="robot_state_publisher"><param name="publish_frequency" type="double" value="30.0" /></node><!-- RViz --><arg name="rviz" default="true"/><node if="$(arg rviz)" pkg="rviz" type="rviz" name="$(anon rviz)" respawn="false" output="screen" args="-d $(find livox_laser_simulation)/rviz/mid360_IMU_platform.rviz" /></launch>

启动

roslaunch livox_laser_simulation mid360_IMU_platform.launch

gazebo 和rviz 中会出现下面的立方体,具体的尺寸和颜色可以最后再根据雷达和惯导再调整
在这里插入图片描述

加入 livox mid360 激光雷达

下一步向平台上加入 livox mid360 激光雷达, 放在平台的中心。

向 livox_laser_simulation/urdf/mid360_IMU_platform.xacro 文件中加入下面代码

  <joint name="lidar_platform" type="fixed" ><parent link="link_platform" /><child link="livox_base" /><origin xyz="0 0 0.08" rpy="0 0 0" /></joint><xacro:include filename="$(find livox_laser_simulation)/urdf/livox_mid360.xacro"/><xacro:Livox_Mid360 name="livox"/>

再次启动launch文件即可,看到平台中央多了livox mid360 雷达
在这里插入图片描述
确认雷达输出点云正常,可向周围加入几个物体测试

在这里插入图片描述
点云正常

加入IMU模块

向平台中加入IMU模块,放在雷达的前方一点

向 livox_laser_simulation/urdf/mid360_IMU_platform.xacro 文件中加入下面代码

    <!--imu --><link name="imu_base_link"><visual><origin xyz="0 0 0" rpy="0 0 0" /><geometry ><box size="0.03 0.03 0.03" /></geometry></visual><collision><origin xyz="0 0 0" rpy="0 0 0" /><geometry ><box size="0.03 0.03 0.03" /></geometry></collision>   <inertial><mass value="0.001"/><inertia ixx="0.001" ixy="0.0" ixz="0.0" iyy="0.001" iyz="0.0" izz="0.001"/></inertial> </link><gazebo reference="imu_base_link"><material>Gazebo/Green</material><turnGravityOff>true</turnGravityOff></gazebo><joint name="imu_platform_joint" type="fixed"><parent link="link_platform"/><child link="imu_base_link"/><origin xyz="0.05 0 0.065" rpy="0 0 0" /><axis xyz="0 0 1" /></joint><gazebo reference="imu_base_link"><gravity>true</gravity><sensor name="imu_sensor" type="imu"><always_on>true</always_on><update_rate>200</update_rate><visualize>true</visualize><topic>/livox/imu</topic><plugin filename="libgazebo_ros_imu_sensor.so" name="imu_plugin"><topicName>/livox/imu</topicName>         <bodyName>imu_base_link</bodyName><updateRateHZ>200.0</updateRateHZ>    <gaussianNoise>0.00329</gaussianNoise>   <xyzOffset>0 0 0</xyzOffset>     <rpyOffset>0 0 0</rpyOffset><frameName>imu_base_link</frameName>        </plugin><pose>0 0 0 0 0 0</pose></sensor></gazebo>

再次启动launch文件即可,看到平台中 的livox mid360 雷达 前多了一个绿色的小方块,它即为刚建立惯导模型
在这里插入图片描述
通过rostopic 查看 惯导数据是否正常
在这里插入图片描述
数据正常

调整底盘大小 并设计调用接口

下一步需要调整底盘平台的大小,能够放下雷达和惯导即可

将底盘尺寸改为如下

<box size="0.15 0.1 0.1" />

在这里插入图片描述
回来平台的前方挂个双目也不错

带有雷达和惯导的平台搭建完了

但是这个平台无法运动,也就完成不了建图,如果运行需要将平台挂载到小车或者无人机上。
所以需要对这个平台设计好接口,方便其它移动平台挂载。

修改 livox_laser_simulation/urdf/mid360_IMU_platform.xacro 这个文件

最后的文件如下:

<?xml version="1.0"?>
<robot xmlns:xacro="http://www.ros.org/wiki/xacro" name="example"><!-- Base Footprint --><!-- <link name="base_footprint" /> --><xacro:macro name="LivoxMid360_IMU_Plantform" params="name:=mid360_imu_plantform parent_link_name:=base_link x:=0.0 y:=0.0 z:=0.05 r:=0.0 p:=0.0 yaw:=0.0"><joint name="${name}_joint" type="fixed" ><parent link="${parent_link_name}" /><child link="link_platform" /><origin xyz="${x} ${y} ${z}" rpy="${r} ${p} ${yaw}" /></joint><!-- link_platform --><link name="link_platform" ><visual><geometry><box size="0.15 0.1 0.1" /></geometry></visual><collision><geometry><box size="0.15 0.1 0.1" /></geometry></collision><inertial><origin xyz="0 0 0"/><mass value="0.001"/><inertia ixx="0.001" ixy="0.0" ixz="0.0"iyy="0.001" iyz="0.0" izz="0.001" /></inertial></link><gazebo reference="link_platform"><turnGravityOff>false</turnGravityOff></gazebo><joint name="lidar_platform_joint" type="fixed" ><parent link="link_platform" /><child link="livox_base" /><origin xyz="0 0 0.08" rpy="0 0 0" /></joint><!--lidar --><xacro:include filename="$(find livox_laser_simulation)/urdf/livox_mid360.xacro"/><xacro:Livox_Mid360 name="livox"/><!--imu --><link name="imu_base_link"><visual><origin xyz="0 0 0" rpy="0 0 0" /><geometry ><box size="0.03 0.03 0.03" /></geometry></visual><collision><origin xyz="0 0 0" rpy="0 0 0" /><geometry ><box size="0.03 0.03 0.03" /></geometry></collision>  <inertial><mass value="0.001"/><inertia ixx="0.001" ixy="0.0" ixz="0.0" iyy="0.001" iyz="0.0" izz="0.001"/></inertial></link><gazebo reference="imu_base_link"><material>Gazebo/Green</material><turnGravityOff>false</turnGravityOff></gazebo><joint name="imu_platform_joint" type="fixed"><parent link="link_platform"/><child link="imu_base_link"/><origin xyz="0.05 0 0.065" rpy="0 0 0" /><axis xyz="0 0 1" /></joint><gazebo reference="imu_base_link"><gravity>true</gravity><sensor name="imu_sensor" type="imu"><always_on>true</always_on><update_rate>200</update_rate><visualize>true</visualize><topic>/livox/imu</topic><plugin filename="libgazebo_ros_imu_sensor.so" name="imu_plugin"><topicName>/livox/imu</topicName>         <bodyName>imu_base_link</bodyName><updateRateHZ>200.0</updateRateHZ>    <gaussianNoise>0.00329</gaussianNoise>   <xyzOffset>0 0 0</xyzOffset>     <rpyOffset>0 0 0</rpyOffset><frameName>imu_base_link</frameName>        </plugin><pose>0 0 0 0 0 0</pose></sensor></gazebo></xacro:macro></robot>

将其挂载到飞机上,代码如下:的几款雷达进行了仿真测试。

  <xacro:include filename="$(find livox_laser_simulation)/urdf/mid360_IMU_platform.xacro"/><xacro:LivoxMid360_IMU_Plantform name ="mid360_imu_plantform" parent_link_name="${namespace}/base_link" x="0"  y="0" z="0.08" r="0"  p="0" yaw="0" /> 

最终效果如下:
在这里插入图片描述

测试 Fast-Lio2

用这个平台跑Fast-Lio2 还需要有一步,就是修改雷达的仿真程序,使其发送Livox的Custcom格式的点云,这个方法会放到其它博客中

调通后,用其跑Fast-Lio2 效果如下:

在这里插入图片描述

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/235007.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C#学习-8课时

P10 输入输出程序编写 相同类型的可以直接相加&#xff1b; cwtabtabconsole.Writeline(); using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace C_8_1 { class Program { s…

【腾讯云云上实验室-向量数据库】个人对腾讯云向量数据库的体验心得

目录 前言Tencent Cloud VectorDB概念使用初体验腾讯云向量数据库的优势应用场景有哪些&#xff1f;未来展望番外篇&#xff1a;腾讯云向量数据库的设计核心结语 前言 还是那句话&#xff0c;不用多说想必大家都能猜到&#xff0c;现在技术圈最火的是什么&#xff1f;非人工智…

MySQL实现(高可用方案-MHA安装及配置)

MySQL高可用性解决方案Master High Availability (MHA) 是一种在 MySQL 故障转移环境中实现快速故障转移和数据保护的开源软件。MHA 能在 MySQL 主节点发生故障时&#xff0c;自动将备节点提升为主节点&#xff0c;并且不会中断正在进行的 SQL 操作。 需求&#xff1a;主从配置…

【Mybatis】基础增删改查

一.创建SpringBoot项目 创建新项目需要添加的依赖 当然如果是以前的项目也可以直接在pom.xml文件中添加依赖: MySQL Driver依赖 <dependency><groupId>com.mysql</groupId><artifactId>mysql-connector-j</artifactId><scope>runtime</…

MMdetection3.0 问题

MMdetection3.0 问题 希望各位路过的大佬指教一下&#xff1a; 问题&#xff1a; 1、NWPU-VHR-10有标注的数据一共650张&#xff0c;我将其分为了455张训练集&#xff0c;195张验证集。 2、然后使用MMdetection3.0框架中的Faster-rcnn网络进行训练&#xff0c;设置训练参数b…

PromptRank:使用Prompt进行无监督关键词提取

论文题目&#xff1a;PromptRank: Unsupervised Keyphrase Extraction Using Prompt   论文日期&#xff1a;2023/05/15(ACL 2023)   论文地址&#xff1a;https://arxiv.org/abs/2305.04490   GitHub地址&#xff1a;https://github.com/HLT-NLP/PromptRank 文章目录 Ab…

[蓝桥杯习题]———位运算、判断二进制1个数

⭐Hello!这里是欧_aita的博客。 ⭐今日语录&#xff1a;行动胜过一切。 ⭐个人主页&#xff1a;欧_aita ψ(._. )>⭐个人专栏&#xff1a; 数据结构与算法&#xff08;内含蓝桥杯习题&#xff09; MySQL数据库 位运算 位运算位运算的定义简单运用 实战刷题题目思路代码实现声…

【Lustre相关】功能实践-01-Lustre集群部署配置

文章目录 一、前言1、关于io5002、关于HPC3、软件架构4、部署方式 二、软件安装1、配置yum源2、内核安装2、服务端安装3、客户端安装4、zfs安装 三、集群部署1、关闭防火墙及SELinux2、配置网络2.1、通用格式2.2、参考示例 3、配置zfs&#xff08;可选&#xff09;3.1、通用格式…

Springboot+vue的客户关系管理系统(有报告),Javaee项目,springboot vue前后端分离项目

演示视频&#xff1a; Springbootvue的客户关系管理系统&#xff08;有报告&#xff09;&#xff0c;Javaee项目&#xff0c;springboot vue前后端分离项目 项目介绍&#xff1a; 本文设计了一个基于Springbootvue的前后端分离的客户关系管理系统&#xff0c;采用M&#xff08…

电商项目之Web实时消息推送(附源码)

文章目录 1 问题背景2 前言3 什么是消息推送4 短轮询5 长轮询5.1 demo代码 6 iframe流6.1 demo代码 7 SSE7.1 demo代码7.2 生产环境的应用 &#xff08;重要&#xff09; 8 MQTT 1 问题背景 扩宽自己的知识广度&#xff0c;研究一下web实时消息推送 2 前言 文章参考自Web 实时消…

用户注册这样玩,保你平安

前言 基本上每个系统系统都包含用户注册、发送验证码等基本操作。在前些年&#xff0c;我还记得我在逛 csdn、贴吧、网易新闻等网站的时候是可以不登陆也能浏览完网页内容的&#xff0c;但是近几年这些网站已经改成了不登陆不让用&#xff0c;浏览网页时不时提醒你要进行登录&…