Cattographer从入门到精通——第一章

第一讲—Cartographer的编译与安装


图一、cartigrapher_install安装包


**//auto-carto-build.sh脚本文件2021-7-28**#!/bin/bash       //必须要有的规则-前缀# Install the required libraries that are available as debs.
# sudo apt-get update
sudo apt-get install \clang \cmake \g++ \git \google-mock \libboost-all-dev \libcairo2-dev \libcurl4-openssl-dev \libeigen3-dev \libgflags-dev \libgoogle-glog-dev \liblua5.2-dev \libsuitesparse-dev \lsb-release \ninja-build \stow \python-wstool \python-rosdep \python-sphinx \libatlas-base-dev# Build and install abseil-cpp
set -o errexit
set -o verbosecd abseil-cpp
git checkout d902eb869bcfacc1bad14933ed9af4bed006d481
mkdir build
cd build
cmake -G Ninja \-DCMAKE_BUILD_TYPE=Release \-DCMAKE_POSITION_INDEPENDENT_CODE=ON \-DCMAKE_INSTALL_PREFIX=/usr/local/stow/absl \..
ninja
sudo ninja install
cd /usr/local/stow
sudo stow absl# Build and install Ceres.
cd -
cd ../../ceres-solver
mkdir build
cd build
cmake .. -G Ninja -DCXX11=ON
ninja
#CTEST_OUTPUT_ON_FAILURE=1 ninja test
sudo ninja install# Build and install proto3.
cd ../../protobuf
mkdir build
cd build
cmake -G Ninja \-DCMAKE_POSITION_INDEPENDENT_CODE=ON \-DCMAKE_BUILD_TYPE=Release \-Dprotobuf_BUILD_TESTS=OFF \../cmake
ninja
sudo ninja install# Build and install Cartographer.
cd ../../cartographer
mkdir build
cd build
cmake .. -G Ninja
ninja
#CTEST_OUTPUT_ON_FAILURE=1 ninja test
sudo ninja install

