cartographer 3D运行录制rosbag包
目录:
1、运行多线激光雷达;
2、运行IMU;
3、录制rosbag包;
4、配置cartographer;
5、查看地图;
1、运行多线激光雷达:
主要是测试雷达是否正在运行,确认雷达点云topic类型是否一致,确认雷达frame id(可统一修改为laser_link)。
2、运行IMU:
主要时测试IMU是否正常运行,可以通过rostopic list、rostopic info /imu、rosmsg info /sensor_msgs/Imu进行确认,同时确认IMU的frame id(可统一修改为imu_link);
另外,确认IMU输出数据中的角速度的单位,是角度每秒还是弧度每秒,cartographer需要的是弧度每秒。
3、录制rosbag包:
运行激光雷达和IMU,录制rosbag包:rosbag record -O b3_01 /IMU /Laser;
4、配置cartographer包:建议配置官网最新版,因为发现网上流传版本比较老,至少源代码的结构已经发生了较大变化,算法功能也发生了较大变化
4.1、配置lua文件:主要修改以下几个参数
options = {
map_builder = MAP_BUILDER,
trajectory_builder = TRAJECTORY_BUILDER,
map_frame = "map",
tracking_frame = "imu_link", --修改为imu的frame id
published_frame = "base_link",
odom_frame = "odom",
provide_odom_frame = true,
publish_frame_projected_to_2d = false,
use_odometry = false,
use_nav_sat = false,
use_landmarks = false,
num_laser_scans = ,
num_multi_echo_laser_scans = ,
num_subdivisions_per_laser_scan = ,
num_point_clouds = , --修改为1,表示雷达数量;
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 = .,
odometry_sampling_ratio = .,
fixed_frame_pose_sampling_ratio = .,
imu_sampling_ratio = .,
landmarks_sampling_ratio = .,
}
--修改为1,它表示累加几帧的point做为1帧,有些雷达是将360°的point分批次发布的,
--因此需要累加起来,方便去除运动畸变,这里用的雷达为一次发布360°的point,因此可以设定为1
TRAJECTORY_BUILDER_3D.num_accumulated_range_data =
4.2、配置urdf文件:这里仅使用了一个激光雷达,注意IMU和lidar的link name和前面已运行的设备frame id对应起来
<robot name="cartographer_backpack_3d">
<material name="orange">
<color rgba="1.0 0.5 0.2 1" />
</material>
<material name="gray">
<color rgba="0.2 0.2 0.2 1" />
</material> <link name="imu_link">
<visual>
<origin xyz="0.0 0.0 0.0" />
<geometry>
<box size="0.06 0.04 0.02" />
</geometry>
<material name="orange" />
</visual>
</link> <link name="laser_link">
<visual>
<origin xyz="0.0 0.0 0.0" />
<geometry>
<cylinder length="0.07" radius="0.05" />
</geometry>
<material name="gray" />
</visual>
</link> <link name="base_link" /> <joint name="imu_link_joint" type="fixed">
<parent link="base_link" />
<child link="imu_link" />
<origin xyz="0 0 0" rpy="0 0 0" />
</joint> <joint name="laser_link_joint" type="fixed">
<parent link="base_link" />
<child link="laser_link" />
<origin xyz="0. 0. -0.0475" rpy="0. 0. 0." />
</joint> </robot>
4.3、配置launch文件:这里使用offline节点或online节点都可以,offline节点可以建图,因此使用offline节点
<launch>
<param name="/use_sim_time" value="true" /> <node name="rviz" pkg="rviz" type="rviz" required="true"
args="-d $(find cartographer_ros)/configuration_files/demo_3d.rviz" /> <node name="cartographer_offline_node" pkg="cartographer_ros"
type="cartographer_offline_node" args="
-configuration_directory $(find cartographer_ros)/configuration_files
-configuration_basenames my_robot_3d.lua <!-- 修改为自己的lua文件 -->
-urdf_filenames $(find cartographer_ros)/urdf/my_robot_3d.urdf <!-- 修改为自己的urdf文件 -->
-bag_filenames $(arg bag_filenames)"
output="screen">
<remap from="/points2" to="/rfans_driver/rfans_points" /> <!-- 将cartographer订阅的topic类型remap为雷达和IMU发布的topic类型 -->
<remap from="/imu" to="/imu/data_raw" /> <!-- 我觉得也可以将雷达和IMU发布的topic类型remap为cartographer订阅的类型 -->
</node> <node name="cartographer_occupancy_grid_node" pkg="cartographer_ros"
type="cartographer_occupancy_grid_node" args="-resolution 0.05" />
</launch>
5、查看地图:上面修改的文件,如果是修改的/catkin_ws/src下的文件,需要rebuild,编译完成之后应该就可以运行自己录制的bag包了,也可以使用cartographer提供的check工具check一下bag包,通常情况下都没有问题,警告可以忽略
使用assets_writer_backpack_3d.launch可以将地图可视化,具体的配置方法和上面一样,通常也是lua文件和urdf文件配置,需要注意的是,如果想查看3D点云地图,需要安装points_cloud_viewer,同时在lua文件中增加如下语句:
{
action = "write_ply",
filename = "points.ply",
},
-- {
-- action = "color_points",
-- frame_id = "horizontal_vlp16_link", --因为没有这两个frame id,所以应该改为自己的frame id
-- color = { 255., 0., 0. },
-- },
-- {
-- action = "color_points",
-- frame_id = "vertical_vlp16_link",
-- color = { 0., 255., 0. },
-- },
运行相应的launch文件后,可以得到地图和轨迹的图片和点云:


