按自己的思路整一整程序(2)

回顾一下view matrix的计算过程。
一个在世界坐标中v(x,y,z)的点A,变换为视见坐标中v'(x',y',z')
 
首先确定好视见坐标系的三个坐标轴 x,y,z的方向失量。
其次,确定视见坐标原点到这个点A的方向失量q。
两个失量求点积就可以了。(新坐标系的x轴失量与q求点积得到x',以此类推.)
 
zaxis = normal(At - Eye)
xaxis = normal(cross(Up, zaxis))
yaxis = cross(zaxis, xaxis)

xaxis.x           yaxis.x           zaxis.x          0
xaxis.y           yaxis.y           zaxis.y          0
xaxis.z           yaxis.z           zaxis.z          0
-dot(xaxis, eye)  -dot(yaxis, eye)  -dot(zaxis, eye)  1
 
 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
PID控制器是一种经典的控制器,可以用于许多自动控制系统。PID控制器的主要作用是通过对误差信号进行反馈控制,使得系统输出能够跟踪所期望的输入信号。为了使PID控制器的效果更好,需要对控制器参数进行调整,这个过程称为自整定。 下面是一个简单的PID自整定程序,主要思路是利用Ziegler-Nichols方法来确定PID参数。 ```python import time # 设置PID控制器参数 kp = 0.0 ki = 0.0 kd = 0.0 # 设置PID控制器误差相关变量 last_error = 0.0 integral = 0.0 # 设置PID控制器目标值和实际值 setpoint = 0.0 process_variable = 0.0 # 设置PID控制器输出 output = 0.0 # 设置PID控制器采样时间 sample_time = 0.01 # 设置PID控制器调整参数 ku = 0.0 tu = 0.0 # 周期性地计算PID控制器参数 def autotune(): global kp, ki, kd, tu, ku # 设置步长和周期 step = 0.1 period = 5.0 # 开始进行自整定 print("Starting Ziegler-Nichols autotuning...") print("Step size: ", step) print("Period: ", period) # 记录开始时间 start_time = time.time() # 计算关键点 p1, p2, p3, p4 = False, False, False, False while not (p1 and p2 and p3 and p4): # 计算周期内的平均值 avg = 0.0 for i in range(int(period/sample_time)): error = setpoint - process_variable integral += error * sample_time derivative = (error - last_error) / sample_time output = kp * error + ki * integral + kd * derivative process_variable += output last_error = error time.sleep(sample_time) avg += process_variable avg /= int(period/sample_time) # 判断是否到达关键点 if not p1 and avg > setpoint*0.6: p1 = True tu = time.time() - start_time print("P1 reached at ", round(tu, 2), " seconds.") if p1 and not p2 and avg > setpoint*0.9: p2 = True print("P2 reached at ", round(time.time() - start_time, 2), " seconds.") if p2 and not p3 and avg < setpoint*1.1: p3 = True print("P3 reached at ", round(time.time() - start_time, 2), " seconds.") if p3 and not p4 and avg < setpoint*0.9: p4 = True print("P4 reached at ", round(time.time() - start_time, 2), " seconds.") # 计算PID控制器参数 ku = 4.0 * step / (math.pi * (avg - setpoint)) kp = 0.6 * ku ki = 1.2 * ku / tu kd = 0.075 * ku * tu # 输出PID控制器参数 print("Tuned PID controller parameters:") print("Kp: ", kp) print("Ki: ", ki) print("Kd: ", kd) # 运行自整定程序 autotune() ``` 这个程序中使用了Ziegler-Nichols方法来确定PID参数。该方法是通过在系统中引入一个步变信号,然后记录系统的响应曲线,从而计算出PID参数。程序中通过周期性地计算系统输出的平均值来判断系统是否到达关键点,然后计算PID参数。 需要注意的是,PID自整定程序的效果可能不是很好,因为实际系统往往比较复杂,PID控制器的参数调整也可能比较复杂。因此,在实际应用中,可能需要进行一定的手动调整。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值