ROS机器人虚拟仿真挑战赛持续学习笔记-20240619

news2025/1/6 19:04:14

cartographer

需要全手工编译……比较麻烦。

如果使用新版ceres-solver,版本2.x,需要修改源码,部分“接口代码”有改动。

稳妥使用ceres-solver-1.13.0,且需要安装abseil-cpp。

验证是否成功,使用roscd或roslaunch,查看一下是否有对于功能包:


map

只有room_mini和tianracer_racetrack.pgm提供了“原装”地图。

没有提供地图的world需要建图之后才能更好的导航,或者选用行为式控制器,而非路径算法类规划器。跑圈算法可分为有地图和无地图两种:

  1. 有地图-需要SLAM了……/(ㄒoㄒ)/~~
  2. 无地图-后续有空再写

 /(ㄒoㄒ)/~~

此处省略……

原版参数:

image: room_mini.pgm
resolution: 0.050000
origin: [-50.000000, -50.000000, 0.000000]
negate: 0
occupied_thresh: 0.65
free_thresh: 0.196
image: tianracer_racetrack.pgm
resolution: 0.025000
origin: [-12.200000, -12.500000, 0.0000000]
negate: 0
occupied_thresh: 0.65
free_thresh: 0.196

新环境均为大图,参考tianracer_racetrack.yaml参数。


源码地址:

要注意使用raicom分支。

过往学习笔记:

ROS机器人虚拟仿真挑战赛学习笔记_无人车竞速仿真-CSDN博客


SLAM

为了使用ROS Racecar仿真更好地建立SLAM地图以用于导航,可以按照以下步骤进行:

  1. 准备工作
    • 确保已经正确安装了ROS和相关的依赖包。
    • 创建一个ROS工作空间,并下载或编写所需的Racecar仿真代码。
  2. 启动仿真环境
    • 设置环境变量,确保ROS环境能够正确运行。
    • 使用roslaunch命令启动Racecar的仿真环境。
  3. 启动SLAM建图
    • 在仿真环境中,启动SLAM算法(如gmapping)来构建地图。这通常涉及运行一个SLAM节点,该节点将使用激光雷达(或其他传感器)数据来创建环境的2D地图。
    • 同时,启动rviz(ROS Visualization)来可视化建图过程。
  4. 控制车辆进行建图
    • 通过键盘控制或其他控制方式(如遥控器、游戏手柄等)手动驾驶Racecar在仿真环境中移动。
    • 确保车辆遍历整个环境,以便SLAM算法能够捕捉到所有必要的特征并构建完整的地图。
  5. 保存和优化地图
    • 当车辆遍历完整个环境后,停止SLAM建图过程,并保存生成的地图文件。
    • 可以使用地图优化工具(如map_server的map_saver节点)来保存和优化地图,以提高其质量和准确性。
  6. 验证和使用地图
    • 加载保存的地图到导航系统中,并进行测试以验证其准确性和可用性。
    • 如果地图质量不佳或存在错误,可以重复上述步骤进行修正和优化。
  7. 注意事项
    • 在建图过程中,确保仿真环境的设置与实际环境相匹配,包括传感器配置、障碍物布局等。
    • 调整SLAM算法的参数以适应不同的环境和传感器特性,以获得最佳的建图效果。
    • 定期更新和维护地图,以适应环境中的变化。

通过以上步骤,你可以更好地在ROS Racecar仿真中建立SLAM地图,并将其用于导航任务。

当提到建图算法时,虽然Gmapping在某些情况下可能表现不够理想,但确实存在其他更先进的建图算法可供选择。以下是一些推荐的建图算法,它们在不同的环境和应用场景下具有出色的性能:

  1. Cartographer
    • 特点:基于图优化的激光SLAM算法,能够生成高质量的二维和三维地图。
    • 优势:通过扫描匹配(scan-matching)和子图(submaps)的概念,Cartographer能够在实时性和准确性之间取得良好的平衡。它适用于各种室内和室外环境,并且具有较低的计算资源需求。
    • 应用场景:广泛应用于机器人导航、无人驾驶等领域。
  2. Hector SLAM
    • 特点:一种适用于激光扫描仪的SLAM算法,它基于高斯-牛顿法解决scan-matching问题。
    • 优势:Hector SLAM不需要依赖里程计数据,因此在某些没有准确里程计信息的应用场景中表现出色。它使用多分辨率地图来避免局部最小解,并提高建图精度。
    • 注意事项:对传感器噪声和机器人速度有一定要求,需要在相对静态和特征丰富的环境中进行建图。
  3. ORB-SLAM
    • 特点:一种基于视觉的SLAM算法,使用ORB(Oriented FAST and Rotated BRIEF)特征点进行定位和建图。
    • 优势:ORB-SLAM能够在室内外环境中工作,并且具有较高的鲁棒性和准确性。它支持单目、双目和RGB-D相机,并且支持回环检测和重定位功能。
    • 应用场景:适用于需要视觉信息的导航和定位任务。
  4. LSD-SLAM
    • 特点:一种直接法的视觉SLAM算法,基于半稠密地图表示。
    • 优势:LSD-SLAM能够在光照变化较大的环境中工作,并且能够处理动态物体。它生成的地图包含丰富的几何信息,适用于需要高精度导航的应用场景。
    • 注意事项:计算资源需求较高,实时性可能受到一定影响。
  5. DSO(Direct Sparse Odometry)
    • 特点:一种基于稀疏直接法的视觉里程计算法,它直接对图像像素进行操作,不需要特征点提取和描述子匹配。
    • 优势:DSO具有较高的鲁棒性和准确性,能够在纹理较少或光照变化较大的环境中工作。它适用于高速运动和动态环境下的视觉定位。
    • 应用场景:无人机、自动驾驶汽车等需要高速、准确视觉定位的应用场景。

