Я новичок в этой области, так что буду обобщать по ходу изучения этого вопроса.
Итак, дано:
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
в rosserial была мелкая ошибка, исправление тут https://github.com/ros-drivers/rosserial/pull/106
тут два выхода, отказаться от использования rosserial и организовать совой протокол обмена данными между рос и контроллером,
либо разобраться что не так, я пока разбираюсь
либо использовать свои сообщения, а на стороне сервера их преобразовывать в подходящие.
***********************************************************************************
Полезные ссылки.
1) http://www.clearpathrobotics.com/blog/h ... e-ros-101/ тут есть листок с подсказками на котором собрано большинство повседневных команд.
советую распечатать и положить на стол.
незабываем пользоваться авто дополнением команд.
внешний вид