echarts 时间轴自动变化_运动轨迹仅仅是2D的?——论自动驾驶运动规划的维度...

7466a3b185992497e9723a3ef18ff2b4.png

1

运动规划的维度

运动规划是自动驾驶技术栈中,信息整合的关键一步,负责把上游的孤立、异构、模糊的多方面信息整合成自洽的运动轨迹(trajectory);好的轨迹需要满足多方面的要求,其中最重要的方面包括安全性(safety)和舒适性(comfort)。对于车辆自动驾驶来说,车辆的控制是限制在地面这个二维世界里(严格来讲,地面空间是二维流形,即地面空间与局部同胚(local homeomorphism))。但轨迹并不在这个空间中,因为轨迹并不仅是简单的一个瞬时的状态,也需要考虑时间这一维度。因此,它是一条在二维空间和一维时间组成的三维空间中的曲线。轨迹的时间跨度,称为时域(horizon),通常要达到8-10秒这个范围,才能满足城市复杂场景公开道路产品级自动驾驶的需求。

为什么要在比较长的时间跨度上规划完整的运动,而不能只是简单地规划当前瞬间的动作(油门、刹车、转向)呢?目前很多基于端到端学习的规划方法都是这么做的,毕竟人类司机驾驶时,很多时候也只考虑眼前需要的动作而已。进行长时程的完整规划主要是为了保证未来的规划问题仍然可解。车辆从动力学上来说,惯性很大,从运动学上来说,又属于非完整系统(non-holonomic,即车辆不能瞬间改变朝向),所以如果只考虑当前位姿,是不能作出有前瞻性的驾驶动作的。缺乏前瞻性的驾驶动作虽然目前看来不错,但很容易把自己开进死胡同,造成一段时间之后无解。比如如果观察到路口的红灯,无人车必须根据当前速度提前刹车才能保证不闯红灯;如果只考虑眼前,会发现在到达路口之前都没有刹车的必要(不会立刻违反交通规则),而到了路口,再刹车就来不及了。这就是为什么这个模块的名字叫做运动规划(motion planning)——规划就是计划未来。端到端学习的方法只输出当前驾驶动作,实际上相当于把控制(control)也囊括在内了,但通常模型内部还是需要通过辅助损失函数(auxiliary loss)等方式对未来有一个预测和考量的(比如Waymo的ChauffeurNet)。在时空的三维空间中的轨迹,可以完整地描述未来一段时间之内的运动的全貌,因此对这个完整运动的最优解算就可以实现有前瞻性的运动规划。这就是为什么我们要在运动规划的时候考虑未来时间这个维度。

2

体感

运动规划考虑空间和未来时间这三个维度,就够了吗?要回答这个问题,绕不开体感这个话题。体感也就是物理舒适度(physical comfort),是驾驶舒适度的一个重要方面,反映了车辆运动的不平滑性。体感与舒适度的其他方面一样,比较主观,评估需要从多种指标考

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
为了实现echarts时间轴自动跳转,可以使用echarts的setOption()方法来更新表的配置。具体步骤如下: 1.在初始化echarts实例时,需要设置dataZoom组件的start和end属性,以控制时间轴的显示范围。 2.使用setInterval()函数来定时更新表的配置,以实现时间轴自动跳转。 下面是一个示例代码,演示如何实现echarts时间轴自动跳转: ```javascript var myChart = echarts.init(document.getElementById('main')); // 设置dataZoom组件的start和end属性 var option = { xAxis: { type: 'category', data: ['2010', '2011', '2012', '2013', '2014', '2015', '2016', '2017', '2018', '2019', '2020'] }, yAxis: { type: 'value' }, dataZoom: [{ type: 'slider', start: 0, end: 50 }], series: [{ data: [10, 20, 30,40, 50, 60, 70, 80, 90, 100, 110], type: 'line' }] }; myChart.setOption(option); // 定时更新表的配置,实现时间轴自动跳转 setInterval(function () { var start = myChart.getOption().dataZoom[0].start; var end = myChart.getOption().dataZoom[0].end; var max = myChart.getOption().xAxis[0].data.length - 1; if (end < max) { myChart.setOption({ dataZoom: [{ start: start + 1, end: end + 1 }] }); } else { myChart.setOption({ dataZoom: [{ start: 0, end: 50 }] }); } }, 2000); ``` 在上面的代码中,我们使用了setInterval()函数来每隔2秒钟更新一次表的配置。在更新配置时,我们首先获取当前dataZoom组件的start和end属性,然后根据这些属性来计算下一次更新后的start和end属性。如果end属性已经到达了时间轴的最大值,我们就将start和end属性重置为0和50,以重新开始循环。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值