CraftDuino v2.0
  • - это CraftDuino - наш вариант полностью Arduino-совместимой платы.
  • CraftDuino - настоящий конструктор, для очень быстрого прототипирования и реализации идей.
  • Любая возможность автоматизировать что-то с лёгкостью реализуется с CraftDuino!
Просто добавьте CraftDuino!

Удаленное управление Turtlebot через браузер джойстиком, голосом, с помощью Kinect. Часть 1

Имеется в наличии работающий 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<std_msgs::Int16> 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)

RSS свернуть / развернуть
+
0
Доброго времени суток. Спасибо за статью. Я на конец сдвинулся с мертвой точки. Но не могли бы вы подробно рассказать как подключить библиотеки 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
Заранее спасибо!
avatar

milinsky

  • 15 мая 2013, 03:54
+
0
Я делал так
Сначала
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 — то все должно работать
если создавать свои типы сообщений, то посмотреть — расписано как делается в этом топике
http://robocraft.ru/blog/1039.html
надо попробовать еще раз внимательно по шагам и все получится
avatar

victoruni

  • 16 мая 2013, 07:18
+
0
Поставил 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 нигде не нашел. Помогите пожалуйста.
avatar

milinsky

  • 16 мая 2013, 08:03
+
0
Сделал как здесь robocraft.ru/forum/viewtopic.php?t=156
скетч загрузился. идем дальше )))
avatar

milinsky

  • 16 мая 2013, 08:17

Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.