Skip to content

Кинематика колесных роботов. Дифференциальный привод. Привод Аккермана.

Дифференциальный привод и привод Аккермана: объяснение и примеры на Python

Дифференциальный привод и привод Аккермана – это два распространенных способа управления движением транспортных средств, особенно роботов и автомобилей.

1. Дифференциальный привод:

  • Принцип работы: Основан на использовании двух независимых приводов (обычно моторов) для управления двумя колесами, расположенными на одной оси. Изменение скорости вращения каждого колеса позволяет роботу поворачивать.
    • Одинаковая скорость вращения обоих колес приводит к прямолинейному движению.
    • Разная скорость вращения приводит к повороту. Чем больше разница скоростей, тем меньше радиус поворота.
  • Преимущества:
    • Простота конструкции и управления.
    • Маневренность: возможность поворота практически на месте.
  • Недостатки:
    • Пробуксовка на неровных поверхностях.
    • Сложность поддержания точной траектории движения.

Pasted image 20240525230425.png Pasted image 20240525230614.png Пример на Python:

import math

class DifferentialDrive:
  def __init__(self, wheel_radius, wheel_distance):
    self.wheel_radius = wheel_radius
    self.wheel_distance = wheel_distance

  def calculate_wheel_speeds(self, linear_velocity, angular_velocity):
    """
    Рассчитывает скорости вращения колес на основе заданной линейной 
    и угловой скорости робота.
    """
    left_wheel_speed = (linear_velocity - angular_velocity * self.wheel_distance / 2) / self.wheel_radius
    right_wheel_speed = (linear_velocity + angular_velocity * self.wheel_distance / 2) / self.wheel_radius
    return left_wheel_speed, right_wheel_speed

# Пример использования
robot = DifferentialDrive(wheel_radius=0.1, wheel_distance=0.5)

# Движение вперед со скоростью 1 м/с
linear_velocity = 1.0
angular_velocity = 0.0
left_speed, right_speed = robot.calculate_wheel_speeds(linear_velocity, angular_velocity)
print(f"Левое колесо: {left_speed:.2f} рад/с, Правое колесо: {right_speed:.2f} рад/с")

# Поворот на месте с угловой скоростью 1 рад/с
linear_velocity = 0.0
angular_velocity = 1.0
left_speed, right_speed = robot.calculate_wheel_speeds(linear_velocity, angular_velocity)
print(f"Левое колесо: {left_speed:.2f} рад/с, Правое колесо: {right_speed:.2f} рад/с")

2. Привод Аккермана:

  • Принцип работы: Используются рулевое управление для поворота передних колес и один или два привода для вращения колес.
    • При повороте руля внутреннее колесо поворачивается на больший угол, чем внешнее, чтобы все колеса катились без проскальзывания по концентрическим окружностям.
  • Преимущества:
    • Лучшая устойчивость и управляемость, особенно на высоких скоростях.
    • Меньший износ шин.
  • Недостатки:
    • Более сложная конструкция и управление.
    • Меньшая маневренность по сравнению с дифференциальным приводом.

Pasted image 20240525230628.png

Пример на Python:

import math

class AckermannDrive:
  def __init__(self, wheelbase, track_width):
    self.wheelbase = wheelbase
    self.track_width = track_width

  def calculate_steering_angles(self, steering_angle):
    """
    Рассчитывает углы поворота внутренних и внешних колес на основе 
    заданного угла поворота руля.
    """
    if steering_angle == 0:
      return 0, 0

    turning_radius = self.wheelbase / math.tan(math.radians(steering_angle))
    inner_angle = math.degrees(math.atan(self.wheelbase / (turning_radius - self.track_width / 2)))
    outer_angle = math.degrees(math.atan(self.wheelbase / (turning_radius + self.track_width / 2)))
    return inner_angle, outer_angle

# Пример использования
car = AckermannDrive(wheelbase=2.5, track_width=1.5)

# Поворот руля на 30 градусов
steering_angle = 30
inner_angle, outer_angle = car.calculate_steering_angles(steering_angle)
print(f"Внутренний угол: {inner_angle:.2f} градусов, Внешний угол: {outer_angle:.2f} градусов")

Выбор между дифференциальным приводом и приводом Аккермана зависит от конкретного применения. Для роботов, работающих в ограниченном пространстве, где важна маневренность, лучше подходит дифференциальный привод. Для автомобилей, движущихся на высоких скоростях, где важна устойчивость и управляемость, лучше подходит привод Аккермана.