深圳市坪山区住房和建设局网站百度搜索软件
ROS2 入门应用 引用自定义消息(Python)
- 1. 查看自定义消息
- 2. 修改话题发布
- 3. 修改话题订阅
- 4. 修改依赖关系
- 5. 编译和运行
1. 查看自定义消息
引用在《ROS2 入门应用 创建自定义接口》中自定义的消息Sphere.msg
ros2 interface show tutorial_interfaces/msg/Sphere# geometry_msgs/Point center
# float64 x
# float64 y
# float64 z
# float64 radius
需要对《ROS2 入门应用 发布和订阅(Python)》中创建的发布者/订阅者功能包稍作修改
cd ~/ros2_ws/src/py_pubsub/py_pubsub
将把数值的字符串更改为球体半径
2. 修改话题发布
修改publisher_member_function.py
话题发布源文件,涉及话题类型变更和应用变化
import rclpy
from rclpy.node import Nodefrom tutorial_interfaces.msg import Sphere # CHANGEclass MinimalPublisher(Node):'''发布器节点类'''def __init__(self):# 初始化节点名、发布器、每0.5s回调的定时器和计数器super().__init__('minimal_publisher')self.publisher_ = self.create_publisher(Sphere, 'topic', 10) # CHANGEtimer_period = 0.5 self.timer = self.create_timer(timer_period, self.timer_callback)self.i = 0def timer_callback(self):'''定时器回调函数'''# 打印并发布字符串附加计数器值的信息msg = Sphere() # CHANGEmsg.radius = float(self.i) # CHANGEself.publisher_.publish(msg)self.get_logger().info('Publishing: "%d"' % msg.radius) # CHANGEself.i += 1def main(args=None):# 初始化ROS2rclpy.init(args=args)# 创建节点minimal_publisher = MinimalPublisher()# 运行节点rclpy.spin(minimal_publisher)# 销毁节点,退出ROS2minimal_publisher.destroy_node()rclpy.shutdown()if __name__ == '__main__':main()
3. 修改话题订阅
修改subscriber_member_function.py
话题订阅源文件,涉及话题类型变更和应用变化
import rclpy
from rclpy.node import Nodefrom tutorial_interfaces.msg import Sphere # CHANGEclass MinimalSubscriber(Node):'''订阅器节点类'''def __init__(self):# 初始化节点super().__init__('minimal_subscriber')# 初始化订阅器,话题类型Sphere,话题topic,回调函数listener_callbackself.subscription = self.create_subscription(Sphere, 'topic', self.listener_callback, 10) # CHANGEself.subscription # 防止未使用变量警告def listener_callback(self, msg):'''订阅器回调函数'''# 打印订阅话题的消息数据self.get_logger().info('I heard: "%d"' % msg.radius) # CHANGEdef main(args=None):# 初始化ROS2rclpy.init(args=args)# 创建节点minimal_subscriber = MinimalSubscriber()# 运行节点rclpy.spin(minimal_subscriber)# 销毁节点,退出ROS2minimal_subscriber.destroy_node()rclpy.shutdown()if __name__ == '__main__':main()
4. 修改依赖关系
在package.xml
清单文件中,添加对自定义消息的依赖项的声明
<exec_depend>tutorial_interfaces</exec_depend>
Python源文件应用不涉及到CMake编译信息,因此不用修改
CMakeLists.txt
编译文件
setup.py
安装软件包说明的程序入口点entry_points
字段在之前已经设置完成
entry_points={'console_scripts': ['talker = py_pubsub.publisher_member_function:main','listener = py_pubsub.subscriber_member_function:main',],
},
5. 编译和运行
进入工作空间根目录
cd ~/ros2_ws
编译:
colcon build --packages-select py_pubsub
打开一个新终端,运行话题发布节点:
ros2 run py_pubsub talker# [INFO] [minimal_publisher]: Publishing: "0"
# [INFO] [minimal_publisher]: Publishing: "1"
# [INFO] [minimal_publisher]: Publishing: "2"
打开一个新终端,运行话题订阅节点:
ros2 run py_pubsub listener# [INFO] [minimal_subscriber]: I heard: "10"
# [INFO] [minimal_subscriber]: I heard: "11"
# [INFO] [minimal_subscriber]: I heard: "12"
谢谢