Cartographer学习

官方文档:Compiling Cartographer ROS — Cartographer ROS documentation

 动手学ROS2

1、源码安装

git clone https://ghproxy.com/https://github.com/ros2/cartographer.git -b ros2
git clone https://ghproxy.com/https://github.com/ros2/cartographer_ros.git -b ros2


2、安装依赖

wget http://fishros.com/install -O fishros && . fishros

选择编号3,然后运行
rodepc update

 3、编译

colcon build --packages-up-to cartographer_ros 

4、查看安装是否成功

ros2 pkg list | grep cartographer

成功显示:

cartographer_ros
cartographer_ros_msgs

 ------------------------------------------------------------------------------------------------------------------------------

二进制安装

sudo apt install ros-humble-cartographer -y
sudo apt install ros-humble-cartographer-ros -y

 5、配置参数

创建一个.lua文件,根据情况配置

include "map_builder.lua"
include "trajectory_builder.lua"options = {map_builder = MAP_BUILDER,trajectory_builder = TRAJECTORY_BUILDER,map_frame = "map",tracking_frame = "base_link",-- base_link改为odom,发布map到odom之间的位姿态published_frame = "odom",odom_frame = "odom",-- true改为false,不用提供里程计数据provide_odom_frame = false,-- false改为true,仅发布2D位资publish_frame_projected_to_2d = true,-- false改为true,使用里程计数据use_odometry = true,use_nav_sat = false,use_landmarks = false,-- 0改为1,使用一个雷达num_laser_scans = 1,-- 1改为0,不使用多波雷达num_multi_echo_laser_scans = 0,-- 10改为1,1/1=1等于不分割num_subdivisions_per_laser_scan = 1,num_point_clouds = 0,lookup_transform_timeout_sec = 0.2,submap_publish_period_sec = 0.3,pose_publish_period_sec = 5e-3,trajectory_publish_period_sec = 30e-3,rangefinder_sampling_ratio = 1.,odometry_sampling_ratio = 1.,fixed_frame_pose_sampling_ratio = 1.,imu_sampling_ratio = 1.,landmarks_sampling_ratio = 1.,
}-- false改为true,启动2D SLAM
MAP_BUILDER.use_trajectory_builder_2d = true-- 0改成0.10,比机器人半径小的都忽略
TRAJECTORY_BUILDER_2D.min_range = 0.10
-- 30改成3.5,限制在雷达最大扫描范围内,越小一般越精确些
TRAJECTORY_BUILDER_2D.max_range = 3.5
-- 5改成3,传感器数据超出有效范围最大值
TRAJECTORY_BUILDER_2D.missing_data_ray_length = 3.
-- true改成false,不使用IMU数据,大家可以开启,然后对比下效果
TRAJECTORY_BUILDER_2D.use_imu_data = false
-- false改成true,使用实时回环检测来进行前端的扫描匹配
TRAJECTORY_BUILDER_2D.use_online_correlative_scan_matching = true 
-- 1.0改成0.1,提高对运动的敏感度
TRAJECTORY_BUILDER_2D.motion_filter.max_angle_radians = math.rad(0.1)-- 0.55改成0.65,Fast csm的最低分数,高于此分数才进行优化。
POSE_GRAPH.constraint_builder.min_score = 0.65
--0.6改成0.7,全局定位最小分数,低于此分数则认为目前全局定位不准确
POSE_GRAPH.constraint_builder.global_localization_min_score = 0.7-- 设置0可关闭全局SLAM
-- POSE_GRAPH.optimize_every_n_nodes = 0return options

 6、编写launch文件


