当前位置: 首页 > news >正文

仿真实现lio_sam建图和ndt_matching定位

文章目录

  • 一、仿真环境
  • 二、lio_sam建图
    • 1.修改配置文件
    • 2.开始建图
  • 三、ndt_matching定位
    • 1.新建启动文件
    • 2.启动
  • 总结


一、仿真环境

使用现有开源的仿真环境—从零开始搭建一台ROS开源迷你无人车,作者已经配置好小车模型以及gazebo环境,imu频率已改为200HZ,文中也有详细的说明,这里就不再介绍。

启动仿真

roslaunch steer_mini_gazebo steer_mini_sim_sensors_VLP16_lio_sam.launch 

在这里插入图片描述话题如下:

/ackermann_steering_controller/cmd_vel
/ackermann_steering_controller/odom
/clock
/gains/left_rear_joint/parameter_descriptions
/gains/left_rear_joint/parameter_updates
/gains/right_rear_joint/parameter_descriptions
/gains/right_rear_joint/parameter_updates
/gazebo/link_states
/gazebo/model_states
/gazebo/parameter_descriptions
/gazebo/parameter_updates
/gazebo/set_link_state
/gazebo/set_model_state
/imu/data
/joint_states
/rosout
/rosout_agg
/tf
/tf_static
/velodyne_points

控制小车移动,打开一个终端,录制所有话题(也可录制需要的话题),会自动在终端所在的文件夹下根据当前时间产生bag文件。

rosbag record -a

二、lio_sam建图

lio_sam的安装测试可参考Lego-LOAM和LIO_SAM的使用及地图的处理

1.修改配置文件

在LIO-SAM/config下的params.yaml文件中

修改为自己小车的话题

  # TopicspointCloudTopic: "/velodyne_points"              imuTopic: "/imu/data"                         odomTopic: "/odometry/imu"                   gpsTopic: "odometry/gpsz"                   

修改保存路径

  # Export settingssavePCD: true                              savePCDDirectory: "/Downloads/"        

修改imu到雷达的坐标变换

  # Extrinsics: T_lb (lidar -> imu)extrinsicTrans: [0.0, 0.0, 0.0]extrinsicRot: [1, 0, 0,0, 1, 0,0, 0, 1]extrinsicRPY: [1, 0, 0,0, 1, 0,0, 0, 1]

其它的保持默认即可。

2.开始建图

	roslaunch lio_sam run.launch rosbag play your.bag 

在这里插入图片描述
保存的PCD—GlobalMap.pcd

在这里插入图片描述

三、ndt_matching定位

1.新建启动文件

使用Autoware.ai中的ndt_matching定位模块。为了适配前方,需要对应仿真的数据进行如下修改

autoware.ai/src/autoware/documentation/autoware_quickstart_examples/config路径:
新建headless_setup_steer_mini.yaml 内容如下:

tf_x: 0
tf_y: 0
tf_z: 0.115
tf_yaw: 0
tf_pitch: 0
tf_roll: 0localizer: velodyne
use_sim_time: false

.autoware/data/tf 路径:
新建tf_steer_mini.launch

<launch>
<!-- worldからmapへのtf -->
<node pkg="tf2_ros"  type="static_transform_publisher" name="world_to_map" args="0 0 0 0 0 0 /world /map" />
<!-- mapからmobilityへのtf -->
<!-- <node pkg="tf2_ros"  type="static_transform_publisher" name="map_to_mobility" args="0 0 0 0 0 0 /map /mobility" />-->
<node pkg="tf2_ros"  type="static_transform_publisher" name="base_link_to_velodyne" args="0 0 0.115 0 0 0 /base_link /velodyne" />
</launch>

autoware.ai/src/autoware/documentation/autoware_quickstart_examples/launch/rosbag_demo路径下:
新建my_map_steer_mini.launch内容如下

<launch><rosparam command="load" file="$(find autoware_quickstart_examples)/config/headless_setup_steer_mini.yaml" /><include file="$(env HOME)/.autoware/data/tf/tf_steer_mini.launch"/><node pkg="map_file" type="points_map_loader" name="points_map_loader" args="noupdate $(env HOME)/.autoware/data/map/pointcloud_map/GlobalMap.pcd"/></launch>

