1. 创建package(创建过可省略)
ros2 pkg create --build-type ament_python turtlesim_topic --dependencies geometry_msgs
可以修改package.xml文件如下信息
<description>C++ client server tutorial</description><maintainer email="you@email.com">Your Name</maintainer><license>Apache License 2.0</license>
2. 编写代码
2.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(‘小乌龟控制’)
# 布局layout = QFormLayout()self.setLayout(layout)# 控件self.editLinear = QLineEdit()layout.addRow("线速度", self.editLinear)self.editAngular = QLineEdit()layout.addRow("角速度", self.editAngular)btnSend = QPushButton("发送")layout.addRow('',btnSend)# 事件btnSend.clicked.connect(self.send_twist)# 布局def send_twist(self):x = float(self.editLinear.text())y = float(self.editAngular.text())data = Twist()data.linear.x = xdata.angular.z = yself.node.get_logger().info('send topic')self.publisher.publish(data)
def main(): rclpy.init() node = Node(‘turtlesim_control’)
app = QApplication(sys.argv)window = MainWindow(node)window.show()result = app.exec_()node.destroy_node()rclpy.shutdown()sys.exit(result)
if name == ‘main‘: main()
<a name="bOuRt"></a>## 2.2 添加配置1. 打开setup.py文件,在console_scripts节点下添加配置```bash'turtlesim_topic = turtlesim_topic.turtlesim_topic:main',
3. 编译工程
colcon build
4. 运行节点
source install/setup.bashros2 run turtlesim_topic turtlesim_topic_obj