总结

在选择建图算法时,需要根据具体的应用场景和需求进行权衡。对于需要高精度定位和导航的应用场景,Cartographer和ORB-SLAM是不错的选择。对于没有准确里程计信息或需要处理动态物体的场景,Hector SLAM和LSD-SLAM可能更适合。而对于需要高速、准确视觉定位的应用场景,DSO可能是一个更好的选择。同时,还需要考虑计算资源的需求和实时性的要求。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

React+TS前台项目实战(十二)-- 全局常用组件Toast封装,以及rxjs和useReducer的使用

文章目录 前言Toast组件1. 功能分析2. 代码详细注释(1)建立一个reducer.ts文件,用于管理状态数据(2)自定义一个清除定时器的hook(3)使用rxjs封装全局变量管理hook(4)在to…

Java 图书管理系统功能实现

承接上一篇的 图书管理系统 ,点击这里跳转 要实现什么功能 1.查找图书 2.增加图书 3.删除图书 4.展示图书 5.退出系统 6.借阅图书 7.归还图书 1.查找图书 要完成这个功能需要以下步骤 输入书名, 然后在书架里找到这本书打印出来,…

安装CDH时报错:Parcel 不可用于操作系统分配 RHEL7,原因与解决办法~

报错信息: 解决办法与思路: 1、检查CDH包的后缀名称,Redhat与Centos安装时不需要修改后缀名称,麒麟系统安装时才需要修改。 2、目录里面需要有xxx.parcel xxx.parcel.sha manifest.json 三个文件 缺一不可(注&#x…

储能电池竞争出海分析

锂电池的激烈竞争进一步蔓延到储能行业。为保市场份额和现金流稳定,不少储能电池企业都开始大幅度降低报价只求中标储能项目。 随着6月的储能电芯的最高限价和系统报价都已经贴近成本价,一二三线的储能电池厂商将要如何应对? 1、储能规模快速…

前端核心框架Vue指令详解

目录 ▐ 关于Vue指令的介绍 ▐ v-text与v-html ▐ v-on ▐ v-model ▐ v-show与v-if ▐ v-bind ▐ v-for ▐ 前言:在学习Vue框架过程中,大家一定要多参考官方API ! Vue2官方网址https://v2.cn.vuejs.org/v2/guide/ ▐ 关于Vue指令的…

第五篇:构建与维护私有Docker Registry: 企业级实践指南

构建与维护私有Docker Registry: 企业级实践指南 1. 引言:解析私有Docker仓库的必要性 1.1 Docker Registry简介与私有化的好处 Docker Registry是一个用于存储和分发Docker镜像的系统。在Docker生态系统中,Registry扮演着至关重要的角色,为…

MySQL 面试突击指南:核心知识点解析2

事务并发可能引发的问题 MySQL 是一个客户端/服务器架构的软件,对于同一个服务器来说,可以有多个客户端与之连接,每个客户端与服务器连接后,可以称为一个会话(Session)。每个客户端都可以在自己的会话中向服务器发出请求语句,一个请求语句可能是某个事务的一部分,也就…

DPDK的Cache预取和Cache一致性

1.什么是Cache预取 众所周知,CPU访问Cache中的数据是比访问内存中的数据是要快的,而因为程序都有时间局部性和空间局部性,时间局部性简单来说就是某一条或几条指令在一段时间内会被CPU多次执行;空间局部性简单来说就是某一段数据块…

Electron快速入门(三):在(二)的基础上修改了一个文件夹做了个备忘录

Lingering Memories 诗绪萦怀 修改index.html <!--index.html--> <!DOCTYPE html> <html lang="zh-CN"><head><meta charset="UTF-8"><!-- https://developer.mozilla.org/en-US/docs/Web/HTTP/CSP --><meta http…

ES数值类型慢查询优化

现象 某个查询ES接口慢调用告警&#xff0c;如图&#xff0c;接口P999的耗时都在2500ms: 基本耗时都在查询ES阶段&#xff1a; 场景与ES设定 慢调用接口为输入多个条件分页查询&#xff0c;慢调用接口调用的ES索引为 express_order_info&#xff0c;该索引通过DTS(数据同步…

FlinkSQL开发经验分享

最近做了几个实时数据开发需求&#xff0c;也不可避免地在使用Flink的过程中遇到了一些问题&#xff0c;比如数据倾斜导致的反压、interval join、开窗导致的水位线失效等问题&#xff0c;通过思考并解决这些问题&#xff0c;加深了我对Flink原理与机制的理解&#xff0c;因此将…

Ubuntu配置ssh+vnc(完整版)

Ubuntu配置sshvnc&#xff08;完整版&#xff09; 1 配置ssh 1. 安装openssh-server&#xff0c;配置开机自启 # 更新包 sudo apt-get update # 安装openssh-server sudo apt-get install -y openssh-server # 启动服务 sudo service ssh start # 配置开机自启 sudo systemc…

corepack管理包管理器;nvm管理node版本;nrm管理npm源地址

corepack corepack 管理"包管理器"&#xff0c;包括 yarn 和 pnpm。corepack 并不能管理 npm。 corepack 是 nodejs 提供的功能&#xff0c;安装 nodejs 时 corepack 就一起安装了。它还是实验性功能&#xff0c;默认是关闭的&#xff0c;具体介绍看官方文档。 注…

DevOps学习回顾01-技能发展路线-岗位能力-体系认知

事为先&#xff0c;人为重–事在人为 参考来源&#xff1a; 极客时间专栏&#xff1a;DevOps实战笔记&#xff0c;作者&#xff1a;石雪峰 课程链接&#xff1a;https://time.geekbang.org/column/intro/235 时代的典型特征 VUCA VUCA 是指易变性&#xff08;Volatility&…

高性能并行计算华为云实验一:MPI矩阵运算

目录 一、实验目的 二、实验说明 三、实验过程 3.1 创建矩阵乘法源码 3.1.1 实验说明 3.1.2 实验步骤 3.2 创建卷积和池化操作源码 3.2.1 实验说明 3.2.2 实验步骤 3.3 创建Makefile文件并完成编译 3.4 建立主机配置文件与运行监测 四、实验结果与分析 4.1 矩阵乘法…

qt 简单实验 一个可以向右侧拖拽缩放的矩形

1.概要 目的是设置一个可以拖拽缩放的矩形&#xff0c;这里仅用右侧的一个边模拟这个过程。就是为了抓住核心&#xff0c;这个便解决了&#xff0c;其他的边也是一样的。而这个更能体现原理。 2.代码 2.1 resizablerectangle.h #ifndef RESIZABLERECTANGLE_H #define RESIZ…

Linux驱动调试——使用DEVICE_ATTR实现cat、echo指令调试驱动

在平常做一些驱动调试的时候&#xff0c;每次都写应用去调试相对较麻烦&#xff0c;有一个非常便捷的操作方法就是使用device_attr&#xff0c;只需要执行shell指令例如echo和cat就可以看到效果&#xff0c;不需要再单独写一个测试demo。 看网上很多博客在这一块的使用上写的都…

RK3568平台(音频篇)RT5651解码芯片Codec驱动分析

一.Audio Codec的必要性 在理想状况下&#xff0c;对于录音过程&#xff0c;只需要将麦克风获取到的analog信号通过ADC转换为digital信号并存储即可&#xff0c;对于播放音过程&#xff0c;只需要将digital信号通过DAC转换为analog并输出到speaker播放即可。 但在实际的过程中…

C++ 编程技巧分享

侯捷 C 学习路径&#xff1a;面向对象的高级编程 -> STL库 -> C11新特性 -> cmake 1.1. C 与 C的区别 在C语言中&#xff0c;主要存在两大类内容&#xff0c;数据和处理数据的函数&#xff0c;二者彼此分离&#xff0c;是多对多的关系。不同的函数可以调用同一个数据…

Docker开机自动重启及自动启动容器

Docker开机自动重启及自动启动容器 Windows开机自动重启设置容器自动启动 Windows开机自动重启 勾选 Start Docker Desktop when you sign in to your computer 设置容器自动启动 1.docker update 命令 Usage: docker update [OPTIONS] CONTAINER [CONTAINER...]Update co…