关于cartographer中的trajectory的理解与应用

从两三个月前开始安装,编译,使用cartographer已经有一段时间了,一直也想写写博客记录一下,可惜没有这个习惯,暂无实现,最近发现trajectory这个有趣的东西,可以帮助我们做好多事。

1cartographer建图

2dslam中是不需要imu的但是打开use oline correlative scan time = true
这个开关,这样可以在旋转时仍然保证稳定建图,放一张建好的图,整体效果还是不错的。
在这里插入图片描述
这个是已经转换成pgm的。

2cartographer简单描述

关于cartographer的源码解读、原理分析以及scanmatch和回环都已经有好多博主介绍过了,这个之后有时间在发帖。需要注意的是launch文件和lua文件的配置,如果没有urdf 自己发一个static坐标转换,tf_tree联通后就可以正常运行了。这里我们着重介绍一下trajectory。

3trajectory的理解

cartographer中有几个serveric接口,其中一个是finish trajectory,表示当前轨迹停止接收数据。还有一个start trajectory,这个就是新建一条轨迹。

1纯定位模式

细心的同学可以发现,在使用出纯定位模式(pure localization)中是有两条轨迹并存的标号id 为0 和1 其中 id为0的trajectory中包含我们之前pbstream中包含的submap和node通过当前建立1–4和submap与之前的匹配实现定位。这也就是trajectory的应用之一。

2手动定位

trajectory还有一个应用就是手动定位。在像amcl那样可以直接选择开始位姿。这样就需要我们在定位模式中先finish当前trajectory,然后开启start new trajectory service,可以运行cartographer_start_trajectory这个生成的可执行文件,如果需要执行cartographer_start_trajectory,写一个launch文件。

<launch>
  <node name="cartographer_start_trajectory" pkg="cartographer_ros" type="cartographer_start_trajectory" 
      args= "
      -configuration_directory  $(find cartographer_ros)/configuration_files
      -configuration_basename backpack_2d_localization.lua 
     " />
 </launch>
如果其中指定位姿,就需要加入initial参数
<launch>
  <node name="cartographer_start_trajectory" pkg="cartographer_ros" type="cartographer_start_trajectory" 
      args= "
      -configuration_directory  $(find cartographer_ros)/configuration_files
      -configuration_basename backpack_2d_localization.lua 
      -initial_pose {to_trajectory_id=0,relative_pose={translation={0.0,0.0,0.},rotation={0.,0.,0.,timestamp=0}}}" />
 </launch>

这里需要注意,to_trajectory_id=0是相对于哪条轨迹,一般都是0,relative_pose就是要指定的initialpose,不必多说。timestamp=0,非常重要,如果不写这个time,cartographer会默认为当前的时间,这样你传入的pose会根据时间做一个位姿变化。

3地图扩展

如果你之前建好了地图,存在了pbstream中,但是在导航时候发现地图不够全,或者有新的场景加入,那么就需要重新扫图。或者!我们可以在之前的轨迹上叠加一条新的轨迹。
同样的操作,先finish当前trajectory。
运行下面launch

<launch>
  <node name="cartographer_start_trajectory" pkg="cartographer_ros" type="cartographer_start_trajectory" 
      args= "
      -configuration_directory  $(find cartographer_ros)/configuration_files
      -configuration_basename backpack_2d_localization.lua 
      -initial_pose {to_trajectory_id=0,relative_pose={translation={0.0,0.0,0.},rotation={0.,0.,0.,timestamp=0}}}" />
 </launch>

这个time可以调整,不设置也可以甚至initial_pose也可以不用设置,一般特征有共同点的地方,cartographer全局会检测到,这样建图时候就有多条轨迹了,建好后保存为新的pbstream。
轨迹间的node和submap还可以互相约束,是不是很好玩?这也是cartographer的强大之处。
今天没有截图,有时间把rviz截图加入进来

Cartographer是指地图制作师或制图师,trajectory是指物体或人的轨迹。假设现在需要删除一个cartographer trajectory,那么意味着需要删除一个地图制作师或制图师的轨迹。 回答这个问题时,可以考虑如下情境: 在某次地图制作过程,制图师可能会根据地理数据、测量结果和其他相关信息进行工作。而trajectory则可能指的是他们在地图制作的不同阶段所经历的整个过程,包括制作的数据来源、地点选取、画图方法等。因此,删除一个cartographer trajectory可能意味着需要删除整个制图过程的某个步骤、数据或者完整的制图记录。 这样的删除可能出现在以下场景: 1.数据错误或失效:制图师在地图制作过程可能会依赖多种数据源。如果其某个数据源发生错误或失效,就可能需要删除这个轨迹,重新选择其他可靠的数据源,以确保地图的准确性和可靠性。 2.重绘或修改:在地图制作的过程,制图师可能会根据实际情况或需求,对某个地区、特定要素的描绘进行修改或重新绘制。此时,他们可能需要删除之前版本的轨迹,并重新开始新的制图过程。 3.故意删除:在某些情况下,需要删除cartographer trajectory可能是出于某种决策或政策的要求。这可能涉及到屏蔽某些敏感信息、限制访问或者保护隐私等方面的考虑。 总之,删除cartographer trajectory意味着删除一个地图制作师或制图师在制作过程的轨迹或记录。具体的删除原因可能涉及到数据错误、重绘需求或者其他决策需要等方面的考虑。
评论 11
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值