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 - ...
随机推荐
- CSS入门(定位的简单总结)
一.定位 普通流定位 浮动定位 相对定位 绝对定位 固定定位 二.position定位 1.static(默认值) 2.relative 相对定位 3.absolute 绝对定位 4.fixed 固定 ...
- swift声明属性为某个类型同时遵循某协议
swift声明属性为某个类型同时遵循某协议 var instanse:(协议A & 类B)
- 图解SynchronousQueue原理-公平模式
SynchronousQueue原理详解-公平模式 一.介绍 SynchronousQueue是一个双栈双队列算法,无空间的队列或栈,任何一个对SynchronousQueue写需要等到一个对Sync ...
- 基于V7的新版RL-USB和RL-FlashFS的NAND完整解决方案,实现更简单,用户仅需初始化FMC
说明: 1.新版方案更加好用,不管用户使用的那家NAND,用户要做的仅仅是初始化FMC,其它读写API,擦写均衡,坏块管理,ECC校验和掉电保护都不用操心了. 2.新版RL-USB相比老版本功能强劲了 ...
- 如何完成述职报告或年终总结PPT
对于我们 打工仔 职场人士来说,年有年度总结,月有月度报告,指不定有些小伙伴还会有周报和日报,不仅枯燥,而且浪费时间,头都要炸了 ,简直太有趣了呢. 所以,如何准确快速的写完述职报告呢? 这是个好问题 ...
- 【数据结构】什么是二叉查找树(BST)
什么是二叉查找树(BST) 1. 什么是BST 对于二叉树中的每个节点X,它的左子树中所有项的值都小于X中的项,它的右子树中所有项的值大于X中的项.这样的二叉树是二叉查找树. 以上是一颗二叉查找树,其 ...
- Mac PyCharm2019激活码
此教程支持最新2019.2版本Pycharm及其他软件 此教程实时更新,请放心使用:如果有新版本出现猪哥都会第一时间尝试激活: pycharm官网下载地址:http://www.jetbrains.c ...
- NetCore WebAPI开发探索
一.创建项目 新建api项目: 建好之后,一个默认的控制器已经有了: 运行就可以直接访问get接口获取数据: 二.跨平台部署 部署方面,微软已经完善的很好了,基本上算是傻瓜式操作.项目右键选择发布 ...
- win7系统防止中招勒索病毒
echo @@ netsh advfirewall firewall add rule name= netsh advfirewall firewall add rule name= netsh ad ...
- jQuery中$()函数的7种用法汇总
前言 jQuery对象是一个类数组的对象,含有连续的整形属性以及一系列的jQuery方法.它把所有的操作都包装在一个jQuery()函数中,形成了统一(也是惟一)的操作入口.其中我们用的非常频繁的一个 ...