cartographer_ros使用

  1. 首先根据官方指导安装cartographer
  2. 然后创建ros工作空间并拉取 cartographer_ros 代码
mkdir -p carto_ws/src
cd carto_ws/src
catkin_init_workspace 
git clone https://github.com/cartographer-project/cartographer_ros.git
  1. 现在需要安装cartographer_ros依赖项。首先,我们使用rosdep来安装所需的软件包。如果在安装ROS之后已经执行了sudo rosdep init命令,那么它将打印一个错误。此错误可以忽略。无法翻墙可以安装rosdepc,使用国内源只需将rosdep替换为rosdepc
sudo rosdep init
rosdep update
rosdep install --from-paths src --ignore-src --rosdistro=${ROS_DISTRO} -y
  1. 最后编译
 cd carto_wscatkin_make
  1. 然后就可以使用了
source devel setup.bash
roslaunch package_name carto.launch

launch文件:

<launch><param name="/use_sim_time" value="true" /> <!--仿真就设为true,实物就设为false--><node name="cartographer_node" pkg="cartographer_ros" type="cartographer_node" args="-configuration_directory $(find limo_bringup)/param-configuration_basename build_map_2d.lua"><remap from="scan" to="limo/scan" /> <!--重映射为实际的LaserScan话题--><remap from="imu" to="limo/imu" /> <!--重映射为实际的IMU话题--></node><node name="cartographer_occupancy_grid_node" pkg="cartographer_ros" type="cartographer_occupancy_grid_node" args="-resolution 0.05" /> <!--resolution为地图网格大小,越大速度越快,越小精度越好--><node name="rviz" pkg="rviz" type="rviz" required="true" args="-d $(find limo_bringup)/rviz/cartographer.rviz" />
</launch>

cartographer 参数设置

cartographer可以工作在两种模式:有IMU和没有IMU,以下为cartographer的lua参数文件:

--包含的cartographer里的lua文件
include "map_builder.lua" 
include "trajectory_builder.lua"options = {map_builder = MAP_BUILDER, -- map_builder.lua的配置信息trajectory_builder = TRAJECTORY_BUILDER, -- trajectory_builder.lua的配置信息map_frame = "map", -- 地图坐标系的名字tracking_frame = "imu_link",  -- 将所有传感器数据转换到这个坐标系下,一般设置为频率最高的传感器的frame,如果有IMU就是IMU的frame,如果没有就是laser的framepublished_frame = "base_link", -- 定位结果发布到tf树: map_frame -> published_frameodom_frame = "odom", -- 里程计的坐标系名字-- 是否提供odom的tf, 如果为true,则tf树为map_frame->odom_frame->published_frame;如果为false tf树为map_frame->published_frameprovide_odom_frame = false, --包含的cartographer里的lua文件publish_frame_projected_to_2d = true, -- 是否将坐标系投影到平面上,没啥用use_odometry = false, -- 是否使用里程计,如果使用要求一定要有odom的tf use_nav_sat = false,use_landmarks = false, -- 是否使用landmarknum_laser_scans = 1, -- 单线激光扫描数据的话题数量num_multi_echo_laser_scans = 0,num_subdivisions_per_laser_scan = 1, -- 一帧数据被分成几次处理,一般为1num_point_clouds = 0, -- PointCloud2点云数据的话题数量lookup_transform_timeout_sec = 0.2, -- 查找tf时的超时等待时间submap_publish_period_sec = 0.3, -- submap发布的时间间隔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., -- IMU数据的降采样比例landmarks_sampling_ratio = 1., -- landmarks的降采样比例
}MAP_BUILDER.use_trajectory_builder_2d = true -- 使用2d slam算法,2d和3d一定要有一个为true,且只能有一个TRAJECTORY_BUILDER_2D.submaps.num_range_data = 35
TRAJECTORY_BUILDER_2D.min_range = 0.5
TRAJECTORY_BUILDER_2D.max_range = 20
TRAJECTORY_BUILDER_2D.missing_data_ray_length = 1.TRAJECTORY_BUILDER_2D.use_imu_data = true -- 是否使用IMU数据
TRAJECTORY_BUILDER_2D.use_online_correlative_scan_matching = true
TRAJECTORY_BUILDER_2D.real_time_correlative_scan_matcher.linear_search_window = 0.1
TRAJECTORY_BUILDER_2D.real_time_correlative_scan_matcher.translation_delta_cost_weight = 10.
TRAJECTORY_BUILDER_2D.real_time_correlative_scan_matcher.rotation_delta_cost_weight = 1e-1
-- 提高精度主要修改的参数,设置成比较小的值
TRAJECTORY_BUILDER_2D.ceres_scan_matcher.translation_weight = 1e-1
TRAJECTORY_BUILDER_2D.ceres_scan_matcher.rotation_weight = 4e-1POSE_GRAPH.optimization_problem.huber_scale = 1e2
POSE_GRAPH.optimize_every_n_nodes = 35
POSE_GRAPH.constraint_builder.min_score = 0.65return options

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

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

