目录

cartorgapher的编译环境

cartorgapher的编译

cartographer的运行

参数的详解与调参总结

降低延迟与减小计算量


cartorgapher的编译环境

系统环境
推荐在ubuntu16.04或者18.04上进行编译
推荐使用刚装好的ubuntu系统
ubuntu的软件源设置成清华的或者其他的中国境内的源, 更换完源之后要执行一下 sudo apt
get update
照着wiki.ros.org安装完对应版本的ROS
并在.bashrc中的末尾添加这条句语句, 要把 <distro> 改成对应的ROS版本
source /opt/ros/<distro>/setup.bash
其中 sudo rosdep init; rosdep update 这条语句执行不成功, 不管他, 不是必须执行的
依赖库的安装
cartographer的依赖库脚本完成一键安装.
如下是具体步骤:
第一步: 下载安装包
链接:https://pan.baidu.com/s/1q9f5aNTfrbpFpwGCwD6E4A
提取码:slam
在网盘链接里 安装包文件夹 中下载 cartographer_install-20210613.zip, 放到ubuntu系统里并解压
第二步: 打开终端
进入到cartographer_install文件夹, 在文件夹内部空白处单击鼠标右键, 打开终端
第三步 使用脚本完成依赖项的安装
在终端中输入 ./auto-carto-build.sh
如果提示脚本不是一个可执行的文件, 那就通过 chmod +x auto-carto-build.sh 为这个脚本添加可执
行权限即可, 之后在通过 ./auto-carto-build.sh 执行脚本
第三步 使用脚本完成依赖项的安装
在终端中输入 ./auto-carto-build.sh
如果提示脚本不是一个可执行的文件, 那就通过 chmod +x auto-carto-build.sh 为这个脚本添加可执
行权限即可, 之后在通过 ./auto-carto-build.sh 执行脚本.
解释说明
脚本里进行了4个库的编译与安装
cartographer的依赖库有3, 分别是abseil-cpp, ceres-solver, protobuf.
在脚本的最后, 也将cartographer安装到系统里了. 安装cartographer, 就可以在工作空间中只对
cartographer_ros进行编译了, 这样修改launchlua文件后就不需要执行一次编译指令了.
注意: 如果之前安装过 ceres-solver, protobuf, cartographer 的话, 执行脚本时可能会报有些函数没
有定义的错误, 这是由于protobuf或者cartographer不一致版本导致的, 可以先将之前安装的库卸载掉,
再执行安装依赖的脚本
一定要确保脚本执行之后没有错误输出, 否则之后编译代码会编译不通过

cartorgapher的编译

第一步: 下载注释的代码
讲师注释的代码的github地址为
https://github.com/xiangli0608/cartographer_detailed_comments_ws
在某个文件夹内部空白处单击鼠标右键, 打开终端, 输入如下执行进行代码的下载.
git clone https://github.com/xiangli0608/cartographer_detailed_comments_ws.git
注意, 一定要通过 git clone 的方式下载代码, 因为代码的注释是处于更新状态的, 要定期通过 git pull
origin master 来更新代码.
要是在github中下载代码的zip压缩文件, 这样下载的代码里不含有.git文件夹, 就不能通过 git pull
行代码的更新了.
如果执行 git clone 后没有下载代码, 是由于没有连上github导致的, 可以按 ctrl c 中断当前下载,
次执行 git clone , 重复几次试试, 如果还不行, 就在群里问问吧.
第二步: cartorgapher的编译
进入到cartographer_detailed_comments_ws, 在文件夹内打开终端, 输入
./catkin_make.sh
完成对cartographercartographer_ros的编译.
注意: 一定要确保之前的依赖项全部安装成功, 否则这里的编译就会报错

cartographer的运行