import os
from launch import LaunchDescription
from launch.substitutions import LaunchConfiguration
from launch_ros.actions import Node
from launch_ros.substitutions import FindPackageSharedef generate_launch_description():# 定位到功能包的地址pkg_share = FindPackageShare(package='fishbot_cartographer').find('fishbot_cartographer')#=====================运行节点需要的配置=======================================================================# 是否使用仿真时间,我们用gazebo,这里设置成trueuse_sim_time = LaunchConfiguration('use_sim_time', default='true')# 地图的分辨率resolution = LaunchConfiguration('resolution', default='0.05')# 地图的发布周期publish_period_sec = LaunchConfiguration('publish_period_sec', default='1.0')# 配置文件夹路径configuration_directory = LaunchConfiguration('configuration_directory',default= os.path.join(pkg_share, 'config') )# 配置文件configuration_basename = LaunchConfiguration('configuration_basename', default='fishbot_2d.lua')rviz_config_dir = os.path.join(pkg_share, 'config')+"/cartographer.rviz"print(f"rviz config in {rviz_config_dir}")#=====================声明三个节点,cartographer/occupancy_grid_node/rviz_node=================================cartographer_node = Node(package='cartographer_ros',executable='cartographer_node',name='cartographer_node',output='screen',parameters=[{'use_sim_time': use_sim_time}],arguments=['-configuration_directory', configuration_directory,'-configuration_basename', configuration_basename])cartographer_occupancy_grid_node = Node(package='cartographer_ros',executable='cartographer_occupancy_grid_node',name='cartographer_occupancy_grid_node',output='screen',parameters=[{'use_sim_time': use_sim_time}],arguments=['-resolution', resolution, '-publish_period_sec', publish_period_sec])rviz_node = Node(package='rviz2',executable='rviz2',name='rviz2',arguments=['-d', rviz_config_dir],parameters=[{'use_sim_time': use_sim_time}],output='screen')#===============================================定义启动文件========================================================ld = LaunchDescription()ld.add_action(cartographer_node)ld.add_action(cartographer_occupancy_grid_node)ld.add_action(rviz_node)return ld

7、保存地图

安装保存地图软件

sudo apt install ros-humble-nav2-map-server

保存地图命令

ros2 run nav2_map_server map_saver_cli -t /map -f mapname # -t 订阅的话题名,-f 保存地图名

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

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

相关文章

写静态页面——魅族声学_前端页面练习

1、效果: 1、html代码: <!DOCTYPE html> <html lang="en"> <head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>魅族声学</titl…

新员工成长-如何自觉学习

自觉学习 前置学习 在工作的前几个月里&#xff0c;你要学习一切如何运作。这将有助于你参与设计讨论、On-Call轮换、解决运维问题和评审代码。OA系统、 代码仓库、版本管理工具、代码评审流程、需求任务拆分系统、软件发布流程、补丁流程、测试流程、周报总结等等&#xff…

c# Microsoft UI Automation

Microsoft UI Automation&#xff08;UIA&#xff09;是一种用于自动化Windows应用程序用户界面&#xff08;UI&#xff09;的框架。它允许开发人员编写自动化测试脚本、辅助技术应用程序和其他需要与应用程序交互的工具。以下是一些关于Microsoft UI Automation的重要信息&…

金智易表通构建学生缴费数据查询+帆软构建缴费大数据报表并整合到微服务

使用金智易表通挂接外部数据,快速建设查询类服务,本次构建学生欠费数据查询,共有3块设计,规划如下: 1、欠费明细查询:学校领导和财务处等部门可查询全校欠费学生明细数据;各二级学院教职工可查询本二级学院欠费学生明细数据。 2、大数据统计报表:从应收总额、欠费总额…

Spring与Redis集成

1.引入RedisTemplate 据以前的情况&#xff0c;我们在Java中使用Redis时一般是使用Jedis来操作的&#xff0c;大致的一段代码如下所示 Overridepublic User findUserById(Integer id) {User user null;Jedis jedis null;try {jedis jedisPool.getResource();String userStr…

直接在GitHub上使用vscode阅读源码

方法&#xff1a; 直接在github后面输入1s即可 效果&#xff1a;

光学系统的核心--分辨率

前言 在机器视觉领域&#xff0c;可以把各个部件划分为光源&#xff0c;镜头&#xff0c;相机&#xff0c;采集卡&#xff0c;算法&#xff0c;运动平台等。各个部件都是系统的有机组合&#xff0c;均有各自的重要性。在实际应用中&#xff0c;成像镜头涉及的光学理论较多&…

[数据结构]-哈希

前言 作者&#xff1a;小蜗牛向前冲 名言&#xff1a;我可以接受失败&#xff0c;但我不能接受放弃 如果觉的博主的文章还不错的话&#xff0c;还请点赞&#xff0c;收藏&#xff0c;关注&#x1f440;支持博主。如果发现有问题的地方欢迎❀大家在评论区指正 本期学习目标&…

适用于烟机变频风机的32位单片机

RAMSUN介绍一款适用于烟机变频风机的32位单片机MM32SPIN0230系列&#xff0c;采用M0内核&#xff0c;最高工作频率可达60MHz&#xff0c;内置32KBFlash和4KBSRAM的存储器&#xff0c;包括1路12位模数转换器ADC&#xff0c;支持11通道&#xff0c;采样速率1Msps&#xff0c;4个通…