脚本文件
1、脚本文件auto-carto-build.sh (前缀 # !/bin/bash 必须要有)

u@ubuntu:~/cartographer_install$ ll auto-carto-build.sh     //查看权限
-rwxrwxr-x 1 u u 1395 Jun 12 22:08 auto-carto-build.sh*
u@ubuntu:~/cartographer_install$ chmod +x auto-carto-build.sh    //添加权限
u@ubuntu:~/cartographer_install$ ./auto-carto-build.sh          //执行脚本文件
[sudo] password for u: 

$ ./catkin_make.sh //执行脚本文件编译命令
$ catkinz_make //只能编译ROS中launch文件,lua文件
$ catkin_make_isolated //可以编译不属于ROS的cartographer文件

第二讲—Cartographer的运行(上)

1、新建rosbags包,用来存放数据集

u@ubuntu:~/bagfiles$ rosbag info rslidar-outdoor-gps.bag     //查看数据包


$ roscore // 启动rosmaster节点管理器

第二个Terminal 内

 $ u@ubuntu:~/bagfiles$ rosbag play rslidar-outdoor-gps.bag


rslidar-outdoor-gps.bag 运行中在另一个终端中输入:

u@ubuntu:~/bagfiles$ rqt

第三讲—Cartographer的运行(下)

设置use_sim_time true

设置时钟

保存地图$ rosrun map_server map_saver


使用脚本文件保存地图

脚本文件finish_slam_2d.sh
数据包信息的查询 1
数据包信息的查询 2

第四讲—前三节的补充包括纯定位

执行脚本auto-carto-build.sh是为了安装这四个包,这四个包是cartographer和cartographer_ros运行的依赖。

这两个文件夹是在工作空间内的,需要对其进行代码的更改、阅读等。

代码第19行,绝对路径default="/home/u/bagfiles/rslidar-outdoor-gps-notf.bag"/>只能用绝对路径,相对路径会报错。用户名要改为自己的用户名home//才行。

通过这种方式也可以启动launch文件,把路径复制到 :/
**** 终端内。

-l 的意思是循环播放,先启动要运行的包,再启动循环播放命令。


启动lx_rs16_2d_outdoor_localization.launch。


纯定位的例子

第五讲—cartographer的配置文件(上)

lx_rs16_2d_outdoor.launch与lx_rs16_2d_outdoor.lua代码的讲解
<launch><!-- bag的地址与名称 --><arg name="bag_filename" default="/home/u/bagfiles/rslidar-outdoor-gps-notf.bag"/>   <!-- 使用bag的时间戳 --><param name="/use_sim_time" value="true" /><!-- 启动cartographer --><node name="cartographer_node" pkg="cartographer_ros"type="cartographer_node" args="-configuration_directory $(find cartographer_ros)/configuration_files-configuration_basename lx_rs16_2d_outdoor.lua"output="screen"><remap from="points2" to="rslidar_points" /><remap from="scan" to="front_scan" /><remap from="odom" to="odom_scout" /><remap from="imu" to="imu" /></node><!-- 生成ros格式的地图 --><node name="cartographer_occupancy_grid_node" pkg="cartographer_ros"type="cartographer_occupancy_grid_node" args="-resolution 0.05" /><!-- 启动rviz --><node name="rviz" pkg="rviz" type="rviz" required="true"args="-d $(find cartographer_ros)/configuration_files/lx_2d.rviz" /><!-- 启动rosbag --><node name="playbag" pkg="rosbag" type="play"args="--clock $(arg bag_filename)" /></launch>

注意remap,没有remap会报错。


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",              -- 将所有传感器数据转换到这个坐标系下published_frame = "footprint",            -- tf: map -> footprintodom_frame = "odom",                      -- 里程计的坐标系名字provide_odom_frame = false,               -- 是否提供odom的tf, 如果为true,则tf树为map->odom->footprint-- 如果为false tf树为map->footprintpublish_frame_projected_to_2d = false,    -- 是否将坐标系投影到平面上--use_pose_extrapolator = false,            -- 发布tf时是使用pose_extrapolator的位姿还是前端计算出来的位姿use_odometry = false,                     -- 是否使用里程计,如果使用要求一定要有odom的tfuse_nav_sat = false,                      -- 是否使用gpsuse_landmarks = false,                    -- 是否使用landmarknum_laser_scans = 0,                      -- 是否使用单线激光数据num_multi_echo_laser_scans = 0,           -- 是否使用multi_echo_laser_scans数据num_subdivisions_per_laser_scan = 1,      -- 1帧数据被分成几次处理,一般为1num_point_clouds = 1,                     -- 是否使用点云数据lookup_transform_timeout_sec = 0.2,       -- 查找tf时的超时时间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.,
}MAP_BUILDER.use_trajectory_builder_2d = trueTRAJECTORY_BUILDER_2D.use_imu_data = true
TRAJECTORY_BUILDER_2D.min_range = 0.3
TRAJECTORY_BUILDER_2D.max_range = 100.
TRAJECTORY_BUILDER_2D.min_z = 0.2
--TRAJECTORY_BUILDER_2D.max_z = 1.4
--TRAJECTORY_BUILDER_2D.voxel_filter_size = 0.02--TRAJECTORY_BUILDER_2D.adaptive_voxel_filter.max_length = 0.5
--TRAJECTORY_BUILDER_2D.adaptive_voxel_filter.min_num_points = 200.
--TRAJECTORY_BUILDER_2D.adaptive_voxel_filter.max_range = 50.--TRAJECTORY_BUILDER_2D.loop_closure_adaptive_voxel_filter.max_length = 0.9
--TRAJECTORY_BUILDER_2D.loop_closure_adaptive_voxel_filter.min_num_points = 100
--TRAJECTORY_BUILDER_2D.loop_closure_adaptive_voxel_filter.max_range = 50.TRAJECTORY_BUILDER_2D.use_online_correlative_scan_matching = false
TRAJECTORY_BUILDER_2D.ceres_scan_matcher.occupied_space_weight = 1.
TRAJECTORY_BUILDER_2D.ceres_scan_matcher.translation_weight = 1.
TRAJECTORY_BUILDER_2D.ceres_scan_matcher.rotation_weight = 1.
--TRAJECTORY_BUILDER_2D.ceres_scan_matcher.ceres_solver_options.max_num_iterations = 12--TRAJECTORY_BUILDER_2D.motion_filter.max_distance_meters = 0.1
--TRAJECTORY_BUILDER_2D.motion_filter.max_angle_radians = 0.004
--TRAJECTORY_BUILDER_2D.imu_gravity_time_constant = 1.TRAJECTORY_BUILDER_2D.submaps.num_range_data = 80.
TRAJECTORY_BUILDER_2D.submaps.grid_options_2d.resolution = 0.1POSE_GRAPH.optimize_every_n_nodes = 160.
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.60return options

第六讲-cartographer的配置文件

代码的讲解,但是此处的代码中没有注释。

cartographer官方的编译文档的地址为
cartographer_ros:
https://google-cartographer-ros.readthedocs.io/en/latest/compilation.html

cartographer:
https://google-cartographer.readthedocs.io/en/latest/index.html

第七讲-cartographer的配置文件(下)

第八讲-cartographer调参指导

第九讲-vscode的配置与使用

论文讲解与代码梳理

