1.创建工作空间并创建话题通信的功能包
mkdir -p ~/topic_ws/src #递归创建目录,后面的名字必须是src
cd ~/topic_ws #进入tocpic_ws目录
catkin_make
echo 'source ~/topic_ws/devel/setup.bash'>>~/.bashrc #这样保障开启终端时自动配置工作区
cd src #进入src目录
catkin_create_pkg test_topic rospy std_msgs #创建包并添加相关依赖项
2.新建发布节点(publisher)
在test_topic目录下的src中实现publisher.py
cd ~/topic_ws/src/test_topic/src
touch publisher.py
gedit publisher.py
在publisher.py输入代码
#!/usr/bin/env python
# BEGIN ALL
# BEGIN SHEBANG
#!/usr/bin/env python
# END SHEBANG
# BEGIN IMPORT
import rospy
# END IMPORT
# BEGIN STD_MSGS
from std_msgs.msg import Int32
# END STD_MSGS
rospy.init_node('topic_publisher')
# BEGIN PUB
pub = rospy.Publisher('counter', Int32)
# END PUB
# BEGIN LOOP
rate = rospy.Rate(2)
count = 0
while not rospy.is_shutdown():
pub.publish(count)
count += 1
rate.sleep()
# END LOOP
# END ALL
3.新建接收节点(subscriber)
在test_topic目录下的src中实现subscriber.py
cd ~/topic_ws/src/test_topic/src
touch subscriber.py
gedit subscriber.py
在subscriber.py输入代码
#!/usr/bin/env python
# BEGIN ALL
#!/usr/bin/env python
import rospy
from std_msgs.msg import Int32
# BEGIN CALLBACK
def callback(msg):
print msg.data
# END CALLBACK
rospy.init_node('topic_subscriber')
# BEGIN SUBSCRIBER
sub = rospy.Subscriber('counter', Int32, callback)
# END SUBSCRIBER
rospy.spin()
# END ALL
4.运行节点
cd ~/ws_name
catkin_make
最后在不同的terminal中运行roscore和两个节点即可完成通讯。
roscore
rosrun test_topic publisher.py
rosrun test_topic subscriber.py