本人在使用roboware这款软件编写C++文件与python文件有一些不同。下面是我在roboware下实现python话题编写的过程。
假设你已经安装好roboware studio这款软件,如果没有安装的话可以百度一下如何安装,这是一款非常好用的软件。
1. 新建工作区。点击新建工作区,选择存放目录,输入工作区名称,点击保存。
2.建立工作空间后,右击工作空间下的src目录,选择“新建ROS包”,如下图,在命名ROS时顺便添加依赖,rospy和std_msgs(注:此处是依赖是rospy,而建立c++版本时添加roscpp),然后回车。
建立之后目录空间如下:
3.右击ros包下的的src目录,选择“新建PY源文件”,命名之后回车(此处不像建立C++源文件时需要选择执行文件或者库之类,因为python是一种解释性语言,与c++不同)。
4.编写话题发布者与订阅者。
topic_pub代码如下:
#!/usr/bin/python2
# coding: utf-8
import rospy #导入ROS Python客户端
from std_msgs.msg import String
from std_msgs.msg import Int16
def topicPublisher():
rospy.init_node('pub_node', anonymous = False) #初始化ROS节点
simple_publisher = rospy.Publisher('mytopic', String, queue_size = 10) #定义Publisher对象
rate = rospy.Rate(10) #设置Topic发布的频率(Hz)
mytopic_content = "Hello World!" #填充Topic内容
while not rospy.is_shutdown():
simple_publisher.publish(mytopic_content) #发布Topic
rate.sleep() #确保Topic以我们设定的频率发布
if __name__ == '__main__':
try:
topicPublisher()
except rospy.ROSInterruptException:
pass
topic_sub代码如下:
#!/usr/bin/python
# coding: utf-8
import rospy #导入ROS Python客户端
from std_msgs.msg import String
# 定义Subscriber回调函数,处理收到的信息
def stringSubscriberCallback(data): #data的数据类型与Subscriber接收的Topic对应的消息类型一致
rospy.loginfo('I heard: %s', data.data)
def stringSubscriber():
rospy.init_node('sub_node', anonymous = False) #初始化ROS节点
rospy.Subscriber('mytopic', String, stringSubscriberCallback) #定义Subscriber对象
rospy.spin()
if __name__ == '__main__':
stringSubscriber()
注:1.以上代码为python2版本。
2.下面这两行注释很重要,不加可能会报错。
#!/usr/bin/python
# coding: utf-8
5.选择ros,点击“构建”
6.选择ros,点击“运行roscore”
7.在终端下
运行 source devel/setup.bash
进入到ros包的目录下,运行:
chmod u+x topic_pub.py
再进入工作区目录下,运行
rosrun test topic_pub.py
再打开一个新的终端:
source devel/setup.bash
进入到ros包的目录下,运行:
chmod u+x topic_sub.py
再进入工作区目录下,运行
rosrun test topic_sub.py
8.运行成功!