目录:

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包的更多相关文章

  1. 利用zed相机为rtabmap_ros录制rosbag包及其使用

    1,录制rosbag包 rosbag record /zed_node/rgb/image_rect_color /zed_node/rgb/camera_info /zed_node/depth/d ...

  2. 将 java 项目打包成可运行的 jar 包(main 函数带参数),并上传到 linux 服务器上运行

    一.概述 java项目有两种架构,一种是 B/S 架构的,一种是 C/S 架构的. 对于 B/S 架构来说,我们常见的 java ee 即是 B/S 架构,通常,开发人员会在本地进行开发,然后将项目打 ...

  3. hadoop:将WordCount打包成独立运行的jar包

    hadoop示例中的WordCount程序,很多教程上都是推荐以下二种运行方式: 1.将生成的jar包,复制到hadoop集群中的节点,然后运行 $HADOOP_HOME/bin/hadoop xxx ...

  4. 【java】 linux下利用nohup后台运行jar文件包程序

    Linux 运行jar包命令如下: 方式一: java -jar XXX.jar 特点:当前ssh窗口被锁定,可按CTRL + C打断程序运行,或直接关闭窗口,程序退出 那如何让窗口不锁定? 方式二 ...

  5. Maven生成可以直接运行的jar包的多种方式

    Maven可以使用mvn package指令对项目进行打包,如果使用Java -jar xxx.jar执行运行jar文件,会出现"no main manifest attribute, in ...

  6. Ant打包可运行的Jar包(加入第三方jar包)

    本章介绍使用ant打包可运行的Jar包. 打包jar包最大的问题在于如何加入第三方jar包使得jar文件可以直接运行.以下用一个实例程序进行说明. 程序结构: 关键代码: package com.al ...

  7. Spring Boot 集成servlet,发布为可直接运行的war包,方便后续打包为docker镜像。

    背景:Spring Boot 集成servlet,发布为可直接运行的war包,方便后续打包为docker镜像. 原文地址 https://github.com/weibaohui/springboot ...

  8. cartographer 3D scan matching 理解

    cartographer 3D scan matching没有论文和其它资料,因此尝试通过源码理解其处理方法,理解不当之处还请指正. 目录: 0.2D 匹配方法简介 1.real time corre ...

  9. Maven生成可以直接运行的jar包的多种方式(转)

    转自:https://blog.csdn.net/xiao__gui/article/details/47341385 Maven可以使用mvn package指令对项目进行打包,如果使用java - ...

随机推荐

  1. JavaScript 标准内置对象Promise使用学习总结

    Javascript标准内置对象Promise使用学习总结   by:授客 QQ:1033553122 1.   基础用法 var condition = true; let p = new Prom ...

  2. js中关于带数字类型参数传参丢失首位数字0问题

    最近在项目中遇到一个问题,js中传带有数字的参数时,如果参数开头有数字0,会把0给去掉. 例如: 方法abc(0123456,789); 方法abc中获取的参数0123456就会变为123456. 原 ...

  3. JDK8,Optional

     作为程序员,你肯定遇到过NullPointerException, 这个异常对于初出茅庐的新人, 还是久经江湖的老手都是不可避免的痛, 可又是那么的无能为力,为了解决它,你只能在使用某个值之前,对其 ...

  4. 10.jenkins 按角色分配

    在实际的生产中,需要项目比较多.不同的用户需要对应 不同的项目工程 .这个时候,我们需要按角色给与权限. 要实现这个功能,需要一个插件来完成 . Role-based Authorization St ...

  5. Python常用的正则表达式处理函数

    Python常用的正则表达式处理函数 正则表达式是一个特殊的字符序列,用于简洁表达一组字符串特征,检查一个字符串是否与某种模式匹配,使用起来十分方便. 在Python中,我们通过调用re库来使用re模 ...

  6. ReactNative: 使用尺寸类Dimensions获取屏幕尺寸

    一.简介 在前面创建使用组件时,虽然使用的都是伸缩盒子布局,但是很少使用宽高来进行绝对定位.在iOS中可以通过UIScreen控件获取当前屏幕的宽高,同样地,在RN中提供了一个尺寸组件Dimensio ...

  7. SpringCloud gateway (史上最全)

    疯狂创客圈 Java 分布式聊天室[ 亿级流量]实战系列之 -25[ 博客园 总入口 ] 前言 ### 前言 疯狂创客圈(笔者尼恩创建的高并发研习社群)Springcloud 高并发系列文章,将为大家 ...

  8. 原生js实现on和emit

    let obj = {}; const $on = (name,fn)=>{ if(!obj[name]){ obj[name] = []; } obj[name].push(fn); } co ...

  9. router-view 与 动态组件 区别

    提问:router-view 可以页面跳转,使用 is特性 也可以进行页面跳转,有什么区别? 参考链接 https://segmentfault.com/q/1010000010750059

  10. Ruby中星号打包解包操作

    Ruby中可以使用一个星号*和两个星号**完成一些打包.解包操作,它们称为splat操作符: 一个星号:以数组为依据进行打包解包(参考文章) 两个星号:以hash为依据进行打包解包(参考文章) 两个星 ...