Cattographer从入门到精通__第一章相关推荐

  1. Spring入门到精通:第一章 基础入门:1.Spring框架概述

    Spring入门到精通:第一章 基础入门:1.Spring框架概述 前言:为什么要学习Spring框架? 为什么要学习Spring框架呐? (1)使用广泛:现在很多的企业都有Spring的影子,不管是 ...

  2. 1. Vue从入门到精通(第一章 vue核心)

    Vue从入门到精通(第一章 vue核心) 第一章 Vue核心 1. Vue简介 1.1 Vue是什么? 1.2 Vue的作者以及迭代版本 1.3 Vue的特点 2. 搭建Vue开发环境 2.1 安装V ...

  3. 《Android入门到精通》第一章学习笔记总结

  4. c语言从入门到精通ppt,C语言从入门到精通第1章.ppt

    C语言从入门到精通第1章 1.2.2 认识Turbo C 2.0 1.2.2 认识Turbo C 2.0 ⑴ 菜单栏:包括[File](文件)菜单.[Edit](编辑)菜单.[Run](运行)菜单.[ ...

  5. Java从入门到精通 第22章 多线程

    Java从入门到精通 第22章 多线程 //单一线程的运行流程 public class Nanjing {public static void main(String[] args) {// TOD ...

  6. Web前端从入门到精通(第一周)

    Web前端从入门到精通(第一周) HTML+CSS系列之导学 1.拨云见日:HTML.CSS.切图流程.PC企业布局.PC游戏站布局 2.溯本求源:扩展HTML.扩展CSS.HTML5新语法.CSS3 ...

  7. 容器集群k8s从入门到精通实战第一天 kubernetes集群简介及其实例

    第一章 kubernetes介绍 本章节主要介绍应用程序在服务器上部署方式演变以及kubernetes的概念.组件和工作原理. 应用部署方式演变 在部署应用程序的方式上,主要经历了三个时代: 传统部署 ...

  8. 【C语言】C语言从入门到精通|第1章 C语言概述—自学笔记

    前言 本篇是本人自学C语言过程进行编辑的文章笔记,如果对大家有用,点赞加收藏吧. 注:笔记基于<C语言从入门到精通(第3版)>明日科技编著,清华大学出版社出版的. 目录 一.C语言发展史 ...

  9. 尚硅谷Java入门视频教程导读及第一章

    尚硅谷Java入门视频教程导读及第一章 JAVA基础学习导读-编程入门 0.1概述 0.2 计算机硬件介绍 中央处理器(CPU) 存储设备 内存 比特(bit)和字节(byte) 内存 输入和输出设备 ...

最新文章

  1. Numpy中数组间运算
  2. 陈键飞:基于随机量化的高效神经网络训练理论及算法
  3. [Java入门笔记] Java语言基础(四):流程控制
  4. 【译】 Stealing the funds of all HTC EXODUS 1 users (HTC 区块链钱包安全漏洞分析)
  5. 通过Erlang构建TCP服务器
  6. qgraphicsview 添加矩形框并拖动改变大小_如何用手机巧影软件为视频添加字幕
  7. linux查看openssh和openssl版本
  8. Hi3520d uboot uImage rootfs 移植与升级
  9. 基于VMware Workstation创建虚拟机,以Ubuntu16.04为例
  10. jsoup爬虫简书首页数据做个小Demo
  11. 计算机各单位间转换(位,字节,进制间转换)
  12. Python报错AssertionError: can only test a child process
  13. UCweb等手机浏览器的盈利模式
  14. 罗振宇解读《今日简史》:21个议题就是21个千亿美金的机会
  15. Virtualbox主机和虚拟机之间文件夹共享及双向拷贝
  16. 6-1 Numerical Summation of a Series (40分)
  17. sklearn代码11 1-熵
  18. lammps教程:均方位移MSD计算方法介绍
  19. 如何评估社交网络中信息内容的价值呢?
  20. veiw pad 7寸 android4.2,全国首款Android+Win7双系统平板电脑ViewPad 10登场

热门文章

  1. Android事件体系全面总结+实践分析,面试资料分享
  2. CSDN论坛问答质量提升计划
  3. 无线电力传输(摘自tom)
  4. 2020年Java面试复盘,收获Offer,金三银四程序员面试精装版pdf,分享给跳槽面试的程序员
  5. device-mapper 块级重删(dm dedup) 1 序
  6. 疯狂python精讲,00后入门Python的首选!
  7. matlab电压源容量,Matlab-SimPowerSystems-Electrical Sources模块使用说明
  8. 计算机科学与技术核心课程
  9. CentOS下NFS服务器配置实例
  10. 生鲜水果商品商城静态网站,vue+elementui简单实现