下载数据集
在网盘链接里 数据集文件夹 中下载数据集, 使用的数据集有3,
rslidar-outdoor-gps.zip 这个是讲师自己录制的数据, 包括了速腾16线点云数据, 由点云数据生成的
单线雷达数据, imu, 里程计, rtk/gps, tf tf_static
rslidar-outdoor-gps-notf.zip 这个与上边的是同一个, 只不过这个将tf的话题去掉了
landmarks_demo_uncalibrated.zip 是从cartographer官网上下载的数据, 旨在展示一下如何在
cartographer中使用landmark
bag文件放到指定的文件夹下
首先, 用户文件夹下新建一个文件夹, 并命名为bagfiles, 然后将下载好的3bag文件放入bagfiles文件 夹中.
开始二维建图
进入到cartographer_detailed_comments_ws文件夹内, 在文件夹内右键打开终端, 输入
source install_isolated/setup.bash
rospack profile
roslaunch cartographer_ros lx_rs16_2d_outdoor.launch
source命令的目的
source命令是设置当前的终端 可以执行的包与节点的地址集合的, 不执行 source
install_isolated/setup.bash 这个命令, 直接启动 roslaunch 时就会出现 找不到包或找不到节点的
错误提示.
为了防止每次启动终端都要执行一次 source install_isolated/setup.bash 这个指令, 我们可以将
这个指令写到 ~/.bashrc 文件中, 每次启动终端时, 会自动source ~/.bashrc 这个文件, 这个文件中的所有
内容都会被 source 一遍
~ 代表用户文件夹, 例如我自己电脑的用户名为lx, 我自己的用户文件夹就是 /home/lx/ , 这个文件夹地址
也可以用 ~ 来代替.
ctrl h 可以显示隐藏文件, 找到 .bashrc 文件进行编辑, 在文件底部输入
source ~/path-to-carto/cartographer_detailed_comments_ws/install_isolated/setup.bash
其中 path-to-carto 要改成自己实际的文件夹名字
rospack profile 命令的目的
新下载的包在编译之后, 有时没有被加载到ros的包的地址集合中,.
这时即使执行力 source 指令, 在启动 roslaunch 时也可能会报错, 提示找不到包或者可执行节点.
通过 rospack profile 命令可以将新下载的包加载到ros的包的地址集合, 再执行 roslaunch 时就不
会再报错了.
保存2d轨迹,并生成ros格式的地图
./finish_slam_2d.sh
其中map_dir是保存地图的文件夹名字, 可以改成自己想要保存的文件夹地址.
纯定位模式
roslaunch cartographer_ros lx_rs16_2d_outdoor_localization.launch
3d建图指令
roslaunch cartographer_ros lx_rs16_3d.launch
保存3d轨迹
./finish_slam_3d.sh
使用asset生成ros格式的2d栅格地图
roslaunch cartographer_ros assets_writer_2d.launch
使用asset生成3d点云地图
roslaunch cartographer_ros assets_writer_3d.launch
landmark使用示例
roslaunch cartographer_ros landmark_mir_100.launch
odom坐标系发布重复
bag或者机器人中本身存在odom坐标系, provide_odom_frame又设置成了true, 就会导致odom
标系重复发布.
会导致机器人位姿发生来回的跳动.

参数的详解与调参总结

TRAJECTORY_BUILDER_2D.min_range = 0.3
TRAJECTORY_BUILDER_2D.max_range = 100.
TRAJECTORY_BUILDER_2D.min_z = 0.2 -- / -0.8
TRAJECTORY_BUILDER_2D.voxel_filter_size = 0.02
TRAJECTORY_BUILDER_2D.ceres_scan_matcher.occupied_space_weight = 10.
TRAJECTORY_BUILDER_2D.ceres_scan_matcher.translation_weight = 1.
TRAJECTORY_BUILDER_2D.ceres_scan_matcher.rotation_weight = 1.
TRAJECTORY_BUILDER_2D.submaps.num_range_data = 80.
TRAJECTORY_BUILDER_2D.submaps.grid_options_2d.resolution = 0.1 -- / 0.02
POSE_GRAPH.optimize_every_n_nodes = 160. -- 2倍的num_range_data以上
POSE_GRAPH.constraint_builder.sampling_ratio = 0.3
POSE_GRAPH.constraint_builder.max_constraint_distance = 15.
POSE_GRAPH.constraint_builder.min_score = 0.48
POSE_GRAPH.constraint_builder.global_localization_min_score = 0.60

降低延迟与减小计算量

前端部分
减小 max_range, 减小了需要处理的点数, 在雷达数据远距离的点不准时一定要减小这个值
增大 voxel_filter_size, 相当于减小了需要处理的点数
增大 submaps.resolution, 相当于减小了匹配时的搜索量
对于自适应体素滤波 减小 min_num_pointsmax_range, 增大 max_length, 相当于减小了需要处
理的点数
后端部分
增大 optimize_every_n_nodes, 降低优化频率, 减小了计算量
增大 MAP_BUILDER.num_background_threads, 增加计算速度
减小 global_sampling_ratio, 减小计算全局约束的频率
减小 constraint_builder.sampling_ratio, 减少了约束的数量
增大 constraint_builder.min_score, 减少了约束的数量
减小分枝定界搜索窗的大小, 包括linear_xy_search_window,inear_z_search_window,
angular_search_window
增大 global_constraint_search_after_n_seconds, 减小计算全局约束的频率
减小 max_num_iterations, 减小迭代次数
降低内存
增大子图的分辨率 submaps.resolution
降低纯定位时错误重定位的概率
修改 pose_graph.lua 中的如下参数
提高 optimize_every_n_nodes , 减小了优化的次数
减小 sampling_ratio, 减小了计算约束的次数
减小 max_constraint_distance, 减小了计算约束的距离
提高 min_score, 减小了计算约束的数量, 提高约束正确的概率
提高 global_localization_min_score, 减小了计算约束的数量, 提高约束正确的概率
提高 global_constraint_search_after_n_seconds , 减小了回环的次数(隔多长时间计算一次)

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

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

