Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Образовательный робот TurtleBro разработан для изучения основ современной робототехники на примере мета-операционной системы Robot Operating System (ROS), работающей в среде Linux.
Данная инструкция описывает устройство робота, основы работы с ним, а также рассказывает последовательность действий для работы с ROS на плате Raspberry Pi.
Архив документации для ROS melodic и python2
Более глубокое изучение ROS можно начать с нашей книги ""
Робот разработан и поддерживается проектом ""
Видео по
Образ SD-карты с ROS2
создан на основе дистрибутива ROS2 Humble
. В качестве базовой ОС используется Ubuntu Server 22.04 LTS
В образе уже установлены дополнительные пользовательские пакеты (аналоги старых пакетов ROS1):
После обновления SD-карты и прошивки - робот готов для работы.
Имя робота после установки нового образа: turtlebro01
Все необходимые сервисы и пакеты запускаются при включения робота.
После подключения к роботу по SSH, работают все ros2
команды.
Робот запускает fastdds server
с настройками -l 127.0.0.1 -p 11811
Управление fastdds
через systemd
Для настройки компьютера для подключению к ROS2
необходимо провести настройки в режим super_client
. Для этого необходимо на компьютере:
Скачать .xml файл:
Поменять настройки адреса подключения в скаченном файле:
Вместо 127.0.0.1 необходимо указать IP-адрес робота.
Установить переменную окружения, указав месторасположения файла:
После завершения настроек, при выполнении команды ros2 topic list
вы увидите топики вашего робота.
Основной сервис необходимый для работы робота turtlebro
При выполнении запуска сервиса запускается launch
файл пакета turtlebro
turtlebro.xml
Сервис-агент для работы microros
В прошивке начиная с версии 0.9 используется ROS Noetic и Python3. Для обновления на актуальную версию необходимо:
Начиная с версии 0.9 пакеты ROS устанавливаются в двух разных директориях окружений. Системные пакеты установлены в директорию ros_catkin_ws
. В директорию catkin_ws
установлены пользовательские пакеты.
Образ можно скачать по ссылке: Все доступные прошивки для робота TurtleBro:
Инструкция по Видеоинструкция по обновлению образа:
turtlebro
turtlebro_navigation
turtlebro_web
Для поддержки управления роботом через Raspberry необходимо обновить ПО платы Turtleboard. Новая прошивка создана на базе фреймворка microROS
(), являющегося "идейным" продолжением библиотеки rosserial
. Все системные топики управления платформой работают на микроконтроллере.
Прошивку для МК можно скачать по ссылке: Все доступные прошивки для робота TurtleBro:
Инструкция по (необходим USB-UART переходник или программатор ST-LINK V2)
При включении, робот попытается подключиться к Wi-Fi сети согласно .
SSH подключение (пользователь pi
, пароль brobro
)
Для быстрой проверки работоспособности доступен старый .
Робот настроен для работы в режиме . Работа в режиме в условиях работы по Wi-Fi и множества аналогичных устройств в сети показала себя более запутанной и не надежной.
Обновить на прошивку версии 2.0 или новее;
Подготовить для RaspberryPi с версией ПО 0.9 или новее;
В файле .ros_params, расположенный в директории /home/pi робота TurtleBro, проверить значение переменной окружения для задания коэффициента вращения моторов. Для старых моторов параметр ROVER_WHEEL_PARAM должен равняться 22500, для новых моторов этот параметр должен быть равен 12280.
Робот поставляется в собранном виде. Для включения робота необходимо подать питание на разъем "DC IN" или подключить заряженный аккумулятор, а затем перевести переключатель питания в положение ON.
Блок аккумуляторов состоит из 4 аккумуляторов типа 18650. Установку аккумуляторов необходимо производить согласно полюсов, изображенных на плате блока.
При выборе аккумуляторов необходимо проверить что напряжение каждого аккумулятора не должно отличать на более чем 0.2 вольта относительно друг друга. Если аккумулятор превышает заданное отклонение, необходимо провести перебалансировку всего блока.
При этом минимальное и максимальное напряжение должно быть в интервала от 2.6В до 4.2В
Телеграм-канал технической и информационной поддержки продуктов проекта «Братья Вольт»
Видео по
Книга введение в ROS
Репозиторий файлов для задач "Профессионалов"
Образовательный портал с уроками ROS
Пакет автономной навигации
Пакет для подключения джойстика JoyBro
Пример .cpp пакета для работы на RaspberryPi
Youtube-канал проекта "Братья Вольт"
На компьютере необходимо указать, по какому адресу находится ROS-мастер roscore
. Для этого на компьютере в терминале необходимо установить переменную окружения ROS_MASTER_URI
:
Где 192.168.0.250
- это IP-адрес робота.
Для правильной работы сети, также необходимо установить на компьютере в терминале переменную ROS_HOSTNAME:
Где 192.168.0.100
- это IP-адрес вашего компьютера.
Удобно прописать ROS_MASTER_URI
и ROS_HOSTNAME
в файле .bashrc
, для того чтобы каждый раз не делать export
. Для этого необходимо открыть в текстовом редакторе файл ~/.bashrc
и в самый конец добавить строчки:
Аналогичные настройки ROS_MASTER_URI
и ROS_HOSTNAME
уже применены на роботе через файл .bashrc
.
Если все настройки проведены верно, вы можете выполнить на вашем компьютере команды ROS и увидеть результат их выполнения:
Видео по
По умолчанию на Raspberry Pi запущен SSH сервис.
Пароль для ssh по умолчанию: brobro
Каждый робот имеет уникальное имя вида turtlebroNN.local, где NN - это номер. При правильной настройке сети и вашего роутера, вы сможете сразу подключиться к Raspberry по его имени
Если подключение не происходит, вам необходимо определить IP-адрес робота. Это можно сделать подключившись к роутеру и найдя имя робота в списке подключенных устройств.
Далее подключиться к роботу можно по IP, где 192.168.0.11
это адрес робота
Если вы подключились к роботу, то для того, чтобы определить его IP-адрес наберите в терминале команду ifconfig
Если вы не смогли подключиться к роботу по его имени, вы можете посмотреть его IP-адрес на microSD карте.
Выключите робота, вытащите microSD карту и подключите ее к компьютеру. В разделе boot
в папкеconfigs
будут расположены файлы с данными о сетевых настройках робота.
В файле ifconfig.dump
будет находиться IP-адрес.
Если вы видите, что робот не может подключиться к вашей сети, проверьте файл wpa_supplicant.conf
на наличие в нем вашей Wi-Fi сети.
Для смены пароля вам необходимо знать ваш текущий пароль или быть пользователем с возможностью запускать программы через sudo
Для смены пароля текущего пользователя, просто запустите программу passwd
. Далее необходимо указать ваш текущий пароль и установить новый. В разных дистрибутивах могут быть свои ограничения на длину и "сложность" пароля. Поэтому поставить очень простой пароль вы не сможете.
Для смены пароля другому пользователю, выполните команду sudo passwd user_name
Где user_name это имя пользователя, которому вы хотите сменить пароль. Так как вы запустили программу с привилегиями sudo
то для смены пароля не нужно знать его текущий пароль. Также перестают работать ограничения на сложность пароля.
Для подключения вам необходимо
Для доступа по SSH из Windows можно использовать программу или воспользоваться встроенным терминалом.
Для начала работы с роботом вы можете зайти на веб-сервер запущенный на роботе http://<IP-адрес робота>:8080
(указав IP адрес вашего робота)
На этой странице будут доступны основные данные робота и изображение получаемое из камеры:
Роботом можно управлять кнопками WSAD.
Перед использованием робота необходимо внимательно изучить данный раздел. В случае использования робота в учебном классе преподаватель должен ознакомить учеников с основными частями раздела.
Для экстренной остановки робота необходимо выдернуть "чеку" экстренной остановки. Чека выполнена замкнутым проводом "петлей" длиной около 10 см. и располагается справа от лидара.
При извлечении чеки (размыкании контакта) робот обесточивает моторы и подает постоянный звуковой сигнал. Отключение питания касается только моторов, другие системы робота продолжают работать.
Все люди, взаимодействующие с роботом (ученики, судьи, волонтеры и т.д.) должны изучить расположение чеки и произвести пробное ее выдергивание для запоминания алгоритма действий в экстренной ситуации.
В комплекте с роботом идет литий-полимерный аккумулятор. Данный тип аккумулятора может выдавать очень большие токи, что в случае короткого замыкания или механического повреждения может привести к его возгоранию.
Необходимо максимально аккуратно производить любые операции с аккумулятором, избегая его ударов, падений и других механических воздействий. Не допускается использование поврежденных (в том числе вздутых) аккумуляторов.
Аккумулятор оснащен разъемом T-Plug, который не позволит перепутать полярность при подключении к роботу.
На плате функционирует блок контроля напряжения аккумулятора, отключающий большинство систем робота при разряде батареи. В состоянии с разряженным аккумулятором робот прекращает работу и начинает издавать звуковой сигнал с интервалом 30 с. Для продолжения работы необходимо выключить тумблер питания и произвести зарядку батареи.
Запрещается подключать к роботу датчики, которые каким либо образом будут зафиксированы на теле человека:
Медицинские датчики (ЭКГ и т.п.)
Датчики интегрированные в одежду (перчатки с датчиками положения пальцев и т.п.)
Если вы редактировали файлы на роботе и хотите действительно убедиться что при выключении робота они не потеряются, то прежде чем выключить роботы необходимо выполнить команду:
Данная команда запишет все "закешированные" файлы на microSD карту.
Только после этого возможно выключить робота тумблером выключения питания или перезагрузить его.
Обновление образа ОС возможно через скачивание и полную перезапись microSD карты. Для работы необходима карта размером не менее 16 Gb.
Образ можно использовать для следующей модели Raspberry:
Raspberry 4
Raspberry 5
Рекомендуем выбирать самую последнюю версию!
По умолчанию, имя робота установлено turtlebro01
. Рекомендуется сразу изменить его на имя согласно номера платы turtlebroNN
. Для этого необходимо отредактировать файлы, которые находятся в разделе system
в папке /etc
:/hosts
и/hostname
, расположенные на роботе и переименовать turtlebro01->tutlebroNN
. Удобнее всего это сделать на компьютере с ОС Linux подключив SD карту или уже на включенном роботе, а потом перезагрузить его.
Версию образа можно посмотреть в разделе system
в /boot/version
на microSD карте.
Запустите Raspberry Pi Imager:
Выберите устройство Raspberry Pi - Raspberry Pi 4:
В окне выбора ОС перейдите в самый низ и выберите Use custom
Далее выберите образ ОС, который вы хотите записать на microSD:
Подключите microSD карту к ноутбуку и выберите её как устройство, на которое будет записана ОС:
Если все настройки сделаны верно, то главный экран программы должен выглядеть вот так:
Нажмите "Далее" и выберите "Изменить параметры":
Далее, во вкладке "Общие", вы сможете установить необходимые вам настройки образа ОС такие как:
Имя хоста. Мы рекомендуем устанавливать имя хоста: turtlebroNN
, где NN - номер робота на наклейке
Имя пользователя и пароль. Рекомендуем указывать имя робота: pi;
пароль- brobro
Настройки Wi-Fi. Здесь вы можете указать настройки своей сети. По умолчанию мы рекомендуем использовать роутеры со следующими параметрами:
SSID: TurtleBro или TurtleBro5G
Пароль: turtlew001
Во вкладке "Службы" необходимо включить протокол SSH:
Во вкладке "Параметры" установите следующие настройки:
Примените заданные параметры нажатием "Да"
Согласитесь с форматированием запоминающего устройства:
Дождитесь записи ОС на microSD:
После окончания процесса записи, отключите microSD карту от ноутбука, вставьте её в Raspberry Pi робота TurtleBro и включите его. Обратите внимание, что первая загрузка робота может длиться дольше обычного (1.5 - 2 минуты). Если вы сделали всё правильно, то робот подключится к вашей сети с теми именами пользователя и хоста, которые вы указывали в вкладке "Общее" окна настроек.
На карте установлены основные необходимые ROS пакеты:
rosinstall_generator, actionlib, actionlib_msgs, amcl, angles, base_local_planner, bond, bondcpp, camera_calibration_parsers, camera_info_manager, carrot_planner, catkin, class_loader, clear_costmap_recovery, cmake_modules, costmap_2d, cpp_common, cpp_package_demo, cv_bridge, cv_camera, diagnostic_msgs, dwa_local_planner, dynamic_reconfigure, fake_localization, gencpp, geneus, genlisp, genmsg, gennodejs, genpy, geometry_msgs, global_planner, gmapping, image_transport, joint_state_publisher, kdl_parser, laser_geometry, map_msgs, map_server, message_filters, message_generation, message_runtime, mk, move_base, move_base_msgs, move_slow_and_clear, nav_core, nav_msgs, navfn, nodelet, openslam_gmapping, orocos_kdl, pluginlib, python_orocos_kdl, python_qt_binding, robot_state_publisher, ros_environment, rosapi, rosauth, rosbag, rosbag_migration_rule, rosbag_storage, rosbash, rosboost_cfg, rosbridge_library, rosbridge_msgs, rosbridge_server, rosbuild, rosclean, rosconsole, rosconsole_bridge, roscpp, roscpp_serialization, roscpp_traits, roscpp_tutorials, roscreate, rosgraph, rosgraph_msgs, roslang, roslaunch, roslib, roslint, roslisp, roslz4, rosmake, rosmaster, rosmsg, rosnode, rosout, rospack, rosparam, rospy, rospy_tutorials, rosserial_arduino, rosserial_client, rosserial_msgs, rosserial_python, rosservice, rostest, rostime, rostopic, rosunit, roswtf, rotate_recovery, rplidar_ros, sensor_msgs, smclib, std_msgs, std_srvs, stereo_msgs, tf, tf2, tf2_geometry_msgs, tf2_kdl, tf2_msgs, tf2_py, tf2_ros, tf2_sensor_msgs, topic_tools, trajectory_msgs, urdf, urdf_parser_plugin, uvc_camera, visualization_msgs, voxel_grid, xmlrpcpp
Также установлены пакеты для функционирования робота:
turtlebro
turtlebro_extra
turtlebro_navigation
turtlebro_web
На роботе создано два рабочих окружения для ROS пакетов. Директория catkin_ws
для пользовательский пакетов и ros_catkin_ws
для системных пакетов.
catkin_ws
Рекомендуется все новые и пользовательские пакеты устанавливать а директорию catkin_ws/src
Например установка пакета из git-репозитория:
При работе в директории catkin_ws
ROS использует исходные файлы сразу из этой директории. Поэтому, например, при изменении лаунч-файлов, дополнительно собирать пакеты не нужно. Такой подход упрощает тестирование и разработку.
Системные пакеты ROS установлены из исходных кодов, а не загружены при помощи пакетного менеджера apt
.Таким образом, для обновления старых системных пакетов и установки новых необходимо собирать пакеты из исходных кодов.
Все команды выполняются в директории основного окружения ROS /home/pi/ros_catkin_ws
Пересобрать все системные пакеты ROS
Все системные пакеты после сборки будут остановленны в директорию /opt/ros/noetic
Собрать один конкретный пакет можно командой:
где pkg_name
это имя того пакета, который надо собрать отдельно.
Все новые пакеты необходимо также устанавливать из дистрибутива пакетов ROS.
Установка пакета new_pack
из дистрибутива пакетов ROS:
Если пакет не имеет зависимостей, то его можно собрать без сборки всего ROS.
Пакет необходимо установить в директорию /home/pi/catkin_ws/src/turtlebro
Скачать пакет (если пакет не был установлен):
Обновить пакет (если пакет был установлен через git):
После обновления необходимо произвести сборку пакета turtlebro
утилитой catkin_make
:
При сборке будут перезаписаны все файлы пакета в директорию /opt/ros/noetic
и все файлы управления systemd
сервисами.
Видео по
Компьютеры Raspberry, идущие в комплекте с роботами, поставляются с предустановленными ОС Raspberry Pi OS lite
() , ROS Noetic
и всеми необходимыми системными пакетами.
Последний актуальный образ можно скачать по ссылке:
Все доступные образы можно найти Яндекс.Диске:
Проще всего загрузить образ на SD карту с помощью программы balenaEtcher Программа обладает поддержкой всех основных операционных систем.
Скачайте и установите программу для записи ОС для Raspberry Pi - Raspberry Pi Imager:
Установить последнюю версию пакета turtlebro
можно из репозитория GitHub
Далее необходимо остановить и запустить сервис
При загрузке ОС происходит запуск сервиса turtlebro
(файл /lib/systemd/system/turtlebro.service
), который запускает roscore
и запускает лаунч-файл пакета turtlebro
из /etc/ros/turtlebro.d/turtlebro.launch
.
Оба файла перезаписываются при сборке пакета, поэтому их редактирование имеет смысл только в экспериментальных целях. Все изменения необходимо производить в файлах пакета turtlebro
, а потом производить его "сборку".
Остановить сервис
Запустить сервис
Убрать сервис из автозагрузки
Поставить сервис в автозагрузку
Пакет должен быть установлен в ОС робота на SD карте Raspberry, который подключен непосредственно к системной плате TurtleBoard
В пакете собраны все необходимые зависимости и лаунч-файлы, необходимые для работы с периферией TurtleBoard
Библиотека rosserial
, настроенная для работы с пользовательским МК Arduino и системным микроконтроллером STM32
Работа с Лидарами RPLidar/YDLidar
Базовая модель робота в формате URDF, а также настройки robot_state_publisher для работы с /tf топиками
Проверить текущую версию пакета можно командой rosversion turtlebro
Мы рекомендуем использовать единую сеть для всех устройств входящих в учебный класс. Желательно наличие интернета в этой сети.
Все роботы по умолчанию настроены для работы в WiFi и Ethernet в режиме клиента с получением настроек по DHCP.
По умолчанию при старте Raspberry Pi попытается подключиться к Wi-Fi точке доступа с параметрами:
или
Поэтому мы рекомендуем использовать именно такие настройки Wi-Fi роутера для работы с роботом TurtleBro
Это самый простой способ, но требует наличия Ethernet кабеля, подключенного к роутеру.
Подключите Ethernet кабель к соответствующему разъему Raspberry Pi на включенном роботе
Зайдите в веб-интерфейс роутера и определите IP адрес робота
или
Откройте в текстовом редакторе на роботе файл wpa_supplicant.conf
В конец файла добавьте настройки Wi-Fi вашей сети в виде:
При указании пароля от Wi-Fi сети, обязательно наличие кавычек.
Сохраните файл (CTRL + S) и перезагрузите Raspberry Pi.
На SD карте, содержащей готовый образ системы для запуска на роботе, есть два раздела разного размера. Обычно они называются system
и boot
, но иногда система может назвать их по-другому при подключении к компьютеру.
Если на этапе загрузки Raspberry найдет файл wpa_supplicant.conf
в разделе boot
то этот файл будет перемещен в раздел system
, а именно в /etc/wpa_supplicant/wpa_supplicant.conf
и таким образом станет конфигурационным файлом подключения к Wi-Fi сетям.
Чтобы сконфигурировать Raspberry Pi в этом режиме необходимо:
Подключите microSD карту Raspberry к вашему компьютеру с помощью карт-ридера
Откройте раздел boot
и создайте файл wpa_supplicant.conf
:
Откройте текстовый редактор и добавьте в этот файл следующее содержание:
Использование кавычек "
в файле с настройками обязательно!
Сохраните файл (CTRL + S)
Установите microSD карту в Raspberry и дождитесь завершения загрузки.
Внимание, файл перезапишет все ваши текущие настройки Wi-Fi в файле /etc/wpa_supplicant/wpa_supplicant.conf
Если вы не хотите показывать ваш пароль для пользователей, вы можете сгенерировать специальный ключ passphrase
и указать его в файле wpa_supplicant.conf
. Пользователи не смогут "подсмотреть" в файле пароль от Wi-Fi и подключать к вашей сети свои устройства.
Для генерации passphrase
необходимо запустить программу wpa_passphrase
далее указать имя Wi-Fi сети и пароль. Далее вывод который покажет программа необходимо записать в файл wpa_supplicant.conf
в параметр passphrase = ""
В рамках обновления робота TurtleBro были подобраны новые моторы с энкодерами, которые отличаются большей надежностью по сравнению с моторами старого образца и имеют улучшенные характеристики.
В связи с увеличением типоразмера новых моторов необходимо пересобрать колесную базу робота.
Для разбора колесной базы со старыми моторами необходимо:
Отключить робота от питания, вытащить аккумуляторную батарею
2. Отключить кабели моторов и провода питания от платы TurtleBoard, а также usb-кабель подключения камеры от Rasberry Pi
3. Используя крестовую отвёртку открутить 6 винтов М3х8 c верхней части робота и снять плату TurtleBoard
4. Используя крестовую отвёртку открутить 6 винтов М3х8 с верхней части основания колесной базы
5. Отсоединить кронштейны крепления моторов и переднюю панель от нижней части колесной базы
6. Используя крестовую отвёртку открутить 6 винтов М3х8 c нижней части колесной базы и снять 6 монтажных стоек М3х35
Используемые элементы:
Мотор - 2 шт.;
Кабель подключения мотора к плате TurtleBoard - 2 шт.;
Боковые кронштейны для крепления мотора - 2 шт.;
Передний кронштейн - 1 шт.;
Монтажные стойки М3х40 - 6 шт.;
Винты М3х8 - 18 шт.;
Винты М3х10 - 12 шт.;
Винты М4х8 - 6 шт.;
Муфты для крепления колес, диаметр вала 6 мм. - 2 шт.;
Колесо - 2 шт.;
Крестовая отвертка - 1 шт.;
Шлицовая отвертка - 1 шт.
Для сбора колесной базы с новыми моторами необходимо:
Собрать кронштейн для крепления мотора с левой стороны робота, используя 6 винтов М3х10, в соответствии с рисунком:
2. Собрать кронштейн для крепления мотора с правой стороны робота, используя 6 винтов М3х10, в соответствии с рисунком:
3. К нижней части колесной базы прикрутить 6 монтажных стоек М3х40 используя 6 винтов М3х8
4. Присоединить к мотору кабель подключения. Учтите, что кабель имеет два разных типа коннекторов:
6-ти пиновый с шагом 2 мм - для подключения к плате TurtleBoard
6-ти пиновый с шагом 2.5 мм - для подключения к мотору
5. Установить на нижнюю часть колесной базы кронштейны крепления моторов и переднюю панель
Обратите внимание, при монтаже кронштейна крепления левого мотора "направляющий треугольник" на кронштейне должен находиться в правом верхнем углу, а для кронштейна крепления правого мотора "направляющий треугольник" должен находиться в левом верхнем углу, как показано на рисунке:
6. Установить верхнюю часть колесной базы и прикрутить её к монтажным стойками используя 6 винтов М3х8
7. На вал мотора установить муфту для крепления колес и колесо, используя 3 винта М4х8
8. Смонтировать плату Turtleboard на верхнюю часть колесной базы используя 6 винтов М3х8
9. Подключить кабели моторов и провода питания от платы TurtleBoard, а также usb-кабель подключения камеры от Rasberry Pi
Изменения режимов работы лидара возможна в лаунч-файле rplidar.launch
:
Лидары старой модели (с нижней платой под лидаром) могут работать в слудеющийх режимах:
Новые лидары могу работать в следующих режимах:
По умолчанию, лидар включается в режиме Boost
, в котором он выводит 720 точек в топик /scan
Выбор режима работы лидара зависит от условий отражений объектов и размера тестового полигона. В некоторых случаях требует изменение режима работы для более подходящих условий.
После включения робота, происходит загрузка системы и автоматический запуск всех необходимых для работы робота нод. Управление нодами, которые будут загружены, возможно через лаунч-файл /etc/ros/turtlebro.d/turtlebro.launch
По умолчанию запускаются следующие ноды:
/arduino_serial_node
/republish_raw
/robot_state_publisher
/rosapi
/rosbridge_websocket
/rosout
/rplidarNode
/simple_odom
/stm_serial_node
/uvc_camera_node
/web_telemetry_node
/web_video_server
/webserver
Работают топики:
/bat
/client_count
/cmd_vel
/connected_clients
/diagnostics
/front_camera/camera_info
/front_camera/image_raw
/front_camera/image_raw/compressed
/imu
/joint_states
/odom
/odom_pose2d
/raw_odom
/republish_raw/compressed/parameter_descriptions /republish_raw/compressed/parameter_updates
/rosout
/rosout_agg
/scan
/tf
/tf_static
/web_tele
Запущены сервисы:
/arduino_serial_node/get_loggers /arduino_serial_node/set_logger_level /board_info /power/off /power/reset /republish_raw/compressed/set_parameters /republish_raw/get_loggers /republish_raw/set_logger_level /reset /robot_state_publisher/get_loggers /robot_state_publisher/set_logger_level /rosapi/action_servers /rosapi/delete_param /rosapi/get_loggers /rosapi/get_param /rosapi/get_param_names /rosapi/get_time /rosapi/has_param /rosapi/message_details /rosapi/node_details /rosapi/nodes /rosapi/publishers /rosapi/search_param /rosapi/service_host /rosapi/service_node /rosapi/service_providers /rosapi/service_request_details /rosapi/service_response_details /rosapi/service_type /rosapi/services /rosapi/services_for_type /rosapi/set_logger_level /rosapi/set_param /rosapi/subscribers /rosapi/topic_type /rosapi/topics /rosapi/topics_and_raw_types /rosapi/topics_for_type /rosbridge_websocket/get_loggers /rosbridge_websocket/set_logger_level /rosout/get_loggers /rosout/set_logger_level /rplidarNode/get_loggers /rplidarNode/set_logger_level /set_camera_info /set_pid /simple_odom/get_loggers /simple_odom/set_logger_level /start_motor /stm_serial_node/get_loggers /stm_serial_node/set_logger_level /stop_motor /uvc_camera_node/get_loggers /uvc_camera_node/set_logger_level /web_telemetry_node/get_loggers /web_telemetry_node/set_logger_level /web_video_server/get_loggers /web_video_server/set_logger_level /webserver/get_loggers /webserver/set_logger_level
Файл /home/pi/.ros_params
содержит параметры окружения для старта ROS:
Переменная окружения ROVER_WHEEL_PARAM определяет параметр wheel_param для определения типа моторов. Для старых моторов применяется значение: 22500; для новых моторов: 12280. Если одометрия робота из топика не совпадает с реальным перемещением робота, необходимо провести калибровку параметра.
Для того, чтобы одометрия точно отображала реальное перемещение робота используются два параметра:
stm_serial_node/wheel_distance double
тип данных - числовой 64-битный тип
размерность - метры
обозначает - расстояние между колесами
stm_serial_node/wheel_param uint32_t
тип данных - числовой 32-битовый без знака
размерность - безразмерный
обозначает- число тиков энкодера на метр. Является расчётным коэффициентом.
Для расчёта параметра wheel_param используется следующая формула:
Установка параметра wheel_distance возможна в launch-файле rosserial.launch
в пакете turtlebro:
Также в лаунч-файле rosserial.launch
есть возможность задачи параметра wheel_param:
но как можно заметить, значение данного параметра берется из переменной окружения операционной системы, а конкретнее задается в файле .ros_params
:
После изменения параметров необходимо выполнить на роботе команду синхронизации данных:
и путем выключения/включения тумблера питания перезагрузить всего робота.
В случае, когда пользователь не установил никаких параметров, происходит загрузка платы TurtleBoard с параметрами по умолчанию, которые обеспечивают работу идущих в комплекте с роботом моторов и колес. Процедура обновления параметров нужна только в том случае, когда плата TurtleBoard настраивается для работы с нестандартным шасси.
Загруженные параметры не сохраняются в постоянную память контроллера, поэтому при установке неправильных параметров необходимо произвести перезапуск устройства, чтобы загрузить значения по умолчанию.
Для настройки коэффициентов ПИД регулятора можно использовать сервис ros /set_pid
Главный файл конфигурации -- подключает другие .launch файлы и глобальные настройки.
run_rosserial
-- запуск rosserial.launch для соединения с Arduino и STM МК
run_rplidar
-- запустить получение данные с RPLidar
run_turtlebro_web
-- запуск веб-интерфейса робота
run_camera_ros
-- включить камеру через пакет uvc_camera
run_simple_odom
-- подключить паблишер приведенной одометрии. Топик /odom_pose2d
Файл запуска нод stm_serial_node
и arduino_serial_node
необходимых для работы с Arduino и STM
Подключается через устройство, скорость 460800 бод/с/dev/serial/by-id/usb-Silicon_Labs_CP2102_USB_to_UART_Bridge_Controller_0012-if00-port0
Подключается через устройство, скорость 115200 бод/с/dev/serial/by-id/usb-Silicon_Labs_CP2102_USB_to_UART_Bridge_Controller_0010-if00-port0
Файл для запуска ноды обработки данных с лидара. Для работы необходим пакет rplidar
от производителя лидара. Параметры файла настроены для работы с лидаром RPLidar A1 на скорости 115200 бод/с через устройство /dev/serial/by-id/usb-Silicon_Labs_CP2102_USB_to_UART_Bridge_Controller_0011-if00-port0
Данные с лидара вычисляются относительно фрейма base_scan
Видео по
Зайдите на робота используя протокол SSH () используя одну из команд:
Раздел system
содержит стандартный набор директорий файловой системы Linux и занимает основной объем SD карты (подробнее - ).
Раздел boot
небольшой и содержит настройки запуска Raspberry (подробнее - )
Более подробно о настройке Wi-Fi через командную строку:
Основной датчик робота - лазерный лидар
Файл для запуска издателя с данными полученными из фронтальной камеры. Подробнее о
При включении робота автоматически включается камера video0
и начинают публиковаться данные в топики камеры:
Данные c камеры принимаются в формате mjpeg
и без дополнительной обработки публикуются в топик /front_camera/image_raw/compressed
. Для заполнения топика /front_camera/image_raw
происходит перекодирование jpeg->raw с использованием пакета image_transport
.
Если вы не используете данные /front_camera/image_raw
рекомендуется отключить лишнее преобразование (аргумент republish_raw
).
Вы можете использовать rviz для отображения видеопотока камеры. При удаленной работе рекомендуем выбирать для просмотра сжатые видеоданные (топик /front_camera/image_raw/compressed
)
Пакет публикует сжатые данные sensor_msgs/CompressedImage
в топик front_camera/image_raw/compressed
Для работы с OpenCV данные из камеры ROS необходимо конвертировать из топиков в объект OpenCV
Для создания объекта с OpenCV используется библиотеке CvBridge и метод imgmsg_to_cv2
, где image_msg
это сообщение из топика.
Важно понимать, что в случае использования compressed происходит дополнительное преобразование jpeg->raw. Но при этом происходит экономия сетевых ресурсов.
Также вы можете отключить ноду ROS по захвату изображения с камеры и сделать захват данных из своего OpenCV приложения самостоятельно.
cap = cv2.VideoCapture(0)
После этого удобно опубликовать данные в топик самостоятельно для просмотра через веб-интерфейс и тп.
Далее производить с видео все необходимые манипуляции, и после этого, при необходимости, публиковать видео в топики.
Для ROS Noetic необходимо обязательно загружать прошивку версии 2.0 или более новую.
Для обновления микропрограммы системной платы TurtleBro можно использовать USB-UART переходник или программатор ST-LINK V2
Далее представлены две инструкции по обновлению микропрограмм с помощью этих двух устройств.
При включении робота автоматический стартует вещание видео необходимое для работы web интерфейса. Для этого используется launch
файл camera_stream.launch
, который запускает ROS ноду mjpg_camera
Web интерфейс для просмотра видео и управления роботом доступен на URL http://192.168.0.100:8080
где 192.168.0.100
IP вашего робота. Данный способ работы с камерой не создает ROS топика с данными камеры. Но его удобно использовать для работы с камерой в браузере, без дополнительных настроек.
Если вам необходимо получить данные из камеры в ROS, то вам необходимо поменять запускаемый launch
файл для работы с пакетом uvc_camera.
Для запуска ноды uvc_camera
необходимо использовать файл camera_ros.launch
Две ноды не могут одновременно работать с камерой, поэтому необходимо переконфигурировать файл запуска /etc/ros/turtlebro.d/turtlebro.launch
в части:
Выключить веб интерфейс run_turtlebro_web
и включить run_camera_ros
Пакет публикует сжатые данные sensor_msgs/CompressedImage
в топик front_camera/compressed
Данный пакет работает с камерой через библиотеку ОpenCV
, может работать как в режиме node
, так и вnodelet
Конфигурация в файле camera_cv.launch
данные в формате sensor_msgs/Image
в топик front_camera/image_raw
Данные передаются в RAW формате (без компрессии), что удобно для дальнейшей программной обработки.
На роботе установлена библиотека OpenCV
, поэтому с камерой можно работать напрямую, подключившись к камере "стандартной" для opencv функцией вида cap = cv2.VideoCapture(0)
Далее производить с видео все необходимые манипуляции, и после этого, при необходимости, публиковать видео в топики.
Для просмотра видео через топики ROS, можно использовать робота. При загрузке веб-интерфейса происходит поиск всех доступных видеоданных (топики с sensor_msgs/CompressedImage
). Если такие топики найдены, то все они будет добавлены в веб-интерфейс для просмотра. При добавлении новых топиков, веб-интерфейс робота необходимо перезагрузить.
Для просмотра видео можно использовать специальные Linux программы. Например или
Официальная документация пакета
Пример программы на pytnon, которая, используя opencv
, следит за цветным мячиком и управляет роботом:
Актуальные прошивки можно скачать в нашем .
Официальная документация пакета
Конвертация из sensor_msgs/Image
в формат OpenCV возможна через библиотеку
Пример программы на pytnon, которая, используя opencv
, следит за цветным мячиком и управляет роботом:
restart
Нажатие кнопки перезапускает программу МК STM32. Происходит чтение rosparam, сбрасываются значения датчика IMU, одометрии, текущих скоростей колес. Кнопку необходимо использовать при изменении rosparams на стороне Raspberry. Перезапуск идет около 30 секунд.
stop
При нажатии сбрасывается значение cmd_vel (робот останавливается), обнуляются значения одометрии и IMU датчика. Удобно пользоваться этой кнопкой для установки нулевого положения робота на полигоне.
hw_reset
Кнопка сброса МК STM32. Осуществляет полный перезапуск робота, включая Raspberry.
reset
Кнопка сброса Arduino. Осуществляет полный перезапуск Arduino.
EMRG
Выходы для подключения чеки экстренной остановки моторов. Для работы в нормальном режиме контакты должны быть замкнуты.
На плате запущены Издатели и Подписчики, взаимодействующие с ROS через библиотеку rosserial
. STM32 и Arduino не имеют собственного интерфейса USB, поэтому, для того, чтобы они могли общаться с Raspberry, на плате TurtleBoard установлены UART-USB преобразователи и USB-hub, которые позволяют обеспечить коммуникацию с микрокомпьютером с помощью всего лишь одного провода USB.
Контроллер платы TurtleBoard - STM32 публикует в ROS Raspberry следующие топики, поддерживающие стандартные для ROS типы сообщений:
Содержит данные о состоянии подключенной батарейки к плате. Тип сообщения: sensor_msgs/BatteryState
Топик для управления перемещением робота. Тип сообщения: geometry_msgs/Twist
При публикации данных в топик робот начинает движение. Робот выполняет последнюю полученную команду до тех пор, пока не получит новые данные. Поэтому, например, для остановки робота необходимо передать "нулевые" значения скорости.
Данные инерционного датчика (Inertial measurement unit), включающего в себя гироскоп, акселерометр и компас. Тип сообщения: sensor_msgs/Imu
Данные о ковариации не заполняются. Данные публикуются с частотой 20 Герц.
В связи с тем, что RViz по умолчанию некорректно отображает данные IMU, необходимо поставить соответствующий плагин для корректного отображения данных с IMU. Установка плагина осуществляется командой в терминале компьютера:
sudo apt install ros-noetic-rviz-imu-plugin
При добавлении визуализации данных в rviz необходимо выбрать тип сообщения rviz_imu_plugin->Imu
Данные одометрии (положения робота, рассчитанного на основании вращения колес). В текущей версии повороты робота рассчитываются по данным IMU датчика, а перемещение на основе данных энкодеров на моторах. Тип сообщения: nav_msgs/Odometry
Упрощенные данные одометрии в 2d пространстве. Тип сообщения: geometry_msgs/Pose2D
Данные, полученные с лидара (облако точек). Данные идут через Serial интерфейс лидара, USB-UART преобразователь и через USB hub. Тип сообщения: sensor_msgs/LaserScan
Данные полученные энкодеров колес. Время, счетчик "тиков" и угол датчика IMU. Тип сообщения: turtlebro/RawOdom
Через библиотеку rosserial доступны следующие сервисы для управления роботом TurtleBro.
Сервис вызывает сброс одометрии (данные /odom
) и текущих установленных скоростей (/cmd_vel
) робота. Робот останавливается и сбрасывает свое положение. Сервис вызывается без параметров.
Сервис устанавливает значения ПИД регулятора для управления моторами тележки. Тип сообщения turtlebro/PidRegulator
Сервис выдает актуальную информацию о версии прошивки системной платы и уникальный номер процессора
При вызове сервиса происходит перезагрузки платы TurtleBoard и Raspberry Pi. Вызывается без параметров
Перед началом обновления внимательно прочтите эту страницу до конца и убедитесь, что понимаете все описанные операции.
Придерживайтесь следующей инструкции:
Выключите питание робота и извлеките из него батарею.
Подсоедините USB-UART переходник к разъему ST-UPDT голубого цвета на системной плате. Обратите внимание на то, что ножка TX переходника должна быть соединена с ножкой RX разъема ST-UPDT, а ножка RX - к TX.
Ножка 3V3 разъема ST-UPDT может быть подключена только к источнику напряжения 3.3В! Подключение ее к 5В может привести к повреждению платы!
Переведите DIP-переключатель №4 в положение "ON"
Подключите USB-UART к компьютеру, он должен определиться системой как COM порт.
Нажмите кнопку HW_RESET на плате, это должно привести к тому, что все светодиоды погаснут (если ранее были включены) и плата перейдет в режим ожидания прошивки.
Запустите программу STM32 Flash loader demonstrator, выберите COM порт своего UART преобразователя. Нажмите кнопку Next.
Вы должны увидеть сообщение:
Если этого не произошло, проверьте правильность выполнения предыдущих шагов и попробуйте еще раз
В следующем окне вы должны увидеть приблизительно следующее:
Обратите внимание на поле Target: его содержимое должно точно совпадает с картинкой выше.
В следующем окне необходимо выставить настройки точно так же, как на картинке внизу:
После нажатия кнопки Next должен начаться процесс обновления микропрограммы. Он может занять несколько минут, пожалуйста, дождитесь его окончания. После окончания загрузки вы должны увидеть сообщение:
Закройте программу
Отключите USB-UART переходник от компьютера
Отключите USB-UART переходник от платы TurtleBoard
Переведите DIP-переключатель №4 в положение Off
При следующей запуске робот будет использовать обновленную микропрограмму
Для обновления микропрограммы системной платы TurtleBoard необходимо использовать программу .
В графе Download from file необходимо указать на , скачанный с нашего сайта. Обратите внимание на то, что по умолчанию всплывающее окно не отображает необходимые нам файлы с расширением .hex, поэтому в правом нижнем углу окошка необходимо выбрать тип файла hex Files (*.hex)
Перед началом обновления внимательно прочтите эту страницу до конца и убедитесь, что понимаете все описанные операции.
Придерживайтесь следующей инструкции:
Выключите питание робота и извлеките из него батарею.
Подсоедините программатор ST-LINK V2 к разъему ST-LINK чёрного цвета на системной плате. Обратите внимание на то, что ножка SWDIO программатора должна быть соединена с ножкой DIO разъема ST-LINK, а ножка SWCLK программатора - к CLK разъема ST-LINK.
Ножка 3V3 разъема ST-LINK может быть подключена только к источнику напряжения 3.3В! Подключение ее к 5В может привести к повреждению платы!
Подключите ST-LINK V2 к компьютеру, он должен определиться системой как Устройство USB: STM32 STLink.
Запустите программу STM32 ST-LINK Utility. Нажмите кнопку Connect to the target.
После соединения вы должны увидеть приблизительно следующее:
Если вы этого не увидели - проверьте правильность выполнения предыдущих шагов и попробуйте еще раз
Далее необходимо перейти в меню Target и выбрать пункт Program & Verify... :
Произведите необходимые настройки согласно изображению ниже и нажмите кнопку Start:
После нажатия кнопки Start должен начаться процесс обновления микропрограммы. Он может занять несколько минут, пожалуйста, дождитесь его окончания. После окончания загрузки вы должны увидеть следующее сообщение:
Нажмите кнопку Disconnect from the target:
Закройте программу
Отключите программатор ST-LINK V2 от компьютера
Отсоедините программатор ST-LINK V2 от платы TurtleBoard
При следующей запуске робот будет использовать обновленную микропрограмму
На плате размещен микроконтроллер ATMega 2560 с обвязкой, идентичной плате Arduino Mega. Контроллер поставляется с прошитым бутлоадером Arduino. Таким образом, микроконтроллер полностью готов к запуску скетчей Arduino IDE и работе со стандартными шилдами для Ардуино.
Для работы с Arduino через ROS необходимо установить библиотеку ros_lib: <ros.h>
.
Скачать библиотеку необходимо с вашего робота. Для этого можно воспользоваться утилитой копирования файлов между компьютерами SCP:
Но если вы используете собственные сообщения или у вас появляются ошибки при сборке скетчей, вам необходимо "пересобрать" библиотеку ros_lib
самостоятельно с помощью команды (выполнив ее на роботе)
Вызванная утилита rosserial_arduino
соберет новую библиотеку на основе настроек ROS вашего робота и положит ее в корневую директорию пользователя /home/pi/
. Дальше вам надо переписать ros_lib с робота на ваш компьютер и поместить его в директорию библиотек Arduino в соответствии с инструкцией по установке библиотек для Arduino IDE.
Arduino Mega подключена к Raspberry через порт Serial1. Со стороны ROS запущен сервис rosserial
который организует взаимодействие МК и ROS.
Для подключения к ROS со стороны Arduino необходимо инициализировать библиотеку ros_lib <ros.h>
отвечающую за коммуникацию между Arduino и ROS, указав параметры Serial1 и скорость 115200, как показано ниже.
В передней части системной платы робота расположены две кнопки, подключенные к ножкам D24
и D23
МК Arduino и два переключателя, подключенные соответственно к D22
и D25
. При нажатии кнопки или переключателя на пине Arduino будет сигнал HIGH
Для чтения значения необходимо использовать Arduino функцию digitalRead(pin)
С левой стороны системной платы находятся пины D44 D45 D46
, которые можно использовать для подключения сервомашинок.
ВНИМАНИЕ: на сервомашинки подается напряжение 5В от отдельного источника питания! Ни в коем случае нельзя соединять пины питания сервомашинок с пинами питания, выведенными на колодку Ардуино.
Перед лидаром расположены 4 светодиода, подключенные к пинам D26, D27, D28, D29.
для завершения чтения следует нажать Ctrl-A
и затем X
. Скорость и параметры подключения следует указать такими же, как при инициализации Serial в скетче Arduino.
Пример простого скрипта для чтения данных от Arduino:
WS2812
- это три RGB-светодиода и микросхема-драйвер для управления этими светодиодами, собранные в одном SMD корпусе. Корпус каждого светодиода имеет 4 вывода: два вывода данных и два вывода питания. Выводы данных предыдущих светодиодов соединены со входами следующих, создавая цепочку светодиодов, управляемых через один пин микроконтроллера.
Для тестирования работоспособности светодиодной ленты, можно воспользоваться тестовым скетчем
Если есть необходимость удаленно (без доступа к роботу) обновить прошивку Arduino, то это возможно сделать имея только удаленный доступ.
Подготовить скетч к загрузке
В Arduino IDE выбрать МК Arduino/Genuino Mega or Mega 2560
Скомпилировать программу (кнопка Проверить)
В меню выбрать Скетч→Экспорт Бинарного файла
В директории где находиться файл скетча, будут созданы два файла с бинарными данными вида (sketch_mar24a.ino.mega.hex sketch_mar24a.ino.with_bootloader.mega.hex)
Мы должны использовать файл sketch_mar24a.ino.mega.hex
Загрузить бинарный файл на Arduino:
Скопировать файлы .hex
на робота, например командой linux scp
На роботе выполнить команду "прошивки" платы Arduino
Где sketch_mar24a.ino.mega.hex
имя файла с прошивкой.
Для возможности удаленной прошивки платы, необходимо чтобы Arduino разъем на плате Turtlebro был подключен к RaspberryPi через Micro-USB.
Для обновления микропрограммы системной платы TurtleBoard необходимо использовать программу .
Выберите необходимый с расширением .hex, скачанный с нашего сайта:
Для работы с МК необходимо и запустить Arduino IDE с сайта. В настройках IDE выбрать плату Arduino Mega 2560.
Вам необходимо распаковать архив, зайти в распакованную директорию и внутри нее должна находиться папка с названием ros_lib
. Она должна содержать большое количество файлов, необходимых для компиляции программ содержащих вызовы <ros.h>
.
После этого необходимо скопировать папку ros_lib
в папку libraries
, которая находится внутри той директории, куда Arduino IDE сохраняет новые скетчи. Там же должны находиться и те библиотеки, которые вы загружали стандартным способом - через менеджер библиотек Arduino IDE
Примеры можно посмотреть в официальной документации rosserial
В некоторых случаях необходимо получать данные от встроенного микроконтроллера без применения ROS. Для этого можно применять консольные утилиты типа minicom (). Для чтения данных от Ардуино можно применить следующую команду:
Еще одна возможность для получения данных от Arduino это применении библиотеки Serial языка Python
Под платой расположено 24 RGB светодиода модели WS2812
.
Лента подключена к пину D30
встроенного контроллера Аrduino. Число светодиодов - 24. Для управления светодиодами мы рекомендуем использовать библиотеку FastLed.
Пример управления светодиодной лентой из Аrduino-скетча: