4.3 运动控制算法

PID控制器实现

PID(比例-积分-微分)控制器是工业控制中最常用的算法:

class PIDController:
    def __init__(self, Kp, Ki, Kd, setpoint):
        self.Kp = Kp
        self.Ki = Ki
        self.Kd = Kd
        self.setpoint = setpoint
        self.prev_error = 0
        self.integral = 0
        
    def compute(self, measured_value):
        error = self.setpoint - measured_value
        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

双闭环控制系统

我们采用速度环+位置环的双闭环控制结构:

位置指令 → 位置PID → 速度指令 → 速度PID → 电机驱动
      ↑位置反馈          ↑速度反馈
  • 位置环:控制小车到达目标位置
  • 速度环:控制电机达到指定转速

轨迹跟踪算法

对于网球捡拾任务,我们实现了简单的轨迹跟踪:

def follow_trajectory(current_pos, target_pos):
    # 计算位置偏差
    dx = target_pos[0] - current_pos[0]
    dy = target_pos[1] - current_pos[1]
    
    # 计算目标方向
    target_angle = atan2(dy, dx)
    
    # 角度偏差
    angle_error = target_angle - current_pos[2]
    
    # 距离目标距离
    distance = sqrt(dx*dx + dy*dy)
    
    # 双PID控制
    angle_output = angle_pid.compute(angle_error)
    speed_output = speed_pid.compute(distance)
    
    # 转换为左右轮速
    left_speed = speed_output - angle_output
    right_speed = speed_output + angle_output
    
    return left_speed, right_speed