與上一篇C++實現同理 下面給出相關的Python實現代碼
關于py文件的 talker:(demo01_talker_str_py
import rclpy
from rclpy.node import Node
from std_msgs.msg import Stringclass 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 = 0def on_timer(self):message = String()message.data = "hello world!" + str(self.count)self.publisher.publish(message)self.count += 1self.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:
<?xml version="1.0"?>
<?xml-model href="http://download.ros.org/schema/package_format3.xsd" schematypens="http://www.w3.org/2001/XMLSchema"?>
<package format="3"><name>py01_topic</name><version>0.0.0</version><description>TODO: Package description</description><maintainer email="xwh@todo.todo">xwh</maintainer><license>TODO: License declaration</license><depend>rclcpp</depend><depend>std_msgs</depend><depend>baseinterfaces</depend><test_depend>ament_copyright</test_depend><test_depend>ament_flake8</test_depend><test_depend>ament_pep257</test_depend><test_depend>python3-pytest</test_depend><export><build_type>ament_python</build_type></export>
</package>
setup.py:
from setuptools import find_packages, setuppackage_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='xwh@todo.todo',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'],},
)