1. 创建package(创建过可省略)

  1. ros2 pkg create --build-type ament_python turtlesim_topic --dependencies geometry_msgs

可以修改package.xml文件如下信息

  1. <description>C++ client server tutorial</description>
  2. <maintainer email="you@email.com">Your Name</maintainer>
  3. <license>Apache License 2.0</license>

2. 编写代码

2.1 节点代码

  1. 在package的turtlesim_topic文件夹下创建turtlesim_topic.py文件,代码如下 ```python import sys import rclpy from rclpy.node import Node from geometry_msgs.msg import Twist from PyQt5.QtWidgets import QApplication,QWidget,QFormLayout,QLineEdit,QPushButton

class MainWindow(QWidget): def init(self,node): super(MainWindow, self).init() self.node = node self.publisher = node.create_publisher(Twist,’/turtle1/cmd_vel’,10) self.resize(400,120) self.setWindowTitle(‘小乌龟控制’)

  1. # 布局
  2. layout = QFormLayout()
  3. self.setLayout(layout)
  4. # 控件
  5. self.editLinear = QLineEdit()
  6. layout.addRow("线速度", self.editLinear)
  7. self.editAngular = QLineEdit()
  8. layout.addRow("角速度", self.editAngular)
  9. btnSend = QPushButton("发送")
  10. layout.addRow('',btnSend)
  11. # 事件
  12. btnSend.clicked.connect(self.send_twist)# 布局
  13. def send_twist(self):
  14. x = float(self.editLinear.text())
  15. y = float(self.editAngular.text())
  16. data = Twist()
  17. data.linear.x = x
  18. data.angular.z = y
  19. self.node.get_logger().info('send topic')
  20. self.publisher.publish(data)

def main(): rclpy.init() node = Node(‘turtlesim_control’)

  1. app = QApplication(sys.argv)
  2. window = MainWindow(node)
  3. window.show()
  4. result = app.exec_()
  5. node.destroy_node()
  6. rclpy.shutdown()
  7. sys.exit(result)

if name == ‘main‘: main()

  1. <a name="bOuRt"></a>
  2. ## 2.2 添加配置
  3. 1. 打开setup.py文件,在console_scripts节点下添加配置
  4. ```bash
  5. 'turtlesim_topic = turtlesim_topic.turtlesim_topic:main',

3. 编译工程

  1. colcon build

4. 运行节点

  1. source install/setup.bash
  2. ros2 run turtlesim_topic turtlesim_topic_obj