ROS Arduino Подписаться на / cmd_vel

Я использую ros_lib для arduino для создания последовательного узла с помощью rosserial. Я хочу написать код, который подписывается на тему / cmd_vel и выводит сообщение geometry_msgs / Twist на последовательный порт (arduion mega, несколько последовательных портов).

заранее спасибо

#include <ros.h>
#include <std_msgs/String.h>
#include <std_msgs/Empty.h>
#include <geometry_msgs/Twist.h>

ros::NodeHandle  nh;

ros::Subscriber<geometry_msgs::Twist> sub("/cmd_vel", messageCb );

void setup()
{
  Serial1.begin(9600);
  nh.initNode();
  nh.subscribe(sub);
}

void loop()
{
  Serial1.println(sub.data);
  nh.spinOnce();
  delay(1);
}

person FunnyKiwi    schedule 29.05.2017    source источник
comment
Добро пожаловать в SO. Прямо сейчас ваш вопрос слишком общий и неопределенный, поэтому маловероятно, что кто-то на него ответит. Воспользуйтесь функцией редактирования, чтобы подробнее объяснить, что вы уже пробовали и в чем именно возникла проблема. См. Также stackoverflow.com/help/how-to-ask.   -  person luator    schedule 29.05.2017


Ответы (1)


Ваш код является неполным, когда вы делаете:

ros::Subscriber<geometry_msgs::Twist> sub("/cmd_vel", messageCb );

вы сообщаете ROS-Master следующее:

пожалуйста, сообщите о сообщениях по теме "/ cmd_vel" и для этого используйте метод обратного вызова: messageCb, но у вас нет метода обратного вызова в коде .... вам не хватает чего-то вроде:

void messageCb(const std_msgs::String::ConstPtr& msg)
{
    Serial1.println("The turtle said:");
    Serial1.println(msg->data.c_str());
}
person ΦXocę 웃 Пepeúpa ツ    schedule 29.05.2017