智能工厂4G无线设备预测维护云端联动的DI、AI、DO混合信号处理单元

在现代工业智能化进程中&#xff0c;一款集成了丰富I/O接口并能与各大云平台无缝对接的智能设备显得尤为重要。比如最近推出的这款创新产品&#xff0c;它集合了8路数字输入通道&#xff0c;涵盖了干湿节点的识别功能&#xff0c;适用于多种开关量信号的读取&#xff1b;同时&a…

你知道地产神秘顾客调研流程有哪些

在当今竞争激烈的地产市场中&#xff0c;客户满意度是每个地产企业追求的核心目标。为了深入了解客户需求&#xff0c;提升服务质量&#xff0c;神秘顾客调研成为了众多地产企业的得力助手。大家是否了解神秘顾客执行流程呢&#xff1f;一般包括以下几个部分&#xff1a; 在进…

(八)springboot实战——springboot3下的webflux项目全局异常处理

前言 在webflux响应式编程中&#xff0c;如何处理系统运行时异常是本节的主要内容。在传统的Servlet阻塞式web项目中主要通过HandlerExceptionResolver处理器来处理&#xff0c;而在webflux响应式web项目中&#xff0c;则是通过DispatchExceptionHandler异常处理器来处理异常。…

[SWPUCTF 2018]SimplePHP1

打开环境 有查看文件跟上传文件&#xff0c;查看文件里面显示没有文件url貌似可以文件读取 上传文件里面可以上传文件。 先看一下可不可以文件读取 /etc/passwd不能读取&#xff0c;源码提示flag在f1ag.php 看看能不能读取当前的文件&#xff0c; 先把代码摘下来 file.php …

JavaScript 之 作用域变量提升闭包

一、JavaScript 代码的执行 浏览器内核是由两部分组成的&#xff0c;以 webkit 为例 WebCore&#xff1a;负责HTML解析、布局、渲染等等相关的工作JavaScriptCore&#xff1a;解析、执行 JavaScript 代码 另外一个强大的 JavaScript 引擎就是 V8 引擎 二、深入 V8 引擎原理 …

Java面向对象三大特征之多态

在之前的文章&#xff0c;我们分别介绍了类与对象、面向对象三大特征的封装、以及继承&#xff08;一&#xff09;、继承&#xff08;二&#xff09;。这一篇文章&#xff0c;我们介绍Java面向对象三大特征的最后一个——多态。 多态 多态的概述 概念&#xff1a;完成某个行为…

前端工程化之:webpack1-1(构建工具)

一、浏览器端的模块化 1.问题 效率问题&#xff1a;精细的模块划分带来了更多的 JS 文件&#xff0c;更多的 JS 文件带来了更多的请求&#xff0c;降低了页面访问效率&#xff1b;兼容性问题&#xff1a;浏览器目前仅支持 ES6 的模块化标准&#xff0c;并且还存在兼容性问题&…

Hive之set参数大全-17

配置是否启用 HiveServer2 的 Web 用户界面&#xff08;WebUI&#xff09;中的跨源资源共享&#xff08;CORS&#xff09; 在 Hive 中&#xff0c;hive.server2.webui.enable.cors 是一个参数&#xff0c;用于配置是否启用 HiveServer2 的 Web 用户界面&#xff08;WebUI&…

CVE-2024-23897 Jenkins 任意文件读取漏洞

项目介绍 Jenkins是一个开源软件项目&#xff0c;是基于Java开发的一种持续集成工具&#xff0c;用于监控持续重复的工作&#xff0c;旨在提供一个开放易用的软件平台&#xff0c;使软件项目可以进行持续集成。Jenkins是开源CI&CD软件领导者&#xff0c; 提供超过1000个插…

Java集合相关面试题

&#x1f4d5;作者简介&#xff1a; 过去日记&#xff0c;致力于Java、GoLang,Rust等多种编程语言&#xff0c;热爱技术&#xff0c;喜欢游戏的博主。 &#x1f4d7;本文收录于java面试题系列&#xff0c;大家有兴趣的可以看一看 &#x1f4d8;相关专栏Rust初阶教程、go语言基…

C# 设置一个定时器函数

C#中&#xff0c;创建设置一个定时器&#xff0c;能够定时中断执行特定操作&#xff0c;可以用于发送心跳、正计时和倒计时等。 本文对C#的定时器简单封装一下&#xff0c;哎&#xff0c;以方便定时器的创建。 定义 using Timer System.Timers.Timer;class SetTimer {Timer …