autoware.ai/src/autoware/core_perception/lidar_localizer/launch路径下:
新建ndt_matching_steer_mini.launch内容如下:

<launch><arg name="method_type" default="0" /> <!-- pcl_generic=0, pcl_anh=1, pcl_anh_gpu=2, pcl_openmp=3 --><arg name="use_gnss" default="0" /><arg name="use_odom" default="true" /><arg name="use_imu" default="true" /><arg name="imu_upside_down" default="false" /><arg name="imu_topic" default="/imu/data" /><arg name="queue_size" default="1" /><arg name="offset" default="linear" /><arg name="get_height" default="false" /><arg name="use_local_transform" default="false" /><arg name="sync" default="false" /><arg name="output_log_data" default="false" /><arg name="gnss_reinit_fitness" default="500.0" /><node pkg="lidar_localizer" type="ndt_matching" name="ndt_matching" output="log"><param name="method_type" value="$(arg method_type)" /><param name="use_gnss" value="$(arg use_gnss)" /><param name="use_odom" value="$(arg use_odom)" /><param name="use_imu" value="$(arg use_imu)" /><param name="imu_upside_down" value="$(arg imu_upside_down)" /><param name="imu_topic" value="$(arg imu_topic)" /><param name="queue_size" value="$(arg queue_size)" /><param name="offset" value="$(arg offset)" /><param name="get_height" value="$(arg get_height)" /><param name="use_local_transform" value="$(arg use_local_transform)" /><param name="output_log_data" value="$(arg output_log_data)" /><param name="gnss_reinit_fitness" value="$(arg gnss_reinit_fitness)" /><remap from="/points_raw" to="/sync_drivers/points_raw" if="$(arg sync)" /></node></launch>

同时修改ndt_matching.cpp中的里程计接收话题

  // ros::Subscriber odom_sub = nh.subscribe("/vehicle/odom", _queue_size * 10, odom_callback);  //defaultros::Subscriber odom_sub = nh.subscribe("/ackermann_steering_controller/odom", _queue_size * 10, odom_callback);

autoware.ai/src/autoware/core_perception/points_downsampler/launch路径下:
新建points_downsample_steer_mini.launch

<launch><arg name="sync" default="false" /><arg name="node_name" default="voxel_grid_filter" /><arg name="points_topic" default="/velodyne_points" /><arg name="output_log" default="false" /><arg name="measurement_range" default="200" /><node pkg="points_downsampler" name="$(arg node_name)" type="$(arg node_name)"><param name="points_topic" value="$(arg points_topic)" /><remap from="/points_raw" to="/sync_drivers/points_raw" if="$(arg sync)" /><param name="output_log" value="$(arg output_log)" /><param name="measurement_range" value="$(arg measurement_range)" /></node>
</launch>

autoware.ai/src/autoware/documentation/autoware_quickstart_examples/launch/rosbag_demo路径下:
新建my_localization_steer_mini.launch

<launch><!-- setting path parameter --><arg name="get_height" value="true" /><!-- Setup <include file="$(find runtime_manager)/launch_files/setup_tf.launch"><arg name="x" value="1.2" /><arg name="y" value="0.0" /><arg name="z" value="2.0" /><arg name="yaw" value="0.0" /><arg name="pitch" value="0.0" /><arg name="roll" value="0.0" /><arg name="frame_id" value="/base_link" /><arg name="child_frame_id" value="/velodyne" /><arg name="period_in_ms" value="10"/></include>--><!-- <include file="$(find vehicle_description)/launch/vehicle_model.launch" />  --><!-- points downsampler --><include file="$(find points_downsampler)/launch/points_downsample_steer_mini.launch" /><!-- nmea2tfpose --><!-- <include file="$(find gnss_localizer)/launch/nmea2tfpose.launch"/>  --><!-- ndt_matching --><include file="$(find lidar_localizer)/launch/ndt_matching_steer_mini.launch"><arg name="get_height" value="$(arg get_height)" /></include></launch>

2.启动

roslaunch autoware_quickstart_examples my_map_steer_mini.launch
roslaunch autoware_quickstart_examples my_localization_steer_mini.launch
rviz
给定初始位姿(必须)
rosbag play your.bag

