Имеется в наличии работающий Turtlebot (ROS fuerte) — немного измененный.
Есть желание построить карту помещения и управлять движением голосом («Иди на кухню», «иди в зал», «на место» и т.д.) и удаленно.
А пока — промежуточная задача — добавить камеру заднего вида (USB на поворотной платформе) и управлять камерой и движением робота через браузер с рабочего места, и управление не простое а с помощью:
— голоса,
— джойстика,
— датчика kinect.
Подключение камеры
Камера подключена к контроллеру Arduino, Arduino общается с ROS с помощью библиотеки rosserial, примеры использования здесь и здесь.


Установка rosserial
sudo apt-get install ros-fuerte-rosserial rosdep install rosserial_arduino rosmake rosserial_arduino
Пишем скетч на Arduino, который будет получать сообщения из ROS из топика turtlebot_servo1 (тип std_msgs/Int16). Один байт — угол поворота первой сервы, второй — угол поворота второй сервы.
Используется библиотека ros.h(папку ros_lib из /opt/ros/fuerte/stacks/rosserial/rosserial_arduino/librariesв папку libraries Arduino) и Servo.h.
Для визуализации получаемых данных добавил экран WH0802.
Код скетча
#include <Servo.h>
Servo myservo1,myservo2;
/* подключение WH0802 к arduino
* LCD RS - pin 12
* LCD Enable - pin 11
* LCD D4 - pin 5
* LCD D5 - pin 4
* LCD D6 - pin 3
* LCD D7 - pin 2
* LCD R/W - GND
* 10K resistor:
* ends to +5V and ground
* wiper to LCD VO pin (pin 3)
*/
#include <LiquidCrystal.h>
// инициализация библиотеки
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
// rosserial
#include <ros.h>
#include <std_msgs/Int16.h>
#include <std_msgs/Float32.h>
ros::NodeHandle nh;
void messageCb( const std_msgs::Int16& toggle_msg){
digitalWrite(13, HIGH-digitalRead(13)); // blink the led
lcd.clear();
lcd.setCursor(0, 0);
lcd.print(lowByte(toggle_msg.data));
lcd.setCursor(0, 1);
lcd.print(highByte(toggle_msg.data));
myservo1.write(lowByte(toggle_msg.data));
myservo2.write(highByte(toggle_msg.data));
}
ros::Subscriber sub("turtlebot_servo", &messageCb );
void setup() {
lcd.begin(8, 2);
pinMode(13, OUTPUT);
nh.initNode();
nh.subscribe(sub);
lcd.setCursor(4, 0);
lcd.print("start");
myservo1.attach(8);
myservo2.attach(9);
}
void loop() {
nh.spinOnce();
delay(1000);
}
Проверяем:
1 монитор
roscore
2 монитор
rosrun rosserial_python serial_node.py /dev/ttyACM0
3 монитор — отправка данных в тему turtlebot_servo
(1 серва — 90, 2 серва — 0):
rostopic turtlebot_servo std_msgs/Int16 90
или, например (1 серва — 45, 2 серва — 100):
rostopic turtlebot_servo std_msgs/Int16 25645
Смотрим документацию по iRobotCreate:
сервоприводы питание — вывод 10 iRobotCreate
Arduino питание — вывод 9 iRobotCreate
GND — вывод 14 iRobotCreate
Далее — Часть 2. Отправка-получение сообщений в ROS из браузера через rosbridge

4 комментария на «“Удаленное управление Turtlebot через браузер джойстиком, голосом, с помощью Kinect. Часть 1”»
Сделал как здесь
скетч загрузился. идем дальше )))
Доброго времени суток. Спасибо за статью. Я на конец сдвинулся с мертвой точки. Но не могли бы вы подробно рассказать как подключить библиотеки ROS в ArduinoIDE? У меня при компиляции скетча выходит ошибка:
In file included from /opt/ros/groovy/include/ros/time.h:53, from /home/milinsky/arduino-1.0.4/libraries/ros/ros.h:38, from sketch_may14a.ino:25: /opt/ros/groovy/include/ros/platform.h:63: error: ‘ros::get_environment_variable’ declared as an ‘inline’ variable /opt/ros/groovy/include/ros/platform.h:63: error: ‘string’ is not a member of ‘std’ /opt/ros/groovy/include/ros/platform.h:63: error: ‘str’ was not declared in this scope /opt/ros/groovy/include/ros/platform.h:63: error: expected primary-expression before ‘const’ /opt/ros/groovy/include/ros/platform.h:63: error: initializer expression list treated as compound expression /opt/ros/groovy/include/ros/platform.h:63: error: expected ‘,’ or ‘;’ before ‘{’ token sketch_may14a:58: error: expected `}' at end of inputЗаранее спасибо!
Я делал так
Сначала
sudo apt-get install ros-fuerte-rosserial
rosdep install rosserial_arduino
rosmake rosserial_arduino
Затем папку /opt/ros/fuerte/stacks/rosserial/rosserial_arduino/ros_lib
переносил в папку libraries Arduino директории
Если не создавать пользовательские типы сообщений из ROS — то все должно работать
если создавать свои типы сообщений, то посмотреть — расписано как делается в этом топике
надо попробовать еще раз внимательно по шагам и все получится
Поставил Fuerte. rosserial_arduino собрался без проблем. Библиотеки подгрузил в IDE. Теперь появляется следующая ошибка:
В файле, включенном из /home/milinsky/arduino-1.0.4/libraries/ros_lib/ros.h:39, из sketch_may16a.ino:25: /home/milinsky/arduino-1.0.4/libraries/ros_lib/ArduinoHardware.h:38:22: ошибка: WProgram.h: Нет такого файла или каталогаФайл WProgram.h нигде не нашел. Помогите пожалуйста.