python ros 创建节点订阅robot_pose
建立文件夹hello_rospy,再在该目录下建立子目录src,cd到该src目录,运行如下命令创建工作包
catkin_create_pkg beginner_tutorials std_msgs rospy roscpp
pkg代表所属包名,name是文件名,type是脚本文件名称,output指定输出到屏幕
<node pkg="xsens_drive" name="mtnode" type="mtnode.py" output="screen">
</node>
cd到src上层目录,编译并且source
cd ..
catkin_make
. devel/setup.bash
编写订阅者程序
roscd beginner_tutorials/
mkdir scripts
cd scripts
在scripts目录下新建talker.py文件,填写如下内容
#!/usr/bin/env python # license removed for brevity import rospy from std_msgs.msg import String def talker(): pub = rospy.Publisher('chatter', String, queue_size=10) rospy.init_node('talker', anonymous=True) rate = rospy.Rate(10) # 10hz while not rospy.is_shutdown(): hello_str = "hello world %s" % rospy.get_time() rospy.loginfo(hello_str) pub.publish(hello_str) rate.sleep() if __name__ == '__main__': try: talker() except rospy.ROSInterruptException: pass!
在scripts目录下新建listener.py文件,填写如下内容:
#!/usr/bin/env python import rospy from std_msgs.msg import String def callback(data): rospy.loginfo(rospy.get_caller_id() + "I heard %s", data.data) def listener(): # In ROS, nodes are uniquely named. If two nodes with the same # node are launched, the previous one is kicked off. The # anonymous=True flag means that rospy will choose a unique # name for our 'listener' node so that multiple listeners can # run simultaneously. rospy.init_node('listener', anonymous=True) rospy.Subscriber("chatter", String, callback) # spin() simply keeps python from exiting until this node is stopped rospy.spin() if __name__ == '__main__': listener()
记得更改权限为可执行文件
3. 编译
修改Cmakelist.txt为如下:
cmake_minimum_required(VERSION 2.8.3) project(beginner_tutorials) ## Find catkin macros and libraries ## if COMPONENTS list like find_package(catkin REQUIRED COMPONENTS xyz) ## is used, also find other catkin packages find_package(catkin REQUIRED COMPONENTS roscpp rospy std_msgs ) catkin_package()
直接在工作空间运行catkin_make
即可
4. 运行
在3个终端中分别执行如下命令
roscore
rosrun beginner_tutorials talker.py
rosrun beginner_tutorials listener.py
结果: