ROS系统中基于强化学习算法的移动机器人路径规划策略研究:应用DQN、DDPG、SAC及TD3算法
ROS下的移动机器人路径规划算法使用的是 强化学习算法 DQN DDPG SAC TD3等最近研究移动机器人的小伙伴肯定绕不开路径规划这个话题。在ROS生态里搞强化学习就像在乐高积木上装火箭发动机——既灵活又带劲。今天咱们不聊传统A*、RRT这些老伙计重点掰扯掰扯怎么用DDPG、SAC这些时髦算法让机器人自己学会认路。先看个真实场景TurtleBot在Gazebo迷宫里瞎转悠激光雷达数据乱飘这时候传统的路径规划算法可能得现场算个半死。但要是用上强化学习这货能自己琢磨出怎么绕开障碍物直奔目标。咱们拿DDPG举个栗子毕竟这算法处理连续动作空间贼合适class DDPGAgent: def __init__(self, state_dim, action_dim): self.actor ActorNetwork(state_dim, action_dim) # 决策网络 self.critic CriticNetwork(state_dim, action_dim) # 价值评估 self.target_actor copy.deepcopy(self.actor) # 目标网络 self.memory deque(maxlen100000) # 经验池 def act(self, state, noise0.1): action self.actor(tf.constant([state]))[0] return np.clip(action np.random.normal(0, noise), -1, 1) # 加点探索噪声 def update(self): batch random.sample(self.memory, 32) states, actions, rewards, next_states, dones map(np.array, zip(*batch)) # Critic网络更新关键在时序差分误差 with tf.GradientTape() as tape: target_actions self.target_actor(next_states) target_q rewards 0.99 * (1 - dones) * self.target_critic([next_states, target_actions]) current_q self.critic([states, actions]) critic_loss tf.reduce_mean(tf.square(target_q - current_q)) critic_grad tape.gradient(critic_loss, self.critic.trainable_variables) self.critic.optimizer.apply_gradients(zip(critic_grad, self.critic.trainable_variables)) # 此处省略Actor更新部分...总不能把代码全贴出来吧这里有个骚操作要注意激光雷达数据最好做归一化处理不然距离数值可能从0.1米到10米跨度太大网络容易抽风。动作空间通常设成[-1,1]区间对应线速度和角速度比如# 动作到实际速度的映射 linear_speed action[0] * MAX_SPEED angular_speed action[1] * MAX_TURN奖励函数设计是门玄学个人经验是别让机器人活得太舒服。比如这样设定到达目标1000撞墙-500每一步时间惩罚-1朝向目标的角度差惩罚-5*|θ|但实际调参时可能得把距离衰减做进去比如每靠近目标1米给10分这样比单纯终点给大分更有效。ROS下的移动机器人路径规划算法使用的是 强化学习算法 DQN DDPG SAC TD3等说到SAC软演员-评论家算法这货自带熵正则化特别适合路径规划这种需要探索的场景。和DDPG最大的区别在于策略网络会主动增加随机性class SACAgent: def __init__(self, state_dim, action_dim): self.policy StochasticActor(state_dim, action_dim) # 输出均值和方差 self.q_net1 QNetwork(state_dim, action_dim) self.q_net2 QNetwork(state_dim, action_dim) # 双Q网络防过估计 def act(self, state): mean, log_std self.policy(state) std tf.exp(log_std) action mean tf.random.normal(tf.shape(mean)) * std return tf.tanh(action) # 压缩到[-1,1]训练时发现个坑Gazebo仿真速度跟不上算法更新频率。这时候得用ROS的多线程回调把传感器数据采集和模型推理放在不同线程必要时还要做数据插值。另外记得用rosbag录数据方便复现诡异bug。最后给个实战建议先用TD3算法快速验证这算法比DDPG稳定等效果稳定了再换SAC追求更好性能。实测在静态环境中DDPG训练2万步能收敛但在动态障碍物场景下SAC的探索能力能快20%左右。别信论文里的完美曲线真实训练时loss震荡得像心电图才是常态——只要整体趋势向下就偷笑吧。
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2414964.html
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!