相关文章

微信小程序使用腾讯地图实现地点搜索并且随着地图的滑动加载滑动到区域的地点,本文地点使用医院关键词作为搜索地点

实现效果如下 1.页面加载时&#xff0c;根据getLocation方法获取用户当前经纬度获取20条医院位置信息 2.页面滑动时&#xff0c;根据滑动到的经纬度再次获取20条医院位置信息 获取到的医院位置信息 实现方法如下 1.在.wxml中添加触发滑动的方法bindregiοnchange“onMapRegio…

【Spring集成MyBatis】核心配置文件

文章目录 1. typeHandlers标签2. plugins标签通过PageHelper的API获取分页的信息 1. typeHandlers标签 可以重写类型处理器&#xff0c;或创建类型处理器来处理不支持/非标准的类型。选择性地将它映射到一个JDBC类型&#xff1a;如Java中的Date类型&#xff0c;将其存放到数据…

docker安装以及idea访问docker

其他目录&#xff1a; docker 安装环境&#xff08;有空更新&#xff09; url “” docker 打包java包&#xff0c;并运行&#xff08;有空更新&#xff09; url “” docker 打包vue &#xff08;有空更新&#xff09; url “” docker 多服务 &#xff08;有空更新&#xff…

2023年亚太杯数学建模A题水果采摘机器人的图像识别功能(matlab 部分代码)

对于1-4问针对的是附录1 中的数据 clc; close all; clear; % 图像文件夹路径 folder_path E:/新建文件夹/yatai/Attachment/Attachment 1/; % 图像文件列表 image_files dir(fullfile(folder_path, *.jpg)); % 假设所有图片都是jpg格式% 解析文件名中的数字&#xff0c;并转…

机器学习探索计划——数据集划分

