Учет несоосности колес при одометрии дифференциала - PullRequest
3 голосов
/ 01 сентября 2010

У меня есть робот с дифференциальным приводом, использующий одометрию для определения его положения.

Я использую стандартные уравнения:

WheelBase = 35.5cm;
WheelRadius = 5cm;
WheelCircumference = (WheelRadius * 2 * Math.PI);
WheelCircumferencePerEncoderClick = WheelCircumference / 360;

DistanceLeft = WheelCircumferencePerEncoderClick * EncoderCountLeft
DistanceRight = WheelCircumferencePerEncoderClick * EncoderCountRight

DistanceTravelled = (DistanceRight + DistanceLeft) / 2
AngleChange (Theta) = (DistanceRight - DistanceLeft) / WheelBase

Мое (DIY) шасси имеет небольшую особенность,где по ходу колесной базы (35,5 см) колеса смещены, то есть левое колесо на 6,39 мм (я специалист по программному обеспечению, а не специалист по оборудованию!) больше «вперед», чем правое колесо.(Колеса - середина робота.)

Я не уверен, как рассчитать, что я должен добавить в свои формулы, чтобы дать мне правильные значения. Это не сильно влияет на робота, если толькоделает на месте повороты, и мои значения далеко, я думаю, что это вызывает.

Моей первой мыслью было нарисовать расположение колес на сетке и вычислить наклон линии их положения,и использовать это, чтобы умножить ... что-то.

Я на правильном пути?Может кто-нибудь протянуть руку?Я искал эту ошибку, и большинство людей, кажется, игнорируют ее (поскольку используют профессиональное шасси).

Ответы [ 2 ]

1 голос
/ 02 сентября 2010

Необходимо внести поправку в формулу для AngleChanged следующим образом:

Взять L и R за расстояния, пройденные левым и правым колесами, соответственно, за один такт.
Пусть B обозначает длину номинальной колесной базы (не длину вашей наклонной).
Пусть E представляет ошибку левого колеса. То есть расстояние, на которое левое колесо смещено вперед от идеального положения.
Мы стремимся найти θ, изменение угла колесной базы за один такт.

Сначала (предварительно) вычислите угол между перекосом колесной базы и идеальной колесной базой:

φ = арктан (E / B).

Используя некоторую элементарную геометрию (я могу опубликовать детали, если хотите), мы можем вычислить тета следующим образом:

σ = арктан ((E + L - R) / B)
θ = φ - σ

Учитывая, что это сводится к вашей предыдущей реализации, когда E = 0, и имеет интуитивно понятные результаты как E -> + inf., Наша формула кажется верной.

Примечание:
Вы, вероятно, хотите покончить с этим вычислительно-уродливым арктангенсом при вычислении σ (сигма). В подобных ситуациях обычной практикой (в действительности вы использовали ее в своих предыдущих формулах) использование приближения arctan (x) = x для малых x.
Проблема здесь заключается в том, что, хотя количество (L-R) / B, вероятно, будет довольно небольшим, ошибка добавления E / B может расти неприемлемо большой. Вы можете попробовать вычислить сигму, просто покончив с арктаном и используя сигму = (E + LR) / B, но если вы хотите лучшего приближения, вы должны использовать ряд Тейлора первого порядка для арктана (a + x) около 0:

арктан (а + х) = арктан (а) + х / (1 + а ^ 2)

Применительно к расчету сигмы приближение теперь выглядит так:

σ = арктан (E / B) + (L - R) / (B + E ^ 2 / B)

Обратите внимание, что арктан (E / B) уже был предварительно рассчитан как φ. Это гораздо лучшее приближение для сигмы, которое должно дать более точные вычисления для тета.

0 голосов
/ 02 сентября 2010

Если я читаю это право, проблема в том, что, поскольку левое колесо впереди правого, когда они вращаются с разной скоростью, они не могут катиться без проскальзывания.Чем больше разница в скоростях поворота, тем хуже становится проблема, и, вероятно, именно поэтому она проявляется при «повороте на десять центов», когда вращения противоположны.рассмотрим связанную с этим проблему: два колеса расположены правильно, но оба немного смещены влево (именно в такой ситуации вы представляете диагональ между колесами как «колесную базу»).Затем движение можно разбить на два компонента: основной компонент вперед-назад, который действует нормально, и вспомогательный компонент вбок, который не вызывает изменения угла и зависит только от суммы оборотов колеса.

I 'посмотрим, смогу ли я придумать какую-нибудь математику, которая имеет смысл ...

...