Motivation
ETH ASL的开源飞行系统 github 使用了ESDF表示环境,用skeleton planning作为全局路径规划,用loco作为局部规划。希望使用这个系统的原因是最近开发的task planner需要机器人在跟随任务的同时,还要经过每个中间点, 目前开源系统中只有vox planning可以做到。
code reading
vox_rrt是用rrt作为全局规划, loco来优化的一个例子。入口函数: bool VoxbloxRrtPlanner::plannerServiceCallback。首先接收TSDF, ESDF,之后使用 OMPL 计算RRT生成全局轨迹。如果需要smoothing, 调用 generateFeasibleTrajectory() 计算经过waypoints的多项式轨迹 。之后又用了两次loco, 考虑了ESDF中的距离值 和其他优化变量 (如时间), 优化了轨迹。
得到轨迹之后,使用MPC跟随轨迹,输出底层控制量。
其实在generateFeasibleTrajectory() 之后,轨迹符合了经过路径点要求,但不符合安全性要求。而两次loco之后,轨迹符合安全性要求,又不符合路径点要求。目前折衷方案是,generateFeasibleTrajectory()中加入safe corridor, 不过这样就不需要SDF了, 且工作量有点大。