Ros_Topic通信方式

                             Ros_Topic通信方式

C++:

Publisher

publisher.cpp

#include 
#include 
#include 
using namespace std;

int main(int argc,char *argv[]){
    //节点名
    string nodeName = "cpp_publisher";
    //初始化节点 定义匿名节点加参数 ,ros::init_options::AnonymousName
    ros::init(argc,argv,nodeName,ros::init_options::AnonymousName);
    //创建节点
    ros::NodeHandle node;
    //节点名
    string topicName = "cpp_topic";
    //创建topic发送者
    //参数1:节点名
    //参数2:消息队列容量
    const ros::Publisher &publisher = node.advertise(topicName, 5);
    //每隔一秒钟发送一条消息
    ros::Rate rate(1);
    int i = 0;
    while (ros::ok()){
        std_msgs::String data;
        data.data = "hello "+to_string(i);
        //发送一条消息
        publisher.publish(data);
        //增加i
        i+=1;
        //睡眠
        rate.sleep();
    }
    return 0;
}

 

 

Subscriber

subscriber.cpp

#include 
#include 
#include 

using namespace std;

void callBack(std_msgs::String::ConstPtr data){
    cout<<"收到消息:"<data<(topicName, 5, callBack);
    //ros::spin 处理事件
    ros::spin();
    return 0;
}

 

 

python :

Publisher

publisher.py

#!/usr/bin/env python
# coding:utf-8

import rospy
# 导入数据
from std_msgs.msg import String
if __name__ == '__main__':

    # 节点名
    nodeName = 'py_publisher'
    # 初始化节点 定义匿名节点加参数 anonymous=True
    rospy.init_node(nodeName,anonymous=True)
    # 话题名
    topicName = 'py_topic'
    # 创建发布者
    publisher = rospy.Publisher(topicName, String, queue_size=5)
    # 每一秒钟发送一条消息
    rate = rospy.Rate(1)
    i = 0
    # 循环
    while not rospy.is_shutdown():
        # 消息内容
        data = String()
        data.data = 'hello {}'.format(i)
        # 发送消息
        publisher.publish(data)
        # 增加数据
        i += 1
        rate.sleep()

 

 

Subscriber

subscriber.py

#!/usr/bin/env python
# coding:utf-8

import rospy
# from std_msgs.msg import String
from geometry_msgs.msg import Twist
import threading
# python订阅者回调在子线程中
def callBack(data):
    print '接收的线程id:{}'.format(threading.current_thread().name)
    print '收到数据:{}'.format(data.linear.x)

if __name__ == '__main__':
    print '主线程线程id:{}'.format(threading.current_thread().name)
    # 节点名
    nodeName = 'py_subscriber'
    # 初始化节点 定义匿名节点加参数 anonymous=True
    rospy.init_node(nodeName,anonymous=True)
    # topic名字
    topicName = 'py_topic'
    # 创建订阅者
    # 参数1:topic名字
    # 参数2:topic数据类型
    # 参数3:回调函数
    subscriber = rospy.Subscriber(topicName, Twist, callBack)
    # 事件处理
    rospy.spin()

 

 

你可能感兴趣的:(ros,Ros_Topic通信方式,ros,Topic,subscriber,publisher)