首先创建ROS工作空间(如果还没有创建过)
mkdir -p ~/catkin_ws/src
cd ~/catkin_ws/
catkin_make
source devel/setup.bash
创建一个发布者节点
cd ~/catkin_ws/src
catkin_create_pkg my_publisher rospy
cd my_publisher/src
touch my_publisher_node.py
chmod +x my_publisher_node.py
下面以hello world为例
将下面的代码保存到my_publisher_node.py文件中
python
#!/usr/bin/env python
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
创建一个订阅者节点
cd ~/catkin_ws/src
catkin_create_pkg my_subscriber rospy
cd my_subscriber/src
touch my_subscriber_node.py
chmod +x my_subscriber_node.py
将下面的代码保存到my_subscriber_node.py文件中:
python
#!/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():
rospy.init_node('listener', anonymous=True)
rospy.Subscriber("chatter", String, callback)
rospy.spin()
if __name__ == '__main__':
listener()
运行发布者和订阅者节点
打开两个终端窗口,分别运行:
roscore
在第一个终端中运行发布者节点:
cd ~/catkin_ws/
source devel/setup.bash
rosrun my_publisher my_publisher_node.py
在第二个终端中运行订阅者节点:
cd ~/catkin_ws/
source devel/setup.bash
rosrun my_subscriber my_subscriber_node.py
此时,在订阅者节点所在的终端中可以看到类似如下输出:
[INFO] [1624323142.380634]: I heard hello world 1901.017
[INFO] [1624323142.481275]: I heard hello world 1901.117
[INFO] [1624323142.581449]: I heard hello world 1901.217
...
这表明订阅者成功接收到了发布者所发送的消息。