Skip to content

Пространство и положение

Скажите роботу: «поверни налево». Налево — это куда? Относительно стены? Относительно вас? Относительно самого робота? Пока мы не договорились, от чего считать, слова «налево», «вперёд», «на два шага» не значат ничего. Вся навигация роботов начинается с одного вопроса: где мы находимся и куда смотрим — и по отношению к чему.

Положение — это всегда положение относительно чего-то. У робота нет «абсолютного» верха и низа. Есть только точки отсчёта, которые мы выбрали. Научиться работать с ними — половина навигации.

У робота есть свои «вперёд» и «право».

У любого робота есть перёд (куда едет), зад, лево и право — как у вас, когда вы идёте. Это его собственные стороны: если робот развернётся, его «право» повернётся вместе с ним, а ваше — нет. Отсюда классическая путаница: «поверни направо» для вас и для робота — это разные стороны, если он едет вам навстречу.

Чтобы описывать, где робот, удобно расчертить поле на клетки, как шахматную доску. Тогда положение — это просто адрес клетки: «третья вправо, вторая вверх». Два числа — и мы точно знаем, где робот.

Попробуйте. Ведите робота по полю только командами «вперёд на 1 клетку» и «поворот». Быстро станет ясно: чтобы попасть в нужную клетку, надо помнить не только где робот, но и куда он смотрит.

Где это работает на столе

Как только робот должен «повернуть ровно на 90°», «доехать до точки», «запомнить, где был старт» — он работает именно с этими идеями. Компас и гироскоп (см. Датчики навигации) дают угол θ\theta; колёсные энкодеры считают пройденный путь и обновляют (x,y)(x, y).

Заглянуть глубже: матрицы поворота, кватернионы, TF

Перевод координат из одной системы в другую записывают компактно — матрицей поворота, а вместе со сдвигом начала — однородным преобразованием (матрица 4×4). Для описания ориентации в 3D углы крен/тангаж/рыскание (углы Эйлера) удобны для человека, но у них есть неприятная «блокировка» (gimbal lock), поэтому в серьёзных системах ориентацию хранят как кватернион — четвёрку чисел без этой проблемы.

Все системы отсчёта робота (мир, база, колесо, камера, схват) связывают в TF-дерево — иерархию преобразований, которой в ROS 2 управляет библиотека tf2. Именно она автоматически отвечает на вопрос «где эта точка относительно камеры, если я знаю, где она относительно мира».