效果图:

在这里插入图片描述


总结

以上实现了仿真场景下使用lio_sam建图以及ndt_matching定位的过程,仅仅作为测试使用,存在仿真场景较小,没有在机器人模型中添加gps数据的问题,整体上达到定位的要求。

相关文章:

仿真实现lio_sam建图和ndt_matching定位

文章目录 一、仿真环境二、lio_sam建图1.修改配置文件2.开始建图 三、ndt_matching定位1.新建启动文件2.启动 总结 一、仿真环境 使用现有开源的仿真环境—从零开始搭建一台ROS开源迷你无人车&#xff0c;作者已经配置好小车模型以及gazebo环境&#xff0c;imu频率已改为200HZ…...

IDEA取消git对项目的版本控制

前言 前几天新建项目的时候不小心选了个git仓库&#xff0c;导致这个测试项目一直被git管理着。 解决办法 1 右键项目 选择打开资源目录 2 删除.git文件 把目录下的.git文件删掉 3 删除idea中的git管理 删除完.git文件后&#xff0c;进入idea&#xff0c;右下角会有这样的提…...

如何聪明地编写测试

作者&#xff5c;Maxim Schepelin Booking公司软件开发工程师 编译整理&#xff5c;TesterHome 以下为作者观点&#xff1a; 在我&#xff08;作者&#xff09;的职业生涯中&#xff0c;我多次看到团队如何开始自动化测试&#xff0c;当然并非所有尝试都成功。在这篇文章中…...

CF1866M Mighty Rock Tower

CF题面 luogu题面 期望题。 题目大意&#xff1a;一个人在搭积木&#xff0c;每次堆叠可能成功或失败&#xff0c;失败可能导致其下面连续的若干块掉落。给定搭每一块时失败的概率&#xff0c;求堆叠完成的期望次数。 具体的&#xff0c;假设当前正在堆叠第 i 块&#xff0c;…...

【漏洞复现】Apache_Tomcat7+ 弱口令 后台getshell漏洞

感谢互联网提供分享知识与智慧&#xff0c;在法治的社会里&#xff0c;请遵守有关法律法规 文章目录 1.1、漏洞描述1.2、漏洞等级1.3、影响版本1.4、漏洞复现1、基础环境2、漏洞扫描3、漏洞验证 说明内容漏洞编号漏洞名称Tomcat7 弱口令 && 后台getshell漏洞漏洞评级高…...

2023-11-7 OpenAI 45 分钟发布会:演示关于 GPT Store 构建 GPT、零代码创建 AI Agent

本心、输入输出、结果 文章目录 2023-11-7 OpenAI 45 分钟发布会&#xff1a;演示关于 GPT Store 构建 GPT、零代码创建 AI Agent前言Sam Altman 正在创建一个「创业导师 GPT」零代码创建 AI AgentAssistants API 封装的能力包括 Sam Altman 对发布会总结相关链接弘扬爱国精神 …...

嵌入式系统中的FPGA

举个栗子 假设你有一台智能家居系统&#xff0c;其中的FPGA可以被类比为智能家居中的中央控制器。 智能家居系统&#xff1a; 定制家居逻辑&#xff1a; 你希望智能家居系统能够根据你的生活习惯、时间表和喜好自动控制灯光、温度、窗帘等设备。就像FPGA中可以根据需求重新配置…...

String,StringBulider,StringBuffer的简单说明

目录 1.String 2.StringBuffer 3.StringBuilder 4.线程安全的验证 1.String String是声明在java.lang下的一个类。 String被定义为final&#xff0c;表示不能被继承。内部定义了final char value[]用于存储字符串数据&#xff0c;所以String对象的值是不可改变的。每次对S…...

Python编程题集(第一部分基本语法基础)

Demo01 摄氏温度转化为华氏温度 题目描述&#xff1a; 输入一个摄氏温度的值&#xff0c;将它转变为华氏温度&#xff0c;并将结果输出 转换的公式为如下&#xff1a;fahrenheit (9 / 5 ) * celsius 32 输入输出描述 输入一个值表示摄氏温度celsius 输出华氏温度fahren…...

手动关闭PS中的TopazStudio2的登录窗口

