我想将数据从一个节点发送到另一个节点。例如:一个节点正在向主题发布数据,另一个节点/mobile_base/commands/velocity
正在订阅/mobile_base/events/bumper
。订阅者和发布者都工作正常。
我想要做的是一旦按下保险杠就让机器人向后移动。我不知道如何将按下保险杠的事件发送到另一个节点。
我认为的解决方案是使用管道或套接字或共享内存在两个节点之间交换数据。
这是正确的方法吗?还是 ROS 有一个内置的方法呢?
提前致谢。
我想将数据从一个节点发送到另一个节点。例如:一个节点正在向主题发布数据,另一个节点/mobile_base/commands/velocity
正在订阅/mobile_base/events/bumper
。订阅者和发布者都工作正常。
我想要做的是一旦按下保险杠就让机器人向后移动。我不知道如何将按下保险杠的事件发送到另一个节点。
我认为的解决方案是使用管道或套接字或共享内存在两个节点之间交换数据。
这是正确的方法吗?还是 ROS 有一个内置的方法呢?
提前致谢。
通过订阅“bumper”主题,数据可用于该节点。(假设您使用的是 C++,正如您没有提到的那样 - 理论是相同的,但显然语法会有所不同)。使用 ROS 网站(链接)上的示例发布/订阅代码。
#include "ros/ros.h"
#include "std_msgs/String.h"
//Callback for bumper data
// this callback happens
void bumperCallback(const std_msgs::String::ConstPtr& msg)
{
//print received data for debugging
ROS_INFO("I heard: [%s]", msg->data.c_str());
//If the callback data contains "hit" - change to integer, float or whatever type your message is
if(msg->data.c_str() == "hit")
move_backwards(); // Call function to move the robot backwards
}
int main(int argc, char **argv)
{
ros::init(argc, argv, "listener");
ros::NodeHandle n;
ros::Subscriber sub = n.subscribe("bumper", 1000, bumperCallback);
ros::spin();
return 0;
}