MEPhI_ROS2_drone - это двухколесный робот с открытым исходным кодом, разработанный для образовательных целей командой студентов из НИЯУ МИФИ. MEPhI_ROS2_drone полностью интегрирован с ROS2 и является отличной базовой платформой для плавного введения в ROS2. Благодаря открытому коду и исходным файлам 3D моделей любой желающий может модифицировать и настроить робота в соответствии со своими требованиями.
*Данный проект является форком проекта Andino, ПО, конструкция и электрическая схема которого были доработаны под наши требования.
3D: 3D модели деталей и сборки робота, также содержит.stlдля 3D печати и.dxfдля лазерной резкиschematic: электрическая схема робота и инструкция по ее сборкеMEPhI_ROS2_drone_hardware: содержит инструкцию по сборкеMEPhI_ROS2_droneи перечень используемого оборудованияMEPhI_ROS2_drone_firmware: содержит код отладочной платы Arduino UNO R3 для сопряжения с raspberry pi 4 и инструкцию по его заливке на платуMEPhI_ROS2_drone_bringup: содержит файлы запуска для старта всех связанных драйверов и нод, которые будут использоваться в роботеMEPhI_ROS2_drone_description: содержит описание робота в формате.urdfMEPhI_ROS2_drone_base: это программно-аппаратный модуль проекта, который обеспечивает связь с микроконтроллером для управления моторами и предоставляет утилиты для отладкиMEPhI_ROS2_drone_control: запускает controller_manager вместе с ros2 controllers: diff_drive_controller и joint_state_broadcasterMEPhI_ROS2_drone_slam: обеспечивает работуSLAM(одновременная локализация и построение карты)MEPhI_ROS2_drone_navigation: стек навигации, основанный наNav2
- Сборка конструкции робота подробно описана в
andino_hardware - Сборка электрической схемы подробно описана в
schematic
Для работы MEPhI_ROS2_drone на Raspberry Pi 4B необходимо установить и настроить Ubuntu 22.04 LTS.
- Перейдите на сайт https://ubuntu.com/download/raspberry-pi
- Выберете руководство по установке Ubuntu Desktop
- Вставьте карту MicroSD в Raspberry Pi и подключите кабель питания USB-C
- Подключите монитор и клавиатуру
- Проследуйте указаниям на экране
- Запустите терминал и введите
sudo apt update && sudo apt upgrade -y
- Проверьте версию Ubuntu (ожидаемый вывод:
Ubuntu 22.04 LTS):
lsb_release -a
- Проверьте подключение к интернету:
ping google.com
Назначьте фиксированные имена USB-портам для стабильного распознавания устройств в ROS2.
- Подключите Arduino UNO R3 и RPLIDAR A1 к Raspberry Pi
- Просмотрите подключенные USB-устройства:
ls -l /dev/ttyUSB*
Пример вывода:
crw-rw---- 1 root dialout 188, 0 Apr 06 03:10 /dev/ttyUSB0
crw-rw---- 1 root dialout 188, 1 Apr 06 03:10 /dev/ttyUSB1
- Определите устройства:
- Отключите RPLIDAR и снова выполните ls -l /dev/ttyUSB*. Исчезнувшее устройство — RPLIDAR
- Повторите для Arduino
- Пример:
/dev/ttyUSB0 = Arduino,/dev/ttyUSB1 = RPLIDAR
- Получите идентификаторы устройств:
udevadm info --name=/dev/ttyUSB0 --attribute-walk | grep -i "serial\|vendor"
Пример для Arduino:
ATTRS{serial}=="A1234567"
ATTRS{vendor}=="Arduino"
Пример для RPLIDAR:
ATTRS{serial}=="B7890123"
ATTRS{vendor}=="SLAMTEC"
- Создайте правила udev:
- Отредактируйте файл правил:
sudo nano /etc/udev/rules.d/99-usb-serial.rules
- Добавьте (замените serial на ваши значения):
SUBSYSTEM=="tty", ATTRS{serial}=="A1234567", SYMLINK+="ttyUSB_ARDUINO"
SUBSYSTEM=="tty", ATTRS{serial}=="B7890123", SYMLINK+="ttyUSB_LIDAR"
- Сохраните (Ctrl+O, Enter, Ctrl+X)
- Перезагрузите правила:
sudo udevadm control --reload-rules
sudo udevadm trigger
- Проверьте новые имена:
ls -l /dev/ttyUSB*
Ожидаемый вывод:
lrwxrwxrwx 1 root root 7 Apr 06 03:15 /dev/ttyUSB_ARDUINO -> ttyUSB0
lrwxrwxrwx 1 root root 7 Apr 06 03:15 /dev/ttyUSB_LIDAR -> ttyUSB1
Следуйте руководству в MEPhI_ROS2_drone_firmware
- Настройте локализацию:
sudo apt update && sudo apt install -y locales
sudo locale-gen en_US en_US.UTF-8
sudo update-locale LC_ALL=en_US.UTF-8 LANG=en_US.UTF-8
export LANG=en_US.UTF-8
- Добавьте репозиторий ROS2:
sudo apt install -y software-properties-common
sudo add-apt-repository universe
sudo apt update && sudo apt install -y curl gnupg lsb-release
sudo curl -sSL https://raw.githubusercontent.com/ros/rosdistro/master/ros.key -o /usr/share/keyrings/ros-archive-keyring.gpg
echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/ros-archive-keyring.gpg] http://packages.ros.org/ros2/ubuntu $(lsb_release -cs) main" | sudo tee /etc/apt/sources.list.d/ros2.list > /dev/null
- Установите ROS2 Humble Desktop:
sudo apt update
sudo apt install -y ros-humble-desktop
- Установите инструменты разработки:
sudo apt install -y python3-colcon-common-extensions python3-rosdep python3-vcstool
- Инициализируйте rosdep:
sudo rosdep init
rosdep update
- Настройте окружение:
echo "source /opt/ros/humble/setup.bash" >> ~/.bashrc
source ~/.bashrc
- Создайте рабочее пространство:
mkdir -p ~/MEPhI_ROS2_drone_ws/src
cd ~/MEPhI_ROS2_drone_ws/src
- Склонируйте репозиторий:
git clone -b humble https://github.com/Muhamedli/MEPhI_ROS2_drone.git
- Установите зависимости ROS:
cd ~/MEPhI_ROS2_drone_ws
rosdep install --from-paths src --ignore-src -r -y
- Соберите проект:
colcon build
- Подгрузите окружение:
echo "source ~/MEPhI_ROS2_drone_ws/install/setup.bash" >> ~/.bashrc
source ~/MEPhI_ROS2_drone_ws/install/setup.bash
SLAM позволяет роботу строить карту неизвестной среды и одновременно определять свое местоположение. В этом разделе используется пакет MEPhI_ROS2_drone_slam с алгоритмом Cartographer.
- Запустите базовые ноды робота:
ros2 launch andino_bringup andino_robot.launch.py
Это активирует ноды для работы с двигателями и лидаром.
- Проверьте доступные топики:
ros2 topic list
Ожидаемые топики:
/odom: данные одометрии/scan: данные лидара
- Запустите SLAM:
ros2 launch andino_slam slam_toolbox_online_async.launch.py
- Запустите rviz:
rviz2
- Управляйте роботом для построения карты:
- В новом терминале запустите телеуправление:
ros2 launch andino_bringup teleop_keyboard.launch.py
- Используйте клавиши (исполнительные клавиши будут отображены на мониторе) для медленного перемещения робота по помещению
- Сохраните созданную карту:
ros2 run nav2_map_server map_saver_cli -f ~/andino_map
- Карта сохранится в файлах
andino_map.pgmиandino_map.yamlв домашней директории
- Остановите SLAM:
- Нажмите Ctrl+C в терминале с SLAM
- Запустите навигацию с сохраненной картой:
ros2 launch andino_navigation bringup.launch.py map:=~/andino_map.yaml
- Установите начальную позицию в RViz:
- Используйте инструмент
2D Pose Estimateв RViz - Щелкните на карте, чтобы указать приблизительное положение робота
- Лидар не работает:
- Проверьте порт:
ls -l /dev/ttyUSB_LIDAR
- Убедитесь, что RPLIDAR подключен и питается
- Двигатели не реагируют:
- Проверьте прошивку Arduino: отправьте
o 100 100через Монитор порта - Убедитесь, что порт
/dev/ttyUSB_ARDUINOдоступен
- Карта не строится:
- Проверьте топик /scan:
ros2 topic echo /scan
- Убедитесь, что робот движется и лидар собирает данные
- RViz не открывается:
- Убедитесь, что RViz установлен:
sudo apt install -y ros-humble-rviz2



