建立文件夹hello_rospy,再在该目录下建立子目录src,cd到该src目录,运行如下命令创建工作包
catkin_create_pkg beginner_tutorials std_msgs rospy roscpp
pkg代表所属包名,name是文件名,type是脚本文件名称,output指定输出到屏幕
cd到src上层目录,编译并且source
cd ..
catkin_make
. devel/setup.bash
编写订阅者程序
roscd beginner_tutorials/mkdir scripts
cd scripts
在scripts目录下新建talker.py文件,填写如下内容
#!/usr/bin/env python
# license removedforbrevity
import rospyfromstd_msgs.msg import String
def talker():
pub= rospy.Publisher('chatter', String, queue_size=10)
rospy.init_node('talker', anonymous=True)
rate= rospy.Rate(10) # 10hzwhilenot 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 rospyfromstd_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 oneiskicked off. The
# anonymous=True flag means that rospy will choose a unique
# namefor our 'listener'node so that multiple listeners can
# run simultaneously.
rospy.init_node('listener', anonymous=True)
rospy.Subscriber("chatter", String, callback)
# spin() simply keeps pythonfrom exiting until this node isstopped
rospy.spin()if __name__ == '__main__':
listener()
记得更改权限为可执行文件
3. 编译
修改Cmakelist.txt为如下:
cmake_minimum_required(VERSION 2.8.3)
project(beginner_tutorials)
## Find catkin macros and libraries
##ifCOMPONENTS list like find_package(catkin REQUIRED COMPONENTS xyz)
##isused, 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
结果: