Обзор исходных кодов

rqt_graph

03 graph 3
03 graph 2
03 graph 1

ros2_ws/src/lesson_08/README.md

## state_machine

### Controller

Занимается взаимодействием с внешним миром, выключает состояния при необходимости (в конкуренции).

### WaterstriderStates

- Start (Ждёт от оператора команды начала миссии (через топик или через сервис));
- ObjectDetectedState (Ждёт обнаружения объекта);
- MoveToState (Движение к заданной точке (местоположение точки может уточняться во время движения, но нет никаких фильтров));
- MoveToClickedState (Движение по точкам заданным оператором через rviz2);
- MoveAroundState (Движение вокруг заданной точки (местоположение точки может уточняться во время движения, но нет никаких фильтров));
- FinishState (Выключает двигатели).

### state_machine

Простая реализация state_machine с визуализацией, Controller запускается в отдельном потоке, есть конкуренции.

## Остальные ноды

### MotionController

Отвечает за управление в автоматическом режиме. Использует PID по скорости и по курсу.

- moveTo;
- moveAround;
- moveStop.

### pid_node

Нода с пидом.

### PositionManager

Обрабатывает получаемое положение из rviz в будущем туда можно добавить режим локального положения (xy=0 0 heading=0) или позиционирование через mrmr+compass или по инерциалке.

### SimpleComputerVision

Отвечает за поиск объекта (красного круга на дне). Выделяет контуры по HSV маске, среди контуров ищет подходящий по условию минимального размера, среди них оставляет только один контур максимального размера. Считает положение относительно катамара по упращённым формулам.

### TwistController

Нужен для возможности ручного управления катамараном во время выполнения мисии.
Так же обеспечивает безопасность - если не поступают команды, то он выключает движители.
Реализует хотфикс "При движении с рулением линейная скорость больше" для полученя ожидаемой сокрости при движения по окружности.