roboforum.ru

Технический форум по робототехнике.

Самодельный робот на базе ROS - Custom mobile robot with ROS

Самодельный робот на базе ROS - Custom mobile robot with ROS

linvinus » 07 мар 2014, 12:28

Предлагаю собирать рецепты как скрестить ROS с самодельным роботом.
Я новичок в этой области, так что буду обобщать по ходу изучения этого вопроса.

Итак, дано:
1) компьютер под управлением linux (может стоять на мобильной платформе или отдельно)
2) мобильная тележка, с драйверами двигателей, датчиками и т.п.

задача организовать программное управление тележкой.

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

Итак, с чего же начать!?
Если у вас один из заводских роботов который поддерживается ROS то вам повезло, следуйте инструкциям на http://wiki.ros.org/ROS/Installation
Эта тема про то как подружить своё железо и ROS.

Начинать нужно с установки линукса и базовых модулей ROS.
ROS так же как и дистрибутивы линукса выпускается релизами, список доступен тут http://wiki.ros.org/Distributions
Это означает что модули из одного релиза согласованы между собой, от релиза к релизу изменяются некоторые API и команды управления поэтому важно чтобы пакеты пакеты были из одного релиза.
Второе на что стоит обратить внимание, не все дистрибутивы линукса поддерживаются. Например, последний на текущий момент стабильный релиз ROS Hydro Medusa не поддерживает Ubuntu 13.10 (предыдущие начиная с 12.04 поддерживаются)
В общем сначала определяемся какой релиз рос планируется использовать потом ставим подходящий линуск дистрибутив.

Я предпочитаю дистрибутив ubuntu поэтому буду в основном ориентировать на него.
ubuntu и пакеты ROS есть как для x86 так и для ARM процессоров, так что архитектура большого значения не имеет.

В общем ставим пакет ros-hydro-ros-base согласно инструкции http://wiki.ros.org/hydro/Installation/Ubuntu или arm http://wiki.ros.org/hydro/Installation/UbuntuARM

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

А вот дальше начинается самое весёлое.
Модули есть но у нас нет источников сообщений.
Нам нужно написать модули которые будут публиковать необходимые сообщения.
Т.е. нужно взять данные с робота (по rs232, USB, i2c, SPI или как ещё) и опубликовать их, используя специальные сообщения ROS.
Тут всё зависит от конкретной конструкции робота.

Если у вас на тележке есть контроллер arduino который управляет железом то самый простой способ использовать модуль rosserial_arduino http://wiki.ros.org/rosserial_arduino/Tutorials
Он представляет из себя прослойку которая на стороне компьютера публикует данные на мастере ROS, а на стороне контроллера предоставляет удобный API для передачи данных. Выглядит это так как будто это контроллер публикует данные напрямую на мастера ROS.

Для него уже есть готовые скетчи, в общем в лучшем духе ардуино, загрузил и "заработало".

Если у вас что то иное то придётся придумать самому как передавать данные на компьютер, или портировать rosserial.

запустить rossetial на другом контроллере несложно, есть пример для AVR http://wiki.ros.org/rosserial_client/Tu ... and%20UART
всё что нужно - это таймер который отсчитывает микросекунды с момента старта контроллера и функции чтения/записи в uart.

В моём случае я использую связку
STM32F407 (chibios) - контроллер который управляет железом (клиент ROS)
MARSBOARD A20 - мобильный компьютер с ROS (ROS master)
ноутбук для визуализации данных (клиент ROS)

Допустим вы запустили ROS serial на своём контроллере, далее нужно определиться что нужно публиковать.
1) для того чтобы можно было управлять тележкой с ноутбука нужно чтобы контроллер принимал Twist Message, обычно топик который принимает такие сообщения называется /cmd_vel
2) для того чтобы увидеть в rviz передвижения робота нужно чтобы контроллер публиковал сообщения трансформации и одометрии это сообщения
geometry_msgs::TransformStamped
nav_msgs::Odometry
"почти" рабочий пример для arduino http://answers.ros.org/question/73807/r ... ion-error/
в rosserial была мелкая ошибка, исправление тут https://github.com/ros-drivers/rosserial/pull/106

аналогичная ошибка и у меня, сообщение одометрии не десерриализуется на стороне рос сервера.
тут два выхода, отказаться от использования rosserial и организовать совой протокол обмена данными между рос и контроллером,
либо разобраться что не так, я пока разбираюсь :crazy:
либо использовать свои сообщения, а на стороне сервера их преобразовывать в подходящие.


***********************************************************************************
Полезные ссылки.
1) http://www.clearpathrobotics.com/blog/h ... e-ros-101/ тут есть листок с подсказками на котором собрано большинство повседневных команд.
советую распечатать и положить на стол.
незабываем пользоваться авто дополнением команд.

внешний вид
h_1391703092_7670336_e64c83b022.jpg
Последний раз редактировалось linvinus 11 апр 2016, 23:26, всего редактировалось 6 раз(а).

Re: Самодельный робот на базе ROS - Custom mobile robot with

noonv » 07 мар 2014, 13:27

мой пример для 4WD-робота — https://github.com/RoboCraft/robot_4wd
А здесь наброски шагов и в конце ссылки на другие проекты (iClebo Kobuki, ros_arduino_bridge, iRobot Roomba - turtlebot)

Re: Самодельный робот на базе ROS - Custom mobile robot with

linvinus » 07 мар 2014, 13:45

noonv писал(а):мой пример для 4WD-робота — https://github.com/RoboCraft/robot_4wd
А здесь наброски шагов и в конце ссылки на другие проекты (iClebo Kobuki, ros_arduino_bridge, iRobot Roomba - turtlebot)

