news 2026/7/7 10:18:15

无人船的Smith - PID跟踪控制探索

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
无人船的Smith - PID跟踪控制探索

基于无人船的smith-pid跟踪控制资料。 首先,针对pid进行了改进,有传统pid,最优pid和基于smith的pid三种控制方式。 然后还在smithpid基础上设计了LOS的曲线跟踪方法。 (有对应参考文献)。 有意者可直接联系,参考学习资料。 python语言。

在无人船领域,精确的跟踪控制至关重要。今天咱们来聊聊基于无人船的Smith - PID跟踪控制,这其中涉及到对PID控制的改进,以及基于Smith - PID设计的LOS曲线跟踪方法。

PID控制改进之三种方式

传统PID

PID控制算是控制领域的元老了,其核心公式为:

# 简单的传统PID控制代码示例 class PID: def __init__(self, kp, ki, kd): self.kp = kp self.ki = ki self.kd = kd self.prev_error = 0 self.integral = 0 def update(self, setpoint, process_variable): error = setpoint - process_variable self.integral += error derivative = error - self.prev_error output = self.kp * error + self.ki * self.integral + self.kd * derivative self.prev_error = error return output

这里,kpkikd分别是比例、积分、微分系数。比例项kperror能快速对误差做出反应;积分项kiintegral用于消除稳态误差,随着时间积累误差的积分,让系统不断调整;微分项kd * derivative则根据误差的变化率提前做出调整,抑制超调。

最优PID

最优PID旨在寻找一组最佳的kpkikd参数,以达到最优控制效果。这通常需要借助一些优化算法,比如遗传算法、粒子群算法等。假设有一个目标函数来评估控制效果(比如最小化误差的平方和),通过优化算法不断迭代调整kpkikd。以下是一个简单使用遗传算法优化PID参数的伪代码思路:

# 遗传算法优化PID参数伪代码 import numpy as np # 目标函数,评估PID控制效果 def objective_function(kp, ki, kd): # 假设这里有计算误差平方和的逻辑 pid = PID(kp, ki, kd) total_error = 0 # 模拟系统运行,更新total_error return total_error # 遗传算法参数 population_size = 50 num_generations = 100 bounds = [(0, 10), (0, 10), (0, 10)] # kp, ki, kd的取值范围 # 初始化种群 population = np.random.uniform(bounds[0][0], bounds[0][1], (population_size, 3)) for generation in range(num_generations): fitness = np.array([objective_function(kp, ki, kd) for kp, ki, kd in population]) selected_indices = np.argsort(fitness)[:int(population_size * 0.5)] selected_population = population[selected_indices] new_population = [] while len(new_population) < population_size: parent1, parent2 = np.random.choice(selected_population, size = 2, replace = True) child = (parent1 + parent2) / 2 new_population.append(child) population = np.array(new_population) best_kp, best_ki, best_kd = population[np.argmin([objective_function(kp, ki, kd) for kp, ki, kd in population])]

通过遗传算法不断进化种群,最终找到能使目标函数最小的kpkikd,实现更优的控制。

基于Smith的PID

Smith预估器主要用于解决具有大纯滞后特性的系统控制问题。在无人船控制场景中,如果存在信号传输等滞后情况,Smith - PID就派上用场了。代码实现思路大致如下:

class SmithPID: def __init__(self, kp, ki, kd, tau, theta): self.kp = kp self.ki = ki self.kd = kd self.tau = tau self.theta = theta self.prev_error = 0 self.integral = 0 self.prev_time = 0 def update(self, setpoint, process_variable, current_time): error = setpoint - process_variable self.integral += error * (current_time - self.prev_time) derivative = (error - self.prev_error) / (current_time - self.prev_time) # Smith预估部分 predicted_output = process_variable + (error - self.prev_error) * self.theta / self.tau smith_error = setpoint - predicted_output output = self.kp * smith_error + self.ki * self.integral + self.kd * derivative self.prev_error = error self.prev_time = current_time return output

这里的tautheta分别是系统的时间常数和纯滞后时间。通过Smith预估部分,对未来的输出进行预估,提前补偿滞后的影响,从而提升控制性能。

基于Smith - PID的LOS曲线跟踪方法