相关文章

浅谈车载电控和机器人一体化关节电控区别和联系

类别车载电机关节电机&#xff08;伺服电机)电机PMSM 有轴 永磁体内嵌IPMPMSM&BLDC 永磁体表贴 SPM&#xff0c;转速不高&#xff0c;减少体积 关节和推杆用无框力矩电机&#xff1a;只有定子和转子&#xff0c;无轴&#xff0c;无外壳和端盖&#xff0c;便于和编码器减速器…

【数据结构】堆(下)+ 二叉树

上期回顾&#xff1a;【数据结构】树&#xff08;堆&#xff09;上 一.堆的应用 1.1堆排序&#xff08;向下调整在上一期&#xff09; 向上调整算法建堆&#xff1a; 首先先回顾一下向上调整算法 void AdjustUP(HPDataType* arr, int child) {int parent (child - 1) / 2…

Elasticsearch MCP 服务器现已在 AWS Marketplace 上提供

作者&#xff1a;来自 Elastic Udayasimha Theepireddy (Uday), Matt Ryan, Srinivas Pendyala 我们很高兴地宣布&#xff0c;Elasticsearch Model Context Protocol&#xff08; MCP &#xff09;服务器现已在 AWS Marketplace 上提供。 使用 MCP 将代理连接到 Elasticsearch …

【Linux】Makefile(一)-介绍

Makefile 本篇博客是作者在学习Linux方面知识过程中&#xff0c;对Makefile片面的了解&#xff0c;从而产生了对Makefile有一个全面的认识的想法&#xff0c;在知道《跟我一起写Makefile》此书后&#xff0c;作者学习阅读过程中整理出的笔记。 目录Makefilemakefile介绍:规则&…

Java爬虫与正则表达式——用正则来爬取数据

APIJava帮我们写好的各种功能的Java类。这些Java类统称为API。正则表达式就是API帮我们写好的类。正则表达式例子&#xff1a; 字符类&#xff1a;[abc]&#xff1a;只能是a&#xff0c;b或c[^abc]&#xff1a;除了a&#xff0c;b&#xff0c;c之外的任何字符[a-zA-Z]&#xff…

【后端】.NET Core API框架搭建(8) --配置使用RabbitMQ

目录 1.添加包 2. 连接配置 2.1.连接字符串 2.2.连接对象 3.创建连接服务 3.1.添加配置获取方法 3.2.服务实现类 3.3.服务接口 4.创建生产者服务 4.1.生产者实现类 4.2.生产者接口 5.创建消费者服务 5.1.消费者服务接口 5.2.消费者接口 6.注册 7.简单使用案例 7.1.实现…

Apache SeaTunnel配置使用案例

前置操作 Apache SeaTunnel详解与部署&#xff08;最新版本2.3.11&#xff09;-CSDN博客 mkdir /usr/local/soft/apache-seatunnel-2.3.11/job/ 一、MySQL to HDFS 官方配置参考&#xff1a; MySQL | Apache SeaTunnel Hdfs文件 | Apache SeaTunnel 1、配置确认 将mysq…

GitCode 使用高频问题及解决方案

GitCode 作为一款强大的版本控制系统&#xff0c;在软件开发流程中起着举足轻重的作用。然而&#xff0c;在使用过程中&#xff0c;开发者们常常会遇到各种各样的问题。本文将汇总 GitCode 使用中的高频问题&#xff0c;并提供详细的解决方案&#xff0c;帮助开发者们更顺畅地使…

在FreeBSD系统使用chroot进入Ubuntu仿真环境使用Localsend软件发送和接受文件

LocalSend是一款非常实用的在不同系统&#xff08;Windows、MacOS、Linux、Android和IOS&#xff09;传递文件的程序。我们这次的实践&#xff0c;就是要在FreeBSD下也能发送和接收文件。 安装LocalSend 跟在Ubuntu下安装非常类似&#xff0c;只是不需要下面的第一步&#xf…

