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

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

Продолжение. Начало — Часть 1

Пакет rosbridge

Создан в Университет Брауна, rosbridge был первоначально предназначен для любого не ROS процессов клиента для работы с системой ROS. Rosbridge позволяет внешним клиентам иметь доступ к темам и сервисам ROS (публикация и получение из тем, вызов сервисов). Rosbridge является частью мете-пакета rosbridge_suite, включающего различные дополнительные пакеты для реализации протокола rosbridge.
Установка пакета
sudo apt-get install ros-fuerte-rosbridge-suite


Мне необходимо в браузере иметь изображения с камеры заднего вида и с камер kinect Turtlebot-а, необходимо установить пакет mjpeg_server

sudo apt-get install ros-fuerte-mjpeg-server


Rosbridge клиенты могут быть написаны на любом языке, который поддерживает WebSockets. Библиотеки с открытым источником WebSocket клиента доступны для Python, Java, Android, C и пр. Мы будем использовать Javascript.

8 мая 2013 года получил в рассылке пришло сообщение об официальном запуске сайта RobotWebTools. RobotWebTools представляет собой набор с открытым исходным кодом модули и инструменты для создания веб-приложений робота.

В своем проекте я использовал еще старую javascript-библиотеку ros.js

Библиотека ros.js

Для использования в блоке html-страницы подключаем библиотеку ros.js

<script type="text/javascript" src="ros.js"></script>


Создаем websocket соединение к rosbridge по порту 9090

var con = new Bridge("ws://ip_robot:9090");


Теперь можно получать и публиковать сообщения в ROS
Публикация сообщения в тему — con.publish(topic, msg), например

con.publish('/cmd_vel', {"linear":{"x":1.0,"y":0,"z":0},"angular":{"x":0,"y":0,"z":0}});


Если тема не существует — до отправки сообщений необходимо создать тему — con.advertise(topic, type), например

con.advertise('/turtlebot_servo','std_msgs/Int16');


Чтобы подписаться на получение сообщений из темы — сначала создаем функцию обратного вызова, а затем подписаться на получение сообщений из темы, например:

var get_data1(msg1) 
  {alert(msg1);}
var cback1=function(msg1){JSON.stringify(msg1);get_data1(msg1);}
con.subscribe(cback1,"/from_arduino1","stg_msgs/String");


Создание тестовой страницы html-страницы, отправка-получение сообщений из ROS

Создадим простейшую html-страницу, которая создаст websocket-соединение, создадим две темы web_publisher1, web_subscriber1 и протестируем отправку-получение данных в ROS. Добавим на страницу и изображение с камеры нетбука.

Код html-страницы следующий (test1.html)

<html>
<head>
<script src='ros.js'></script>
<script type="text/javascript">
var choice_robot="192.168.0.8";   // ip моего компа с ROS в сети
var con = new Bridge("ws://192.168.0.8:9090");

// получение данных
var get_ros1=function(msg)
  {
  alert(msg);
  document.getElementById("getdata1").value=msg;
  }

con.onOpen=function()
  {
  var cback=function(msg1) {JSON.stringify(msg1),get_ros1(msg1.data);}
    con.subscribe(cback,'/web_subscriber1','std_msgs/String');
  con.advertise('/web_publisher1', 'std_msgs/String');	
  }
//  отправка
function send_ros1() {
  con.publish('/web_publisher1', {'data':document.getElementById("putdata1").value});
  }

</script>
</head>
<body>
<h2 id="start">Rosbridge example</h2>
<h3 id="">Отправка - получение сообщений</h3>
    <form id=formoptions name=formoptions action="javascript:void();" onsubmit="feturn false;">
      
 Получить из темы web_subscriber1 
      <input name=getdata1 id=getdata1>
      
 Отправить в тему web_publisher12
      <input  name=putdata1 id=putdata1>
      <button id='button1' value='send' onclick='send_ros1();'>Отправить</button>
    </form>
</body>
</html>


Запуск
Создаем в одной из папок с проектами ROS (у меня ~/ros_pkgs/drone_teleop) папку www. В ней папку test. Теперь копируем в нее файлы test1.html и ros.js.

Просмотр в терминале (Guake terminal)
0 терминал
$ roscore


1 терминал
$ rosrun rosbridge_server rosbridge.py


2 терминал
$ rosrun roswww webserver.py


Открываем браузер на любом другом компе из сети и набираем в адресной строке 192.168.0.8:8000/drone_teleop/test/test1.html
(192.168.0.8 — адреса нашего компьютера с ROS)



Смотрим в ROS список тем
$ rostopic list




Появились темы web_subscriber1 и web_publisher1

Попробуем оправить из браузера сообщения. Cмотрим ROS приходящие
$rostopic echo web_publisher1



отправим из ROS сообщение в тему web_subscriber1
$ rostopic pub web_subscriber1 std_msgs/String Привет_браузер


Видим в браузере



Добавим на страницу вывод потокового изображения с web-камеры из ROS
Сначала организуем вывод в ROS потокового изображения с web-камеры.
Установим пакет bosch-drivers

$ sudo apt-get install ros-fuerte-bosch-drivers


Перейдем в пакет usb_cam и создадим launch-файл usb_cam-test1.launch

$ roscd usb_cam
$ cd src
$ sudo touch usb_cam-test1.launch
$ sudo gedit usb_cam-test1.launch

следующего содержания
<launch>
  <node name="usb_cam1" pkg="usb_cam" type="usb_cam_node" output="screen" >
    <param name="video_device" value="/dev/video0"></param>
    <param name="image_width" value="320"></param>
    <param name="image_height" value="240"></param>
    <param name="pixel_format" value="yuyv"></param>
    <param name="camera_frame_id" value="usb_cam"></param>
    <param name="io_method" value="mmap"></param>
  </node>
  <node name="image_view" pkg="image_view" type="image_view" respawn="false" output="screen">
    <remap from="image" to="/usb_cam1/image_raw"/>
    <param name="autosize" value="true"></param>
  </node>
</launch>


Запустим launch-файл
3 терминал
$ roslaunch usb_cam usb_cam-test1.launch

В тему /usb_cam1/image_raw публикуются данные image_raw
Должно появиться окошко с потоковым выводом изображения

Для вывода в браузере
изменяем файл test1.html — вставляем одну строку после /form>

<img id_camera_robot src="http://192.168.0.8:8080/stream?topic=/usb_cam1/image_raw">


И запускаем mjpeg_server
4 терминал
$ rosrun mjpeg_server mjpej_server


Перегружаем страницу в браузере и видим потоковое изображение с камеры из ROS, тема /usb_cam1/image_raw ROS



Далее — голосовое управление Turtlebot через браузер

Комментарии (0)

RSS свернуть / развернуть

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