在Smith - PID基础上,设计LOS(Line - Of - Sight)曲线跟踪方法,能让无人船更好地沿着预设曲线行驶。基本原理是计算无人船当前位置与预设曲线上目标点的连线(视线),并调整无人船的航向以跟踪这条视线。以下是一个简单的LOS跟踪算法代码框架:

import math # 假设无人船当前位置 (x, y),预设曲线上目标点 (target_x, target_y) def los_control(x, y, target_x, target_y, speed): distance = math.sqrt((target_x - x) ** 2 + (target_y - y) ** 2) angle_to_target = math.atan2(target_y - y, target_x - x) # 这里可以结合Smith - PID控制调整无人船航向 # 例如,将angle_to_target作为Smith - PID的输入设定值,当前航向作为反馈值 # 计算PID输出调整无人船的转向 # 这里简单假设直接根据距离调整速度 if distance < 10: speed = 0.5 * speed return angle_to_target, speed

这个框架中,先计算无人船与目标点的距离和角度,然后根据情况调整速度,并利用Smith - PID控制无人船的转向,从而实现曲线跟踪。

感兴趣的小伙伴可以直接联系获取参考学习资料,咱们一起深入研究基于无人船的Smith - PID跟踪控制。希望这篇博文能为你在相关领域的探索提供一些思路。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/7 11:19:16

java计算机毕业设计社区疫情防控管理系统 街区智慧防疫信息管理平台 基层社区传染病防控综合系统

计算机毕业设计社区疫情防控管理系统372989 &#xff08;配套有源码 程序 mysql数据库 论文&#xff09; 本套源码可以在文本联xi,先看具体系统功能演示视频领取&#xff0c;可分享源码参考。疫情反复期间&#xff0c;社区卡口纸质登记、微信群接龙、人工电话追核酸造成数据碎片…

作者头像 李华
网站建设 2026/7/7 8:26:23

大模型教我成为大模型算法工程师之day11:Transformer 架构

Day 11: Transformer 架构 摘要&#xff1a;2017年 Google 的那篇《Attention Is All You Need》横空出世&#xff0c;彻底改变了深度学习的格局。Transformer 抛弃了 RNN 的循环结构&#xff0c;完全依赖注意力机制&#xff0c;实现了并行计算和长距离依赖的完美解决。本文将拆…

作者头像 李华
网站建设 2026/7/7 7:06:21

基于SpringBoot的智慧医疗问诊系统-计算机毕业设计源码+LW文档

摘要 随着经济的蓬勃发展&#xff0c;互联网时代也在迅速前进。各行各业都在积极拥抱并应用先进技术&#xff0c;力求通过这些尖端科技手段来提升自己的竞争力与优势。这些努力不仅推动了行业内部的革新与进步&#xff0c;也为整个社会的发展注入了新的活力与动能。本文将讲述设…

作者头像 李华
网站建设 2026/7/7 15:11:43

构建智能测试数据供应链:动态数据集的实时更新机制

测试数据管理的范式转变 在持续交付与敏捷开发成为主流的当下&#xff0c;软件测试面临着前所未有的挑战。传统静态测试数据集如同“过期地图”&#xff0c;无法有效验证快速迭代中的系统行为。动态数据集的实时更新机制正是在这一背景下应运而生&#xff0c;它不再是简单的数…

作者头像 李华
网站建设 2026/7/7 17:55:03

【Qt】生产者-消费者模式学习笔记

生产者-消费者模式学习笔记 一、生产者-消费者模式通俗介绍 生产者-消费者模式是一种经典的多线程设计模式&#xff0c;核心作用是解耦数据的产生和处理过程&#xff0c;让两者可以独立运行、协同工作。 核心思想 生产者&#xff1a;负责生成数据&#xff08;比如采集传感器…

作者头像 李华
网站建设 2026/7/6 18:18:21

Hexo yilia主题

网址: https://github.com/litten/hexo-theme-yilia http://litten.me/ https://github.com/litten/hexo-theme-yilia https://github.com/litten/hexo-theme-yilia/wiki/Yilia%E6%BA%90%E7%A0%81%E7%9B%AE%E5%BD%95%E7%BB%93%E6%9E%84%E5%8F%8A%E6%9E%84%E5%BB%BA%E9%A1%BB%E…

作者头像 李华