WPP Presentation
sensing.cpp是一个文件,不是节点。 RLagent还不存菜,需要设计。除此之外, 方型是topic, 椭圆形是node。 sim是汽车的动力学模拟器,汽车的运动学数据,如速度位置都在RC01s/data里面
vehicle kinematic states
/drive
RC01s/carsimcmd
RC01s/data
cmd_trans
sim
sensing
RL_agent
AckermanStamp msg
Control msg for sim
Vehicle dynamics simulator
启动模拟器
启动模拟器方式,
Launch the f1tenth simulator:
Go to the working directory of the simulator (/simulator)
$ source devel/setup.bash
$ roslaunch f1tenth_simulator simulator_mb.launch
同时另开一个terminal:
cd 到 simulator/src/carsim/src
$ python cmd_trans.py
RL agent
可参考 https://github.com/MichaelBosello/f1tenth-RL
也可以构建gym环境,利用stable_baseline3 . 参考https://stable-baselines.readthedocs.io/en/master/guide/pretrain.html
要求使用PPO, SAC,DDPG三种算法。
实现目的
像视屏中一样,从静止启动,最终转向180 度,快速漂移入库!
要快速飘逸侧方停车入库,不是网上现有的强化学习侧方停车!
Pre-train
cd simulator/src/carsim/src
$ python cmd_180.py
这样可以运行180度高速漂移侧方停车的案例。我希望用这个案例做pre-train,也就是initialization。(模仿学习)。通过初始化可以缩短训练时间。
这个案例的action和state被保存到csv文件里。 文件名和地址在py文件中已写明
这个pretrain的case:起点(-4,4); 终点(4,3), 方向旋转180度
训练目的
起点 (-4,4)
终点 (4.6,3)单位都是米
fangxiangxuanzhuan180度
State【vx, vy, x, y, yaw, yaw_r, slip_angle】vx vy in car frame. x,y in global frame
Action [ Trottle, Steer, Jerk]
Throttle[-1~1]. 一般取0~1. 若throttle小于0, 则触发刹车。0为没有力矩输出,1为最大力矩输出
Steer: 【-1,1】 -1, 最大右转向; 1, 最大左转向。
Jerk: 一般为0; 若为1, 则小车回到出生地(-4,4)。 在完成一个episode的训练后,可以把jerk置1, 回到起点。
Reward function 的设计
Reward
R = Vx* 100 – Vy*100 if time < 0.9s (希望小车开始的时候直线加速,不干别的)
R = -distance* i - yaw_angle_error *l +vy*j + slip_angle*k; if time>0.9s. 前两项是关于汽车和目标位置以及目标方向, 后两项是关于汽车的漂移。 vy和slip_angle越大, 说明漂移越剧烈。
具体的reward function可以根据需要修改。
设计方法参考了这篇论文 (https://arxiv.org/abs/2001.01377)
/docProps/thumbnail.jpeg