OE无人船:事件触发下的非线性模型预测控制
OE 无人船 事件触发 非线性模型预测控制站在甲板上盯着OE无人船的实时轨迹曲线手里的冰美式已经见底。这玩意儿在复杂海况下的控制响应总带着点玄学味道——传统周期采样控制就像拿着菜刀切牛排既浪费算力又不够优雅。今天咱们试试事件触发机制NMPC的暴力美学。先甩个船体动力学模型镇楼def ship_dynamics(x, u): psi x[2] # 艏向角 u, v, r x[3], x[4], x[5] # 体坐标系速度 M np.array([[200, 0, 0], # 惯性矩阵 [0, 250, 50], [0, 50, 100]]) C np.array([[0, 0, -100*v - 50*r], [0, 0, 200*u], [100*v 50*r, -200*u, 0]]) D np.diag([70*u, 100*v, 30*r]) # 阻尼矩阵 eta_dot np.array([u*np.cos(psi) - v*np.sin(psi), u*np.sin(psi) v*np.cos(psi), r]) nu_dot np.linalg.inv(M) (u - Cnu - Dnu) return np.concatenate((eta_dot, nu_dot))这模型里藏着魔鬼——科氏力项C和速度相关的阻尼项D让整个系统充满非线性耦合。传统MPC每50ms解一次优化问题实际运行时发现60%的计算都浪费在状态偏离不大的时候。搞个聪明点的事件触发器class EventTrigger: def __init__(self, threshold0.05, delta_t0.1): self.last_u None self.threshold threshold self.min_interval delta_t def check(self, x, ref_traj): if self.last_u is None: return True # 触发条件状态偏差超过阈值或最小间隔到期 state_error np.linalg.norm(x[:3] - ref_traj[:3]) time_since_last time.time() - self.last_time return state_error self.threshold or time_since_last self.min_interval这里埋了个双保险既防止高频震荡又避免长时间不更新。实测中这个触发条件能让计算量降低40%左右特别是在直线航段效果拔群。OE 无人船 事件触发 非线性模型预测控制NMPC的核心还是那个带约束的优化问题用CasADi撸起来比较带感def build_nmpc(ode, N10, T5.0): opti casadi.Opti() X opti.variable(6, N1) U opti.variable(2, N) # 代价函数跟踪误差控制量惩罚 J 0 for k in range(N): J 10*(X[:3,k] - ref_traj[:,k]).T (X[:3,k] - ref_traj[:,k]) J U[:,k].T np.diag([0.1, 0.5]) U[:,k] # 动力学约束 for k in range(N): x_next ode(X[:,k], U[:,k]) opti.subject_to(X[:,k1] x_next) # 输入约束 opti.subject_to(opti.bounded(-30, U[0,:], 30)) # 推进力限制 opti.subject_to(opti.bounded(-np.pi/6, U[1,:], np.pi/6)) # 舵角限制 opti.minimize(J) return opti注意看代价函数里的权重系数第一个控制量对应主机推力第二个对应舵效——这参数调了整整两天最后发现跟咖啡因摄入量成负相关。跑起来之后在ROS里看到的典型控制节奏[INFO] 10:00:00 - 触发控制量更新耗时78ms [INFO] 10:00:12 - 状态稳定跳过计算 [INFO] 10:00:23 - 风浪突变触发重规划这种间歇性爆发的计算节奏像极了程序员赶DDL时的状态切换。实测轨迹跟踪误差比传统方法降低了15%而计算耗时只有原来的三分之一。不过坑还是有的——事件触发时机和预测时域的耦合会导致奇怪的边缘效应。有次在浪涌中触发不及时船体直接来了个托马斯回旋吓得岸基人员差点启动紧急预案。后来在触发条件里加了惯性项才稳住果然控制算法和人一样不能太二极管。收工前瞥见监控里无人船划出的优美航迹突然想起导师的名言好的控制算法应该像海豚游泳——精准而节能。 这波至少做到了后者至于精度嘛...明天继续调参吧。
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2443643.html
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!