Отлично! Спасибо за ссылки.
Насколько я понял ваш пример - нода которая публикует одометрию крутится на компьютере, а данные она получает от контроллера по протоколу ORCP2 - OR Communication Protocol ver. 2
Последний раз редактировалось linvinus 07 мар 2014, 14:13, всего редактировалось 2 раз(а).

Re: Самодельный робот на базе ROS - Custom mobile robot with

noonv » 07 мар 2014, 14:12

linvinus писал(а):Насколько я понял ваш пример - нода которая публикует одометрию крутится на компьютере, а данные она получает от контроллера по протоколу ORCP2 - OR Communication Protocol ver. 2

именно :)

Re: Самодельный робот на базе ROS - Custom mobile robot with

linvinus » 07 мар 2014, 14:14

Мне кажется, в инструкции https://github.com/RoboCraft/robot_4wd/ ... rmware.txt
следует добавить команды которые нужно выполнить
например не сразу понятно откуда взять файлы на шаге 4. into robot_4wd_firmware folder copy source files:
(ссылка есть ниже но я например сначала её не увидел)
лучше что то типа
Код: Выделить всёРазвернуть
mkdir ~/sketchbook/robot_4wd
cd ~/sketchbook/robot_4wd
git clone https://github.com/RoboCraft/robot_4wd.git
cp robot_4wd/orcp2/robot_4wd_firmware.ino ./
cp robot_4wd/orcp2/orcp2.cpp ./
...

Респект за проделанную работу!

Re: Самодельный робот на базе ROS - Custom mobile robot with

noonv » 07 мар 2014, 14:20

Спасибо! :)

Re: Самодельный робот на базе ROS - Custom mobile robot with

linvinus » 07 мар 2014, 14:46

Кстати, а как вы управляете всем этим хозяйством?
rviz или что то своё написали?
а slam не запускали случайно?

Re: Самодельный робот на базе ROS - Custom mobile robot with

noonv » 07 мар 2014, 15:00

управляли через терминал, а до SLAM-а дело не успело дойти, т.к. робота отослали заказчику :)

Re: Самодельный робот на базе ROS - Custom mobile robot with

linvinus » 07 мар 2014, 15:40

noonv писал(а):управляли через терминал, а до SLAM-а дело не успело дойти, т.к. робота отослали заказчику :)

понятно, я нашёл https://github.com/RoboCraft/robot_4wd/ ... wd_key.cpp

жаль, ваш пример конечно очень полезен, но осязаемой практической пользы не видно.
с тем же успехом можно просто посылать команды с терминала и рос не нужен :)

Re: Самодельный робот на базе ROS - Custom mobile robot with

noonv » 07 мар 2014, 15:43

linvinus писал(а):понятно, я нашёл https://github.com/RoboCraft/robot_4wd/ ... wd_key.cpp

жаль, ваш пример конечно очень полезен, но осязаемой практической пользы не видно.
с тем же успехом можно просто посылать команды с терминала и рос не нужен

да - этот узел :)
согласен, так это и приводится, как простой пример подключения своего робота к ROS-у и не более :)

Re: Самодельный робот на базе ROS - Custom mobile robot with

linvinus » 07 мар 2014, 16:02

noonv писал(а):
linvinus писал(а):понятно, я нашёл https://github.com/RoboCraft/robot_4wd/ ... wd_key.cpp

жаль, ваш пример конечно очень полезен, но осязаемой практической пользы не видно.
с тем же успехом можно просто посылать команды с терминала и рос не нужен

да - этот узел :)
согласен, так это и приводится, как простой пример подключения своего робота к ROS-у и не более :)

Ок, спасибо!
не могу понять тут есть такие строчки https://github.com/RoboCraft/robot_4wd/ ... d_node.cpp

Код: Выделить всёРазвернуть
    geometry_msgs::Quaternion quaternion;
    quaternion.x = 0.0;
    quaternion.y = 0.0;
    quaternion.z = sin(odom_th / 2.0);
    quaternion.w = cos(odom_th / 2.0);


это тоже самое что quaternion = createQuaternionFromYaw(odom_th); ?

у меня практически такой же код, но без публикации сообщения nav_msgs::Odometry,
в rviz я вижу движение робота, но как только робот начинает вращаться, вместо вращения вокруг своей оси, робот крутится вокруг начала базовой системы координат.

Re: Самодельный робот на базе ROS - Custom mobile robot with

noonv » 07 мар 2014, 16:06

относительно одометрии нужно ещё поковырять - там могут быть косяки ;)

Re: Самодельный робот на базе ROS - Custom mobile robot with

linvinus » 07 мар 2014, 16:18

noonv писал(а):относительно одометрии нужно ещё поковырять - там могут быть косяки ;)

ок, только в понедельник смогу проверить :cry:

Re: Самодельный робот на базе ROS - Custom mobile robot with

RootAdmin » 07 мар 2014, 16:50

Про модель URDF читаю. На примерах: http://wiki.ros.org/urdf/Tutorials/Buil ... %20Scratch
http://wiki.ros.org/urdf/Tutorials/Crea ... rdf%20file
А кто-нибудь пытался использовать http://gazebosim.org/ чтобы обойтись без робота?

Re: Самодельный робот на базе ROS - Custom mobile robot with

citizen » 07 мар 2014, 16:57

На всякий случай оставлю здесь ссылку - настройка ROS для сетевой работы (roscore и часть узлов работают на одном компьютере, другая часть - на другом): http://wiki.ros.org/ROS/Tutorials/MultipleMachines


cron
Rambler\'s Top100 Mail.ru counter