cartographer 3D运行录制rosbag包的更多相关文章
- 利用zed相机为rtabmap_ros录制rosbag包及其使用
1,录制rosbag包 rosbag record /zed_node/rgb/image_rect_color /zed_node/rgb/camera_info /zed_node/depth/d ...
- 将 java 项目打包成可运行的 jar 包(main 函数带参数),并上传到 linux 服务器上运行
一.概述 java项目有两种架构,一种是 B/S 架构的,一种是 C/S 架构的. 对于 B/S 架构来说,我们常见的 java ee 即是 B/S 架构,通常,开发人员会在本地进行开发,然后将项目打 ...
- hadoop:将WordCount打包成独立运行的jar包
hadoop示例中的WordCount程序,很多教程上都是推荐以下二种运行方式: 1.将生成的jar包,复制到hadoop集群中的节点,然后运行 $HADOOP_HOME/bin/hadoop xxx ...
- 【java】 linux下利用nohup后台运行jar文件包程序
Linux 运行jar包命令如下: 方式一: java -jar XXX.jar 特点:当前ssh窗口被锁定,可按CTRL + C打断程序运行,或直接关闭窗口,程序退出 那如何让窗口不锁定? 方式二 ...
- Maven生成可以直接运行的jar包的多种方式
Maven可以使用mvn package指令对项目进行打包,如果使用Java -jar xxx.jar执行运行jar文件,会出现"no main manifest attribute, in ...
- Ant打包可运行的Jar包(加入第三方jar包)
本章介绍使用ant打包可运行的Jar包. 打包jar包最大的问题在于如何加入第三方jar包使得jar文件可以直接运行.以下用一个实例程序进行说明. 程序结构: 关键代码: package com.al ...
- Spring Boot 集成servlet,发布为可直接运行的war包,方便后续打包为docker镜像。
背景:Spring Boot 集成servlet,发布为可直接运行的war包,方便后续打包为docker镜像. 原文地址 https://github.com/weibaohui/springboot ...
- cartographer 3D scan matching 理解
cartographer 3D scan matching没有论文和其它资料,因此尝试通过源码理解其处理方法,理解不当之处还请指正. 目录: 0.2D 匹配方法简介 1.real time corre ...
- Maven生成可以直接运行的jar包的多种方式(转)
转自:https://blog.csdn.net/xiao__gui/article/details/47341385 Maven可以使用mvn package指令对项目进行打包,如果使用java - ...
随机推荐
- ubuntu 安装在硬盘与配置
安装 下载Ubuntu ISO文件,使用rufus制作启动U盘,重启选择这个U盘启动. 用rufus做启动盘时,提示缺少文件,点下载,找到log,进入找到下载地址,手动下载,并放到软件所在路径下的文件 ...
- js-函数的三种创建方式
1.声明式 function fn() { //do something } 2.函数表达式 let fn = function () { //do something } 3.构造函数 functi ...
- 搭建部署Docker
Docker安装准备: 首先看下服务器是否有旧版本,如果有需要卸载并且安装依赖 yum remove docker docker-client docker-client-latest docker- ...
- 通过传XML格式导入到ORACLE的销售订单
procedure IMPORT_OM(p_unid varchar2, --流程ID p_CUSTOMER_PO varchar2, --合同编号 p_xmlstr varchar2, --clob ...
- 51-overlay 是如何隔离的?
不同的 overlay 网络是相互隔离的.我们创建第二个 overlay 网络 ov_net2 并运行容器 bbox3. bbox3 分配到的 IP 是 10.0.1.2,尝试 ping bbox1( ...
- C#中巧用妙法避免嵌套方式使用两个foreach循环
问题:需要对DataGridViewRow的下拉框列Item2所选内容进行判断,看是否跟数据库里面某个配置表的数据列Item1匹配.如果用两个foreach循环进行匹配,会导致逻辑复杂而且容易只bre ...
- Centos7_sl命令跑火车
一.更新yum源 wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-6.repo 二.安装sl命令 yum ...
- C语言程序设计100例之(22):插入排序
例22 插入排序 问题描述 排序是计算机程序设计中的一种重要操作,它的功能是将一个数据元素或记录的任意序列,重新排列成一个以关键字递增(或递减)排列的有序序列. 排序的方法有很多,简单插入排序就是一 ...
- 【Hash一致性算法】什么是Hash一致性算法
目录 1. 一致性Hash算法简介 环形Hash空间 把数据通过一定的hash算法处理后映射到环上 将机器通过hash算法映射到环上 机器的删除与添加 平衡性 本文转载自博客 1. 一致性Hash算法 ...
- SpringCloud微服务(07):Zipkin组件,实现请求链路追踪
本文源码:GitHub·点这里 || GitEE·点这里 一.链路追踪简介 1.Sleuth组件简介 Sleuth是SpringCloud微服务系统中的一个组件,实现了链路追踪解决方案.可以定位一个请 ...