文章目录 导包手写数据划分函数使用sklearn内置的划分数据函数stratifyy理解举例 导包 import numpy as np from matplotlib import pyplot as plt from sklearn.datasets import make_blobs手写数据划分函数 x, y make_blobs(n_samples 300,n_features 2,centers 3,clus…

Java设计模式系列:单例设计模式

Java设计模式系列&#xff1a;单例设计模式 介绍 所谓类的单例设计模式&#xff0c;就是采取一定的方法保证在整个的软件系统中&#xff0c;对某个类只能存在一个对象实例&#xff0c;并且该类只提供一个取得其对象实例的方法&#xff08;静态方法&#xff09; 比如 Hiberna…

循环队列的几种实现方式

基于数组来实现循环队列的几种方式 使用 usedSize使用 标志位空出一个位置 方式一 usedSize 0 是则表示当前数组为空 usedSize 数组的长度 则表示当前数组满了方式二 使用一个标记 flag 来判断当前队列是空还是满 如果 flag false 则说明队列为空 如果 flag true 则说…

leetcode:495. 提莫攻击

一、题目 链接&#xff1a;495. 提莫攻击 - 力扣&#xff08;LeetCode&#xff09; 函数原型&#xff1a;int findPoisonedDuration(int* timeSeries, int timeSeriesSize, int duration) 二、思路 遍历数组timeSeries&#xff0c;如果 元素值duration < 下一元素值 &#x…

GO语言实现txt文本多行合并为一行

windows系统txt文件 input.txt多行合并为一行 package mainimport ("fmt""io/ioutil""strings" )func main() {content, err : ioutil.ReadFile("E:\\gin_demo\\demo30DNF\\youhua\\input.txt")if err ! nil {fmt.Println("Err…

OpenCV快速入门:图像分析——傅里叶变换、积分图像

文章目录 前言一、傅里叶变换1.1 离散傅里叶变换1.1.1 离散傅里叶变换原理1.1.2 离散傅里叶变换公式1.1.3 代码实现1.1.4 cv2.dft 函数解析 1.2 傅里叶变换进行卷积1.2.1 傅里叶变换卷积原理1.2.2 傅里叶变换卷积公式1.2.3 代码实现1.2.4 cv2.mulSpectrums 函数解析 1.3 离散余…

基于深度学习的文本分类

通过构建更复杂的深度学习模型可以提高分类的准确性&#xff0c;即分别基于TextCNN、TextRNN和TextRCNN三种算法实现中文文本分类。 项目地址&#xff1a;zz-zik/NLP-Application-and-Practice: 本项目将《自然语言处理与应用实战》原书中代码进行了实现&#xff0c;并在此基础…

Unity使用DOTween实现分段进度条

文章目录 需求下载安装 DOTween实现实现效果 需求 用组件进度条&#xff08;Slider&#xff09;&#xff0c;利用分段加载进行以假乱真的进度效果&#xff0c;比如说2秒钟到达20%的进度&#xff0c;10秒钟加载20%到50%进度&#xff0c;1分钟加载50%到90%的进度&#xff0c;30秒…

2023年金融信创行业研究报告

第一章 行业概况 1.1 定义 金融信创是指在金融行业中应用的信息技术&#xff0c;特别是那些涉及到金融IT基础设施、基础软件、应用软件和信息安全等方面的技术和产品。这一概念源于更广泛的“信创 (信息技术应用创新)”&#xff0c;即通过中国国产信息技术替换海外信息技术&a…

77 组合问题

给定两个整数 n 和 k&#xff0c;返回 1 ... n 中所有可能的 k 个数的组合。 class Solution { private: vector<vector<int>> result; // 存放符合条件结果的集合 vector<int> path; // 用来存放符合条件结果 void backtracking(int n, int k , int st…

测试在 Oracle 下直接 rm dbf 数据文件并重启数据库

创建一个新的表空间并创建新的用户&#xff0c;指定新表空间为新用户的默认表空间 create tablespace zzw datafile /oradata/cesdb/zzw01.dbf size 10m;zzw用户已经创建过&#xff0c;这里修改其默认表空间 alter user zzw quota unlimited on zzw; alter user zzw default …

ELK企业级日志分析平台——logstash

部署 新建一台虚拟机elk4部署logstash [rootelk4 ~]# yum install -y jdk-11.0.15_linux-x64_bin.rpm[rootelk4 ~]# yum install -y logstash-7.6.1.rpm 命令方式 [rootelk4 bin]# /usr/share/logstash/bin/logstash -e input { stdin { } } output { stdout {} } elasticsearc…

使用骨传导耳机会伤耳朵吗?一文读懂骨传导耳机有哪些优点

首先说明&#xff0c;如果是正确的使用骨传导耳机是不会伤耳朵。 一、骨传导耳机的传声原理是什么&#xff1f; 声音的传播需要介质&#xff0c;传统的耳机是通过空气来进行传播&#xff0c;也被称为“空气传导耳机”&#xff0c;而骨传导耳机最大的特别之处就在于&#xff0…

AcWing 3384:二叉树遍历(依先序序列建树,输出中序序列) ← DFS

【题目来源】https://www.acwing.com/problem/content/3387/【题目描述】 编写一个程序&#xff0c;读入用户输入的一串先序遍历字符串&#xff0c;根据此字符串建立一个二叉树&#xff08;以指针方式存储&#xff09;。 例如如下的先序遍历字符串&#xff1a;abc##de#g##f###&…

录像机IP地址设置教程:轻松掌握网络连接方法

随着科技的发展&#xff0c;现在的录像机都具备了网络连接的功能&#xff0c;可以通过设置IP地址实现远程和监控。但是很多人对于录像机IP地址的设置方法感到困惑。虎观代理小二二将在本文详细介绍录像机IP地址的设置步骤&#xff0c;帮助您轻松掌握网络连接方法。 首先&#x…

DFS序和欧拉序的降维打击

1. DFS 序和时间戳 1.1 DFS 序 定义&#xff1a;树的每一个节点在深度优先遍历中进、出栈的时间序列。 如下树的 dfs 序就是[1,2,8,8,5,5,2,4,3,9,9,3,6,6,4,7,7,1]。 下图为生成DFS的过程。对于一棵树进行DFS序&#xff0c;除了进入当前节点时对此节点进行记录&#xff0c;…