交叉熵损失F.cross_entropy在分类模型中的应用

一、核心思想&#xff1a;通过概率分布惩罚错误交叉熵损失的本质是&#xff1a; 比较模型预测的概率分布 vs 真实标签的概率分布&#xff0c;惩罚两者之间的差异。例如&#xff1a;真实标签&#xff1a;图像 0 → 文本 0&#xff08;独热编码 [1, 0, 0, ...]&#xff09;模型预…

测试学习之——Pytest Day3

引言Pytest 作为 Python 中最受欢迎的测试框架之一&#xff0c;以其简洁的语法、强大的功能和丰富的插件生态系统&#xff0c;极大地提升了自动化测试的效率和可维护性。在本文中&#xff0c;我们将深入探讨 Pytest 的两大核心特性&#xff1a;Fixture 和插件管理&#xff0c;帮…

控制Vue对话框显示隐藏

正确做法 — 使用 Vue 数据驱动控制显隐你不需要手动设置 display: block&#xff0c;因为 Element Plus 的 <el-dialog> 是基于 v-model 或 :visible.sync 控制的。&#x1f527; 修改模板部分&#xff1a;将原来的&#xff1a;<el-dialog title"报文详情"…

直播带货与开源AI智能名片链动2+1模式S2B2C商城小程序:重塑电商营销新格局

摘要&#xff1a;本文聚焦于直播带货对互联网供需关系的深刻影响&#xff0c;分析其如何改变传统电商营销模式&#xff0c;实现从“人找货”到“货找人”的转变。同时&#xff0c;引入开源AI智能名片链动21模式S2B2C商城小程序这一创新概念&#xff0c;探讨其在直播带货背景下的…

Jmeter 性能测试响应时间过长怎么办?

当 JMeter 性能测试中出现 响应时间过长 的问题时&#xff0c;需要从 测试脚本、服务器、网络、JMeter配置 等多方面排查和优化。以下是详细的解决步骤和思路&#xff1a; B站最新性能进阶&#xff0c;学会这些jmeter性能测试技能&#xff0c;更助于正确设计、执行和分析性能测…

COZE官方文档基础知识解读第三期 —— prompt(提示词)

COZE官方文档基础知识解读第三期 —— prompt&#xff08;提示词&#xff09; 对于初步接触PE&#xff08;prompt engineering&#xff09; 的小伙伴们&#xff0c;你们可以去火山方舟提供的prompt工具&#xff0c;用工具&#xff08;其余的prompt网站https://www.promptinggu…

代码随想录算法训练营第三十二天|动态规划理论基础、LeetCode 509. 斐波那契数、70. 爬楼梯、746. 使用最小花费爬楼梯

目录 LeetCode 509. 斐波那契数 70. 爬楼梯 746. 使用最小花费爬楼梯 感想 文档讲解&#xff1a;代码随想录 动态规划&#xff0c;英文&#xff1a;Dynamic Programming&#xff0c;简称DP&#xff0c;如果某一问题有很多重叠子问题&#xff0c;使用动态规划是最有效的。 …

SpringMVC3

一、JSON 与参数传递1.1JSON 是什么- JSON 是字符串&#xff1a;比如 {"name":"zhangsan","password":"123456","age":15} 就是一个 JSON 字符串&#xff0c;它用来在前后端、服务间传递数据。- JSON 库&#xff1a;Fastj…

查看.bin二进制文件的方式(HxD十六进制编辑器的安装)

文章目录Windows 系统上安装 HxD 十六进制编辑器的步骤。**HxD 是一款免费、轻量级的工具&#xff0c;适合查看和编辑 .bin 等二进制文件。****PS:实际安装过程中会发现找不到Windows11的版本&#xff0c;安装windows10的即可&#xff0c;并且没有区别setup版和portable版**安装…

Linux系统性能优化与监控

系统性能优化与监控是保障 Linux 服务器稳定运行的核心技术&#xff0c;涉及 ​​CPU、内存、磁盘 I/O、网络、进程​​ 等多维度的指标分析、问题定位与优化策略。以下从​​监控工具与指标​​、​​常见问题诊断​​、​​优化方法​​三个层面详细讲解&#xff0c;并结合​…

如何在 React + TypeScript 中实现 JSON 格式化功能

如何在 React TypeScript 中实现 JSON 格式化功能 作为前端开发者&#xff0c;我们经常需要处理 JSON 数据。无论是 API 调试、配置文件编辑还是数据转换&#xff0c;能够格式化 JSON 是一项基本但非常有用的技能。本文将详细介绍如何在 React 和 TypeScript 环境中实现 JSON…