2021 adobe photoshop Topaz Studio 2 不是使用防火墙出站规则&#xff0c;是手动关闭的解决方案 点击社区-切换用户&#xff0c;登录窗口会出现X&#xff0c;可以手动关闭...

[elastic 8.x]java客户端连接elasticsearch与操作索引与文档

初始化客户端 引入相关依赖 <dependency><groupId>co.elastic.clients</groupId><artifactId>elasticsearch-java</artifactId><version>8.10.2</version> </dependency>初始化客户端 为了方便演示&#xff0c;我关闭了ela…...

接口测试总结

本文主要分为两个部分&#xff1a; 第一部分&#xff1a;主要从问题出发&#xff0c;引入接口测试的相关内容并与前端测试进行简单对比&#xff0c;总结两者之前的区别与联系。但该部分只交代了怎么做和如何做&#xff1f;并没有解释为什么要做&#xff1f; 第二部分&#xff1…...

计算机基础知识44

overflow溢出属性 visible&#xff1a;默认值&#xff0c;内容不会被修剪&#xff0c;会呈现在元素框之外。hidden&#xff1a;内容会被修剪&#xff0c;并且其余内容是不可见的。scroll&#xff1a;内容会被修剪&#xff0c;但是浏览器会显示滚动条以便查看其余的内容。auto: …...

【StringBuilder和StringBuffer】

文章目录 StringBuilder和StringBufferString类、StringBuilder和StringBuffer的区别 StringBuilder和StringBuffer的区别StringBuilder 字符串逆置 StringBuilder和StringBuffer String类、StringBuilder和StringBuffer的区别 String类的特点是不可变性&#xff0c;所以Stri…...

用java代码实现security

Java中security的实现主要涉及到以下几个方面&#xff1a; 认证(Authentication) 认证是确认用户身份的过程&#xff0c;Java中提供了不同的认证机制来保护应用程序不被未授权的用户访问。常用的认证机制有以下几种&#xff1a; 基于口令的认证&#xff1a;要求用户输入用户名…...

【Java 进阶篇】Java Session 原理及快速入门

大家好&#xff0c;欢迎来到本篇博客。今天&#xff0c;我们将探讨Java Web开发中一个重要而令人兴奋的概念&#xff0c;即Session&#xff08;会话&#xff09;。Session是一种在Web应用程序中跟踪用户状态和数据的机制。我们将深入了解Session的原理&#xff0c;并通过示例来…...

MoveFunsDAO 星航计划|从Move入门Web3与深入实践「公益课堂」

Move 语言作为最安全的编程语言之一&#xff0c;在资产的安全性和保护方面有着显著优势&#xff0c;被寄予引领 Web3 世界的全新叙事的厚望。 随着 Sui 在今年五月主网上线&#xff0c;它为 Move 生态带来一股新的浪潮。上线以来&#xff0c;Sui 公链的开发活跃度持续数月位居…...

RabbitMQ常用命令(一)

启动和关闭 1、启动RabbitMQ rabbitmq-server start & 注意&#xff1a;这里可能会出现错误&#xff0c;错误原因是/var/lib/rabbitmq/.erlang.cookie文件权限不够。 解决方案对这个文件授权 chown rabbitmq:rabbitmq /var/lib/rabbitmq/.erlang.cookie chmod 400 /va…...

在教育领域,AI垂直大模型应用场景总结!

1. 智能教育助手&#xff1a; 这种模型可以通过语音或文本与学生进行交互&#xff0c;提供个性化的学习建议和答疑解惑。根据学生的学习习惯和知识水平&#xff0c;推荐适合的学习资源&#xff0c;并提供实时的辅导和反馈。 2. 智能作文批改助手&#xff1a; 这种模型可以对…...

基于级联广义积分器(CGI)的谐波信号提取MATLAB仿真

微❤关注“电气仔推送”获得资料&#xff08;专享优惠&#xff09; 此方法可用于信号检测、虚拟阻抗合成、锁相环等方面。 在现有的信号提取方法中&#xff0c;众多学者采用了SOGI法、LPF法以及正交信号发生器等方法。当输入信号中不存在直流分量&#xff0c;只有谐波分量时&…...

【力扣数据库知识手册笔记】索引

