ROS通信机制——python实现

一、普通话题通信

1. 创建发布者

注意:不要在开头添加注释,下面代码第一行是指定编译器,第二行是防止因为代码中的中文注释而出现乱码

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

#导包
import rospy  
from std_msgs.msg import String

if __name__=="__main__":
    #初始化ROS节点
    rospy.init_node("talker")
    #创建发布者
    pub=rospy.Publisher("Matlab",String,queue_size=10)
    #创建消息类型
    msg=String()
    #设置发布排频率
    rate=rospy.Rate(1)
    count=0
    #休眠1秒,防止出现前面的数据没有接受到
    rospy.sleep(1)
    #循环发布数据,其中rospy.is_shutdown()的意思是只要节点关闭就返回true
    while not rospy.is_shutdown():
        count+=1
        #str(count)可以将count转变为字符串
        msg.data="hello"+str(count)
        pub.publish(msg)
        #rospy.loginfo()相当于C++版本里面的ROS_INFO()
        rospy.loginfo("I talk %s",msg.data)
        #休眠
        rate.sleep()

2. 创建订阅者

注意:不要在开头添加注释,下面代码第一行是指定编译器,第二行是防止因为代码中的中文注释而出现乱码

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

#导包
import rospy
from std_msgs.msg import String

def Callback(msg):
    rospy.loginfo("I hear %s",msg.data)

if __name__=="__main__":
    #初始化ROS节点
    rospy.init_node("listener")
    #创建订阅者
    sub=rospy.Subscriber("Matlab",String,Callback,queue_size=10)
    #回调函数
    #spin
    rospy.spin()

3.添加可执行权限

注意:一定要在scripts文件夹下打开终端

4. 编译配置

在Cmakelist中添加如下代码:

ROS通信机制——python实现_第1张图片

catkin_install_python(PROGRAMS
  scripts/talker.py
  DESTINATION ${CATKIN_PACKAGE_BIN_DESTINATION}
)

catkin_install_python(PROGRAMS
  scripts/listener.py
  DESTINATION ${CATKIN_PACKAGE_BIN_DESTINATION}
)

5. 执行

ROS通信机制——python实现_第2张图片

二、自定义话题通信

1. 准备工作

先写好自定义的消息,然后再编译,这时会生成相应的头文件。

打开lib下面的python2.7/dist-package....,鼠标放在这个文件上然后打开终端。

ROS通信机制——python实现_第3张图片

 在终端中输入pwd,然后赋值路径

ROS通信机制——python实现_第4张图片

将路径赋值到setting.json中的“python.autoComplete.extraPaths” 中,保存。ROS通信机制——python实现_第5张图片

2. 编写发布者

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

#导包
import rospy
from learning_communication.msg import person

if __name__ == "__main__":
    #初始化节点
    rospy.init_node("talkermsg")
    #创建发布者
    pub=rospy.Publisher("Matlab",person,queue_size=10)
    #创建消息对象
    per=person()
    per.age=10
    per.name="zhangpeng"
    per.height=180
    #设置频率
    rate=rospy.Rate(1)
    while not rospy.is_shutdown():
        pub.publish(per)
        rospy.loginfo("I am talking %s %d %d",per.name,per.age,per.height)
        per.age+=1
        rate.sleep()

3. 编写接收者

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

import rospy
from learning_communication.msg import person

def Callback(per):
    rospy.loginfo("I hear %s %d %d",per.name,per.age,per.height)

if __name__ == "__main__":

    rospy.init_node("listenermsg")
    sub=rospy.Subscriber("Matlab",person,Callback,queue_size=10)
    rospy.spin()

4. 配置相关的文件

ROS通信机制——python实现_第6张图片

 在CmakeList中添加:

catkin_install_python(PROGRAMS
  scripts/talker.py
  scripts/listener.py
  scripts/talkermsg.py
  scripts/listenermsg.py
  DESTINATION ${CATKIN_PACKAGE_BIN_DESTINATION}
)

5. 添加可执行权限

注意:一定要在scripts文件夹下打开终端

6. 编译运行

ROS通信机制——python实现_第7张图片

你可能感兴趣的:(ROS,Linux,Vscode,linux,ubuntu)