ROS学习话题通信之Python实现

与上一篇C++实现同理 下面给出相关的Python实现代码

关于py文件的 talker:(demo01_talker_str_py

import rclpy
from rclpy.node import Node
from std_msgs.msg import String

class Talker(Node):
    def __init__(self):
        super().__init__("talker_node_py")
        self.get_logger().info("sender create!")
        self.publisher = self.create_publisher(String,"chatter",10)
        self.timer = self.create_timer(1.0,self.on_timer)
        self.count = 0

    def on_timer(self):
        message = String()
        message.data = "hello world!" + str(self.count)
        self.publisher.publish(message)
        self.count += 1
        self.get_logger().info("publish:%s"% message.data)

def main():

    rclpy.init()
    rclpy.spin(Talker())
    rclpy.shutdown()


if __name__ == '__main__':
    main()

Listen:(semo02_listener_str_py

import rclpy
from rclpy.node import Node
from std_msgs.msg import String
class Listener(Node):
    def __init__(self):
        super().__init__("listener_node_py")
        self.get_logger().info("subscribution!")
        self.subscirption = self.create_subscription(String,"chatter",self.do_cb,10)
    def do_cb(self,msg):
        self.get_logger().info("订阅数据:%s"%msg.data)


def main():
    rclpy.init()
    rclpy.spin(Listener())
    rclpy.shutdown()

if __name__ == '__main__':
    main()

package.xml:




  py01_topic
  0.0.0
  TODO: Package description
  xwh
  TODO: License declaration

  rclcpp
  std_msgs
  baseinterfaces

  ament_copyright
  ament_flake8
  ament_pep257
  python3-pytest

  
    ament_python
  

setup.py:

from setuptools import find_packages, setup

package_name = 'py01_topic'

setup(
    name=package_name,
    version='0.0.0',
    packages=find_packages(exclude=['test']),
    data_files=[
        ('share/ament_index/resource_index/packages',
            ['resource/' + package_name]),
        ('share/' + package_name, ['package.xml']),
    ],
    install_requires=['setuptools'],
    zip_safe=True,
    maintainer='xwh',
    maintainer_email='[email protected]',
    description='TODO: Package description',
    license='TODO: License declaration',
    tests_require=['pytest'],
    entry_points={
        'console_scripts': [
            'demo01_talker_str_py = py01_topic.demo01_talker_str_py:main',
            'demo02_listener_str_py = py01_topic.demo02_listener_str_py:main'
        ],
    },
)

你可能感兴趣的:(学习,python,ROS2,ubuntu)