索引 索引的优缺点 优点1. 通过创建唯一性索引&#xff0c;可以保证数据库表中每一行数据的唯一性。2. 可以加快数据的检索速度&#xff08;创建索引的主要原因&#xff09;。3. 可以加速表和表之间的连接&#xff0c;实现数据的参考完整性。4. 可以在查询过程中&#xff0c;…...

服务器硬防的应用场景都有哪些?

服务器硬防是指一种通过硬件设备层面的安全措施来防御服务器系统受到网络攻击的方式&#xff0c;避免服务器受到各种恶意攻击和网络威胁&#xff0c;那么&#xff0c;服务器硬防通常都会应用在哪些场景当中呢&#xff1f; 硬防服务器中一般会配备入侵检测系统和预防系统&#x…...

对WWDC 2025 Keynote 内容的预测

借助我们以往对苹果公司发展路径的深入研究经验&#xff0c;以及大语言模型的分析能力&#xff0c;我们系统梳理了多年来苹果 WWDC 主题演讲的规律。在 WWDC 2025 即将揭幕之际&#xff0c;我们让 ChatGPT 对今年的 Keynote 内容进行了一个初步预测&#xff0c;聊作存档。等到明…...

Qwen3-Embedding-0.6B深度解析:多语言语义检索的轻量级利器

第一章 引言&#xff1a;语义表示的新时代挑战与Qwen3的破局之路 1.1 文本嵌入的核心价值与技术演进 在人工智能领域&#xff0c;文本嵌入技术如同连接自然语言与机器理解的“神经突触”——它将人类语言转化为计算机可计算的语义向量&#xff0c;支撑着搜索引擎、推荐系统、…...

实现弹窗随键盘上移居中

实现弹窗随键盘上移的核心思路 在Android中&#xff0c;可以通过监听键盘的显示和隐藏事件&#xff0c;动态调整弹窗的位置。关键点在于获取键盘高度&#xff0c;并计算剩余屏幕空间以重新定位弹窗。 // 在Activity或Fragment中设置键盘监听 val rootView findViewById<V…...

OpenLayers 分屏对比(地图联动)

注&#xff1a;当前使用的是 ol 5.3.0 版本&#xff0c;天地图使用的key请到天地图官网申请&#xff0c;并替换为自己的key 地图分屏对比在WebGIS开发中是很常见的功能&#xff0c;和卷帘图层不一样的是&#xff0c;分屏对比是在各个地图中添加相同或者不同的图层进行对比查看。…...

Redis数据倾斜问题解决

Redis 数据倾斜问题解析与解决方案 什么是 Redis 数据倾斜 Redis 数据倾斜指的是在 Redis 集群中&#xff0c;部分节点存储的数据量或访问量远高于其他节点&#xff0c;导致这些节点负载过高&#xff0c;影响整体性能。 数据倾斜的主要表现 部分节点内存使用率远高于其他节…...

【数据分析】R版IntelliGenes用于生物标志物发现的可解释机器学习

禁止商业或二改转载&#xff0c;仅供自学使用&#xff0c;侵权必究&#xff0c;如需截取部分内容请后台联系作者! 文章目录 介绍流程步骤1. 输入数据2. 特征选择3. 模型训练4. I-Genes 评分计算5. 输出结果 IntelliGenesR 安装包1. 特征选择2. 模型训练和评估3. I-Genes 评分计…...

免费数学几何作图web平台

光锐软件免费数学工具&#xff0c;maths,数学制图&#xff0c;数学作图&#xff0c;几何作图&#xff0c;几何&#xff0c;AR开发,AR教育,增强现实,软件公司,XR,MR,VR,虚拟仿真,虚拟现实,混合现实,教育科技产品,职业模拟培训,高保真VR场景,结构互动课件,元宇宙http://xaglare.c…...

C# 表达式和运算符(求值顺序)

求值顺序 表达式可以由许多嵌套的子表达式构成。子表达式的求值顺序可以使表达式的最终值发生 变化。 例如&#xff0c;已知表达式3*52&#xff0c;依照子表达式的求值顺序&#xff0c;有两种可能的结果&#xff0c;如图9-3所示。 如果乘法先执行&#xff0c;结果是17。如果5…...