Закрыть
Arduino как издатель ROS

Arduino как издатель ROS

Сегодня я начну изучение библиотеки rosserial, которая позволяет использовать Arduino в качестве узла ROS. Вместе с библиотекой идут многочисленные примеры, и, конечно же, первый из рассмотренных будет HelloWorld. Этот пример публикует используя Arduino тему ROS с фразой «hello world!».

В Arduino IDE открываем пример HelloWorld, найдя его в меню ФайлПримерыros_libHelloWorld. В открывшемся окошке перед нами предстает следующий код:

/*
 * rosserial Publisher Example
 * Prints "hello world!"
 */

#include <ros.h>
#include <std_msgs/String.h>

ros::NodeHandle nh;

std_msgs::String str_msg;
ros::Publisher chatter("chatter", &str_msg);

char hello[13] = "hello world!";

void setup()
{
  nh.initNode();
  nh.advertise(chatter);
}
void loop()
{
  str_msg.data = hello;
  chatter.publish( &str_msg );
  nh.spinOnce();
  delay(1000);
}

Частью каждой Arduino-программы, работающей совместно с ROS является заголовочный файл ros.h, а также заголовочные файлы сообщений, которые мы будем использовать

#include <ros.h>
#include <std_msgs/String.h>

Далее, нам необходимо создать экземпляр обработчика узла, который позволяет нашей программе создавать издателей (publishers) и подписчиков (subscribers). Обработчик узла также заботится о передачи данных по последовательному порту.

ros::NodeHandle nh;

Мы должны создать экземпляры издателей и подписчиков, которых мы будем использовать. Здесь мы создаем экземпляр Publisher с названием темы «chatter». Вторым параметром Publisher является ссылка на экземпляр сообщения, которое будет публиковаться.

std_msgs::String str_msg;
ros::Publisher chatter("chatter", &str_msg);

В функции setup () нам необходимо инициализировать обработчик ROS для информирования о любых публикуемых темах, а также для подписки на темы.

void setup()
{
  nh.initNode();
  nh.advertise(chatter);
}

Наконец, в функции loop () узел публикует «hello world!» и вызывает ros::spinOnce () в которой происходит обработка всех обратных вызовов для соединений.

void loop()
{
 str_msg.data = hello;
 chatter.publish( &str_msg );
 nh.spinOnce();
 delay(1000);
}

Загружаем скетч в Arduino.

После того, как скетч успешно загрузится, открываем окно Терминала Linux и запускаем в нем ROS, выполнив

$ roscore

Далее, в новом окне или вкладке Терминала запускаем клиентское приложение rosserial, которое будет перенаправлять сообщения Arduino в ROS. Убедитесь, что указываете правильный последовательный порт:

$ rosrun rosserial_python serial_node.py _port:=/dev/ttyUSB0

Наконец, наблюдаем приветственное сообщение Arduino, выполнив опять же в новом окошке Терминала:

$ rostopic echo chatter

Я записал небольшое видео, в котором показал все вышеописанные шаги по использованию Arduino в качестве издателя ROS.

[add_ratings]

Оставить ответ

Ваш email не будет опубликован.Обязательны поля помечены *