6.[论文荐读] 一篇关于无人船运动控制方面的论文

《DRL-based Motion Control for Unmanned Surface Vehicles with Environmental Disturbances》

第六届IEEE国际无人系统大会(ICUS)

该论文主要研究无人船在海上风浪环境的运动控制不够精确的问题,提出了一种基于深度强化学习的运动控制方法。


论文提出了一种基于深度强化学习的运动控制方法(TD3-PI),整体的方法框架如图1所示。本算法在PI控制算法的基础上添加了强化学习的调参机制,首先,无人船控制系统将舵角和基于LOS算法计算出来的航向角偏差作为状态空间输入到深度强化学习算法TD3(Twin Delayed Deep Deterministic Policy Gradient)中。其次,TD3算法输出PI控制器的参数Kp和Ki,实现对PI控制器的实时调参。最后,利用新的控制器参数Kp和Ki计算出新的控制舵角,实现无人船精确控制。

图片

图 1 TD3-PI方法的框架

TD3算法是DDPG算法(Deep Deterministic Policy Gradient)的改进算法,整体的算法框架如图2所示。通过引入双层Q网络、目标策略平滑化和延迟更新网络的机制,有效避免了DDPG算法的过估计和振荡的缺点。

图片

图2 TD3算法框架

TD3算法的状态空间,动作空间和奖励函数的设置如下。其中航向角偏差和控制舵角构成了算法的状态空间,PI控制器的参数Kp和Ki构成了算法的动作空间,根据系统的特性,对动作空间Kp和Ki进行了裁剪。算法的奖励函数与航向角构成指数关系。

图片

如图3所示,在ROS中搭建了无人船的仿真平台,并加入风浪的环境参数模型(图中可以明显看出浪对无人船的影响),对无人船在风浪环境下进行航向角转角训练。

图片

图3.无人船的仿真环境

训练完成后,设置了航向角实验和轨迹跟踪实验以验证算法的可行性和有效性。在航向角实验中,分别设置了三十度和九十度的期望航向角,得出了两种算法的响应曲线,如图4所示。在没有风浪的环境下,PI算法和TD3-PI方法都实现了航向角的精确控制,然而在添加了风浪模型后,PI和TD3-PI的响应曲线都出现了振荡,但是TD3-PI的振荡幅度和频率比PI低得多,且在超调量和稳态误差这两个指标上也表现得更好。在如图5所示的轨迹跟踪实验中,在风浪环境下PI算法控制的无人船轨迹距离理想路径较TD3-PI方法有着更大的偏差,且在转弯时出现了惯性过大的现象。而TD3-PI算法表现得更好,有着更小的最大跟踪误差和跟踪时间。上述两个实验说明TD3-PI算法相比于PI算法具有更好的环境适应性,更适合在风浪环境下对无人船进行精确控制。

图片

图片

图4 三十度期望航向角实验

图片

图5 轨迹跟踪实验

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
很抱歉,由于本AI的回答长度有限制,无法完成20000字的论文。但是,我可以为您提供一份C语言控制小车运动的简短教程,帮助您了解控制小车的基本原理和实现方法。 C语言控制小车运动教程 1. 硬件准备 在开始编写控制小车的C程序之前,首先需要准备好相应的硬件。通常来说,控制小车需要以下硬件: - 一块单片机开发板(例如Arduino、STM32等) - 一个电机驱动模块(例如L298N) - 两个直流电机 - 一块电池供电模块 - 一些杜邦线、面包板等连接线路 将电机驱动模块和电池供电模块连接到单片机开发板上,然后将两个直流电机连接到电机驱动模块上即可。 2. 编写控制程序 在硬件准备完毕后,接下来需要编写控制小车的C程序。通常来说,控制小车需要实现以下功能: - 控制小车向前/后/左/右移动 - 控制小车速度的快慢 下面是一个简单的C程序示例,可以实现基本的小车控制功能: ``` #include <stdio.h> #include <stdlib.h> #include <wiringPi.h> #define MotorPin1 0 // IN1 #define MotorPin2 1 // IN2 #define MotorPin3 2 // IN3 #define MotorPin4 3 // IN4 void init() { wiringPiSetup(); pinMode(MotorPin1, OUTPUT); pinMode(MotorPin2, OUTPUT); pinMode(MotorPin3, OUTPUT); pinMode(MotorPin4, OUTPUT); } void forward() { digitalWrite(MotorPin1, HIGH); digitalWrite(MotorPin2, LOW); digitalWrite(MotorPin3, HIGH); digitalWrite(MotorPin4, LOW); } void backward() { digitalWrite(MotorPin1, LOW); digitalWrite(MotorPin2, HIGH); digitalWrite(MotorPin3, LOW); digitalWrite(MotorPin4, HIGH); } void turnLeft() { digitalWrite(MotorPin1, HIGH); digitalWrite(MotorPin2, LOW); digitalWrite(MotorPin3, LOW); digitalWrite(MotorPin4, HIGH); } void turnRight() { digitalWrite(MotorPin1, LOW); digitalWrite(MotorPin2, HIGH); digitalWrite(MotorPin3, HIGH); digitalWrite(MotorPin4, LOW); } void stop() { digitalWrite(MotorPin1, LOW); digitalWrite(MotorPin2, LOW); digitalWrite(MotorPin3, LOW); digitalWrite(MotorPin4, LOW); } int main() { init(); forward(); delay(1000); backward(); delay(1000); turnLeft(); delay(1000); turnRight(); delay(1000); stop(); return 0; } ``` 这个程序中,我们使用了wiringPi库来控制GPIO口的输出,通过digitalWrite函数实现对电机驱动模块的控制。在main函数中,我们依次调用了forward、backward、turnLeft、turnRight和stop函数,分别实现小车向前、向后、向左、向右移动以及停止运动的功能。 3. 调试与优化 在完成程序编写后,需要进行调试和优化,确保程序能够正常运行。可以通过串口调试、LED灯提示等方式,检查程序的运行状态和运行结果,并进行必要的优化,提高小车的运动稳定性和控制精度。 总结 通过以上步骤,我们可以实现基本的C语言控制小车运动的功能。当然,实际应用中还需要考虑更多因素,例如小车的传感器、避障算法等。希望这篇教程能够帮助您了解控制小车的基本原理和实现方法,进一步深入学习相关知识,提高自己的技能水平。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值