参考ROS学习之话题发布python实现, 改动较大
1.创建工作空间并创建话题通信的功能包
cd ~/auv_ws
cd src
catkin_create_pkg test_topic rospy std_msgs #创建包并添加相关依赖项
2.新建发布节点(publisher)
在test_topic目录下的src中实现publisher.py
cd ~/auv_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 ~/auv_ws
catkin_make
source devel/setup.bash
5.运行节点
可能需要给两个py文件进行
sudo chmod 777 xxx
最后在不同的terminal中运行roscore和两个节点即可完成通讯。
roscore
cd ~/auv_ws
source devel/setup.bash
rosrun test_topic publisher.py
cd ~/auv_ws
source devel/setup.bash
rosrun test_topic subscriber.py
6.有意思的发现
pc主机上可以订阅
xavier从机也可以订阅
但是两者不能被同时订阅,而且像是分配一样、不会丢包,两边的接力进行订阅