3D_6Axis_Robotic_Arm_Simulator with Python-wxPython-OpenGL and OPC-UA [Cyber Twin]

English 简体中文 繁体中文 Tiếng Việt
Summary

A cyber-physical twin simulation system for a 3D 6-Axis Robotic Arm has been developed, leveraging Python, wxPython, OpenGL, and OPC-UA to create a realistic Operational Technology (OT) environment. This system adheres to the ISA-95 automation hierarchy, comprising a Level 0 OpenGL-rendered robot simulator, a Level 1 OPC-UA PLC for control logic, and a Level 2 HMI for supervisory monitoring and remote command execution. It features realistic kinematics, object interaction with simplified physics, and supports both manual and automated control, including an auto-grab function and predefined action sequences. Communication between the simulator and PLC uses UDP, while OPC-UA facilitates robust data exchange and command issuance between the PLC and HMI. This platform provides a safe, scalable, and hardware-independent environment for robotics control development and OT cybersecurity training.

Mục đích thiết kế dự án : Mục tiêu của dự án này là phát triển một hệ thống mô phỏng cặp song sinh ảo-thực dựa trên phần mềm của Cánh tay robot 6 trục 3D trong môi trường OT sử dụng Python, wxPython, OpenGL và giao thức OPC-UA TCP. Thiết kế hệ thống tuân thủ tiêu chuẩn tự động hóa quốc tế ISA-95 (IEC/ISO 62264) và đóng vai trò là một Cyber Twin tinh vi, thu hẹp khoảng cách giữa mô phỏng ảo và tự động hóa công nghiệp.

Hệ thống mô phỏng bao gồm ba mô-đun chính phản ánh hệ thống phân cấp tự động hóa ISA-95: 1. Bộ mô phỏng cánh tay robot (Cấp 0 - Cấp trường), 2. PLC OPC-UA cánh tay robot (Cấp 1 - Cấp điều khiển) và 3. Bộ điều khiển từ xa người dùng (Cấp 2 - Cấp giám sát). Bằng cách tích hợp mô phỏng vật lý thời gian thực với các tiêu chuẩn truyền thông công nghiệp, dự án cung cấp một môi trường an toàn, có khả năng mở rộng để phát triển điều khiển robot và đào tạo an ninh OT.

Bản demo tổng quan hệ thống được hiển thị bên dưới:

Dự án cũng cung cấp chức năng điều khiển tự động cánh tay robot như tự động tìm kiếm và gắp khối lập phương và nó được sử dụng trong một số bài tập an ninh mạng và CTF.

# Author:      Yuancheng Liu
# Created:     2026/01/20
# Version:     v_0.0.3
# Copyright:   Copyright (c) 2026 LiuYuancheng
# License:     MIT License

1. Giới thiệu

Tóm tắt : Sự tiến bộ của sản xuất thông minh và Hệ thống điều khiển công nghiệp (ICS) đã thúc đẩy nhu cầu về các môi trường mô phỏng hệ thống robot thực tế, linh hoạt và an toàn cho cả mục đích phát triển và đào tạo. Đặc biệt, cánh tay robot được sử dụng rộng rãi trong các dây chuyền sản xuất hiện đại, nơi kiểm soát chính xác, giám sát thời gian thực và giao tiếp đáng tin cậy giữa các lớp hệ thống là rất quan trọng. Dự án 3D 6Axis Robotic Arm Simulator with Python–wxPython–OpenGL and OPC-UA này được thiết kế để đáp ứng những nhu cầu này bằng cách cung cấp một môi trường mô phỏng ảo-thực nhẹ nhưng đầy đủ chức năng. Hệ thống cho phép người dùng hình dung, giám sát và điều khiển một cánh tay robot sáu trục trong khi mô phỏng các quy trình làm việc điều khiển và truyền thông công nghiệp thực tế.

1.1 Giới thiệu bối cảnh dự án

Hai năm trước, tôi đã tạo một dự án để điều khiển Cánh tay robot Braccio Plus: https://www.linkedin.com/pulse/braccio-plus-robot-arm-controller-yuancheng-liu-h5gfc, nhưng dự án này cần phần cứng nên khó sử dụng trong các bài tập và đào tạo an ninh mạng vốn cần nhiều hơn một bộ hệ thống.

Ý tưởng cho dự án mô phỏng này được lấy cảm hứng từ khóa học của Giáo sư Liu YaDong "A Robot Simulator Developed by Python, wxPython, VTK with OPC UA Support", vì mã nguồn chương trình khóa học không được công khai và tệp TLS tài nguyên mô hình 3D cho VTK yêu cầu học viên phải mua, tôi đã thực hiện một số sửa đổi thiết kế giao diện người dùng với cách tiếp cận đơn giản hóa và thư viện miễn phí, đồng thời thêm một số chức năng bổ sung:

  • Sử dụng OpenGL để thay thế VTK nhằm xây dựng một cánh tay robot 3D đơn giản hóa trên khung vẽ

  • Một đối tượng khối lập phương và cảm biến vị trí khối lập phương liên quan được giới thiệu để mô phỏng các kịch bản tương tác thực tế

  • Một cơ chế kẹp được triển khai để minh họa các hoạt động gắp và đặt đối tượng (khối lập phương)

Xin chân thành cảm ơn Giáo sư Liu YaDong một lần nữa vì đã chia sẻ nội dung giáo dục gốc trên YouTube. Để tham khảo, loạt hướng dẫn gốc được liệt kê dưới đây:

1.2 Giới thiệu kiến trúc hệ thống

Nền tảng được thiết kế dựa trên kim tự tháp phân cấp tự động hóa ISA-95, mở rộng từ Cấp 0 (thiết bị trường) đến Cấp 4 (hệ thống doanh nghiệp). Triển khai hiện tại tập trung vào Cấp 0–2 như hình dưới đây:

  1. Bộ mô phỏng cánh tay robot (Cấp 0 - Cấp trường) : Mô-đun này cung cấp giao diện hiển thị 3D bằng OpenGL để trực quan hóa cánh tay robot vật lý. Nó mô phỏng các thành phần phần cứng—như cảm biến vị trí khối lập phương, động cơ servo và cảm biến xúc giác—cho phép thực hiện các hành động phức tạp như thao tác đối tượng (ví dụ: các hoạt động "gắp và đặt"). Nó cũng có một bảng điều khiển cục bộ để ghi đè thủ công trực tiếp và trực quan hóa trạng thái thời gian thực.

  2. PLC OPC-UA cánh tay robot (Cấp 1 - Cấp điều khiển) : Hoạt động như bộ não của hoạt động, mô-đun này mô phỏng một Bộ điều khiển logic khả trình công nghiệp (PLC). Nó xử lý dữ liệu cảm biến đến từ bộ mô phỏng và gửi tín hiệu điều khiển trở lại các động cơ ảo, tạo điều kiện cho vòng lặp logic cần thiết cho chuyển động tự động hoặc bán tự động.

  3. Bộ điều khiển HMI từ xa người dùng (Cấp 2 - Cấp giám sát) : Đây là Giao diện người-máy (HMI) dành cho người dùng cuối. Nó thiết lập kết nối an toàn với PLC thông qua giao thức OPC-UA, cho phép giám sát từ xa dữ liệu đo từ xa của cánh tay và thực hiện các lệnh từ xa qua mạng.

1.3 Giới thiệu các trường hợp sử dụng hệ thống

Phiên bản sửa đổi của hệ thống cánh tay robot điều khiển bằng PLC này được sử dụng để xây dựng các thử thách OT trong cuộc thi CTF dưới đây:

CISS 2024 Control The Orthanc Obstacles Challenge :

Deutschland's Bester Hacker 2024 OT Challenge 1 :


2. Thiết kế dự án

Hệ thống được phát triển bằng Python, với wxPython cho giao diện người dùng đồ họa (GUI), OpenGL cho trực quan hóa 3D và OPC UA (IEC 62541) cho truyền thông công nghiệp tiêu chuẩn. Nó được thiết kế để mô phỏng một phần môi trường sản xuất robot Công nghệ vận hành (OT) thực tế bằng cách tích hợp mô phỏng, logic điều khiển và giám sát cấp cao vào một nền tảng thống nhất.

2.1 Mục tiêu thiết kế hệ thống

Thiết kế được định hướng bởi các mục tiêu chính sau:

  • Mô phỏng hành vi OT thực tế : Tái tạo động lực học của một cánh tay robot điều khiển bằng động cơ servo, bao gồm động học đa khớp, phản hồi cảm biến và phản ứng của bộ truyền động. Trực quan hóa 3D cung cấp một biểu diễn trực quan về chuyển động của robot và tương tác với các đối tượng.

  • Cho phép giám sát và điều khiển từ xa : Hỗ trợ trao đổi dữ liệu và điều khiển thời gian thực thông qua OPC UA, cho phép người dùng giám sát trạng thái hệ thống và đưa ra lệnh từ Giao diện người-máy (HMI) từ xa.

  • Hỗ trợ đào tạo an ninh mạng OT : Cung cấp một môi trường được kiểm soát và quan sát được để phân tích các mẫu truyền thông công nghiệp, kiểm tra phát hiện bất thường và mô phỏng các cuộc tấn công tiềm năng vào tương tác PLC–HMI.

2.2 Tổng quan quy trình làm việc của hệ thống

Quy trình làm việc tổng thể của hệ thống được thể hiện trong sơ đồ dưới đây, được cấu trúc trên ba lớp OT: Cấp 0 (mô phỏng), Cấp 1 (điều khiển PLC) và Cấp 2 (điều khiển giám sát).

2.2.1 Cấp 0 → Cấp 1: Mô phỏng dữ liệu cảm biến (Mô phỏng I/O dựa trên UDP)

  • Bộ mô phỏng cánh tay robot 3D (phần màu xanh lam nhạt) liên tục tạo ra dữ liệu trường mô phỏng, bao gồm: Vị trí khối lập phương (cảm biến vị trí mặt đất) và Góc quay khớp (đế, vai, khuỷu tay, cổ tay, kẹp). Các giá trị này được truyền đến mô-đun PLC bằng cách sử dụng các thông điệp UDP, mô phỏng việc thu thập tín hiệu điện hoặc analog trong thế giới thực từ các cảm biến vật lý.

  • Ở phía PLC OPC-UA (Cấp 1), dữ liệu UDP đến được ánh xạ tới PLC local input variables, sau đó các biến được lưu trữ trong không gian địa chỉ OPC UA (UA Namespace / UA Objects), cho loại lưu trữ dữ liệu UA: UA-Int16 → giá trị tọa độ khối lập phương, UA-Float → góc khớp, UA-Bool → trạng thái cảm biến áp suất kẹp.

2.2.2 Cấp 1: Ra quyết định của PLC và thực thi logic bậc thang

Mô-đun PLC hoạt động như công cụ điều khiển cốt lõi. Nó được triển khai bằng cách sử dụng Virtual PLC Simulation framework tôi đã phát triển trước đây. Mô-đun hỗ trợ: thực thi logic bộ cộng và chức năng máy chủ OPC UA. Vòng lặp điều khiển hoạt động theo các bước dưới đây:

  • Bước 1: Đọc giá trị cảm biến hiện tại (ví dụ: góc khớp)

  • Bước 2: So sánh với các giá trị mục tiêu (từ HMI hoặc chuỗi được xác định trước)

  • Bước 3: Thực thi logic điều khiển để xác định chuyển động cần thiết

  • Bước 4: Tạo tín hiệu điều khiển đầu ra (lệnh động cơ servo)

Ví dụ nếu target shoulder anglecurrent angle, PLC liên tục gửi tín hiệu điều chỉnh cho đến khi phản hồi cảm biến khớp với vị trí mong muốn. Các tín hiệu điều khiển thu được được truyền trở lại bộ mô phỏng qua UDP, mô phỏng các tín hiệu điều khiển bộ truyền động đến động cơ servo.

2.2.3 Cấp 1 → Cấp 2: Giao tiếp OPC UA

PLC hiển thị tất cả dữ liệu liên quan thông qua một máy chủ OPC UA (OPC-UA-TCP), bao gồm: Góc khớp, Vị trí khối lập phương, Trạng thái kẹp và Lệnh điều khiển. Sau đó, HMI/Bộ điều khiển Cấp 2 kết nối như một máy khách OPC UA và định kỳ truy xuất các giá trị cập nhật.

2.2.4 Cấp 2: Điều khiển giám sát và trực quan hóa

Mô-đun SCADA/HMI cung cấp giao diện người dùng để giám sát và điều khiển, các chức năng chính bao gồm:

  • Trực quan hóa thời gian thực: Góc khớp được hiển thị trong biểu đồ 6 trục, Vị trí khối lập phương được ánh xạ lên hình chiếu mặt đất 2D và Giám sát trạng thái hệ thống.

  • Điều khiển thủ công: Người dùng có thể điều chỉnh từng góc khớp thông qua thanh trượt, sau đó các lệnh điều khiển động cơ được gửi đến PLC thông qua OPC UA.

  • Điều khiển tự động (Thực thi quỹ đạo): Người dùng có thể tải các chuỗi hành động được xác định trước và hệ thống thực hiện các hoạt động gắp và đặt lặp lại.

  • Tính toán chuyển động: Bộ điều khiển ước tính liệu cánh tay robot có thể tiếp cận khối lập phương mục tiêu hay không và tính toán các góc khớp để tiếp cận khối lập phương.

 


3. Triển khai bộ mô phỏng cánh tay robot

Phần này mô tả chi tiết việc triển khai Bộ mô phỏng cánh tay robot, đại diện cho Level 0 (physical/field layer) của hệ thống. Bộ mô phỏng được phát triển bằng cách sử dụng:

  • wxPython → cho khung GUI chính để lưu trữ cảnh 3D và tương tác với hành động của người dùng.

  • OpenGL (GL / GLU / GLUT) → cho việc hiển thị cánh tay robot 3D và cảnh thời gian thực.

Bố cục giao diện người dùng tổng thể và các thành phần chức năng được hiển thị bên dưới:

Mô-đun có thể chạy độc lập với các thành phần hệ thống khác. Một bảng điều khiển cục bộ tích hợp cho phép người dùng trực tiếp điều khiển cánh tay robot, làm cho nó phù hợp cho việc kiểm tra độc lập, gỡ lỗi và trình diễn.

3.1 Triển khai mô-đun cảnh 3D

Cánh tay robot 3D bao gồm 4 liên kết hình trụ với độ dài khác nhau và các khớp robot đa trục (đế, vai, khuỷu tay, cổ tay và kẹp) với phạm vi quay. Người dùng có thể điều chỉnh độ dài của các liên kết trong tệp toàn cục.

3.1.1 Các liên kết hình trụ của cánh tay robot

Cánh tay robot được mô hình hóa như một chuỗi động học bao gồm bốn liên kết cứng được kết nối lần lượt:

Chỉ số liên kết Màu sắc Kết nối Cơ sở quay Chiều dài
Link-00 Đỏ Đế → Vai Đế 2.0 đơn vị
Link-01 Xanh lá Vai → Khuỷu tay Vai 1.5 đơn vị
Link-02 Xanh dương Khuỷu tay → Cổ tay Khuỷu tay 1.0 đơn vị
Link-03 Vàng Cổ tay → Kẹp Cổ tay 0.5 đơn vị

3.1.2 Mô hình hóa khớp và bộ truyền động

Cánh tay robot bao gồm sáu trục có thể điều khiển, mỗi trục được liên kết với: một cảm biến góc mô phỏng (phản hồi), Một động cơ servo (bộ truyền động), Một phạm vi quay được xác định và động cơ có thể được điều khiển trực tiếp thông qua thanh trượt điều khiển UI tương ứng trong bảng điều khiển.

Trục Chức năng Bề mặt Cảm biến Bộ truyền động Phạm vi Điều khiển UI
Axis-0 Xoay đế X - Y Angle Sensor 01 Servo Motor 01 (-180°, 180°) Thanh trượt đế
Axis-1 Xoay vai Y - Z Angle Sensor 02 Servo Motor 02 (-90°, 90°) Thanh trượt vai
Axis-2 Xoay khuỷu tay Y - Z Angle Sensor 03 Servo Motor 03 (-180°, 180°) Thanh trượt khuỷu tay
Axis-3 Xoay cổ tay Y - Z Angle Sensor 04 Servo Motor 04 (-90°, 90°) Thanh trượt cổ tay
Axis-4 Xoay kẹp X - Y Angle Sensor 05 Servo Motor 05 (-180°, 180°) Thanh trượt xoay kẹp
Axis-5 Mở/đóng kẹp   Angle Sensor 06 Servo Motor 06 (0°, 100°) Thanh trượt mở kẹp

Để đơn giản hóa mô phỏng và tránh mô hình hóa vật lý phức tạp, kẹp được giới hạn luôn hướng xuống dọc theo trục Z. Điều này đảm bảo tương tác đối tượng ổn định (với đối tượng khối lập phương) mà không yêu cầu một công cụ vật lý đầy đủ.

3.2 Triển khai chức năng vận hành

Tất cả các phép biến đổi khớp cánh tay robot được áp dụng tuần tự, tạo thành một chuỗi động học thuận hoàn chỉnh để cập nhật tư thế thời gian thực. Trong phần này, chúng tôi cũng thêm một số chức năng mô phỏng vật lý để triển khai động lực học va chạm hoặc mô phỏng trọng lực trong OpenGL.

3.2.1 Tương tác đối tượng: Cơ chế gắp và thả

Bộ mô phỏng triển khai một logic nắm bắt đơn giản nhưng hiệu quả khi vị trí kẹp nằm trong khoảng cách ngưỡng 0.04 đơn vị của khối lập phương:

  • Hành động đóng kẹp kích hoạt một quy trình kiểm tra cảm biến áp suất ảo.

  • Nếu cả hai ngón kẹp “chạm” vào bề mặt khối lập phương khi động cơ kẹp ngừng đóng, nó sẽ kích hoạt cảm biến áp suất ngón kẹp.

  • Sau khi cảm biến áp suất được kích hoạt, khối lập phương được coi là đã được nắm thành công và gắn vào kẹp, sau đó di chuyển theo kẹp.

  • Sau đó, màu của khối lập phương chuyển sang màu cam để chỉ ra việc nắm thành công (Như thể hiện trong sơ đồ dưới đây)

3.2.2 Thuật toán mô phỏng trọng lực khối lập phương

Một mô hình trọng lực khối lập phương nhẹ, hiệu quả về mặt hình ảnh được triển khai trong vòng lặp hiển thị chính:

  • Nếu khối lập phương không được gắn vào kẹp: Vị trí trục Z của nó giảm dần.

  • Chuyển động tiếp tục cho đến khi khối lập phương chạm mặt phẳng đất.

3.2.3 Phản hồi cảm biến và bảng giám sát cục bộ

  • Bộ mô phỏng liên tục tính toán và hiển thị: Vị trí đầu cuối kẹp (được tính toán thông qua động học thuận), Vị trí khối lập phương (đọc từ cảm biến mặt đất) và Góc khớp cùng trạng thái kẹp.

  • Tất cả các giá trị được cập nhật theo thời gian thực và hiển thị trong bảng điều khiển cục bộ, cho phép người dùng quan sát các thay đổi trạng thái hệ thống trong quá trình vận hành.

  • Một chức năng đặt lại cũng được cung cấp để khôi phục mô phỏng về trạng thái ban đầu.

3.2.4 Giao diện Giao tiếp Ngoài (UDP API)

  • Để tích hợp với các module cấp cao hơn, trình mô phỏng bao gồm một luồng máy chủ UDP xử lý: Truyền dữ liệu cảm biến (dây mô phỏng kết nối với tiếp điểm đầu vào PLC) và các lệnh điều khiển động cơ (dây mô phỏng kết nối với cuộn dây đầu ra PLC).

  • Ngoài ra, người dùng có thể phát triển các chương trình tùy chỉnh để tương tác với trình mô phỏng thông qua API được cung cấp trong Thư viện: lib/physicalWorldComm.py để gửi lệnh điều khiển, truy xuất dữ liệu cảm biến, giám sát trạng thái hệ thống.

 


4. Triển khai OPC-UA PLC

Module OPC-UA PLC đại diện cho Cấp 1 (Lớp Điều khiển) của hệ thống và đóng vai trò là đơn vị ra quyết định trung tâm. Nó chịu trách nhiệm xử lý dữ liệu cảm biến, thực thi logic điều khiển và điều phối giao tiếp giữa trình mô phỏng vật lý (Cấp 0) và bộ điều khiển giám sát (Cấp 2). Điều khiển logic bậc thang, lưu trữ dữ liệu UA và quy trình của module mô phỏng OPC-UA PLC được triển khai với dự án Python Virtual PLC Simulator with IEC 62541 OPC-UA-TCP Communication Protocol . Để biết chi tiết, bạn có thể kiểm tra liên kết này: https://github.com/LiuYuancheng/PLC_and_RTU_Simulator/tree/main/OPCUA_PLC_Simulator

4.1 Bảng Biến OPC UA

Đối tượng UA Tên Biến UA_Type PLC I/O Type Thành phần mô phỏng liên quan
RobotArmCtrl - VN_GRIPPER_CTRL gripperCtrl UA-Bool PLC Input Cảm biến áp suất kẹp
RobotArmCtrl - VN_CUBE_POS_X cubePosX UA-Float PLC Input Cảm biến vị trí khối lập phương
RobotArmCtrl - VN_CUBE_POS_Y cubePosY UA-Float PLC Input Cảm biến vị trí khối lập phương
RobotArmCtrl - VN_CUBE_POS_Z cubePosZ UA-Float PLC Input Cảm biến vị trí khối lập phương
RobotArmCtrl - VN_ARM_ANGLE_1 armAngle1 UA-Float PLC Input Cảm biến góc quay đế
RobotArmCtrl - VN_ARM_ANGLE_2 armAngle2 UA-Float PLC Input Cảm biến góc quay vai
RobotArmCtrl - VN_ARM_ANGLE_3 armAngle3 UA-Float PLC Input Cảm biến góc quay khuỷu tay
RobotArmCtrl - VN_ARM_ANGLE_4 armAngle4 UA-Float PLC Input Cảm biến góc quay cổ tay
RobotArmCtrl - VN_ARM_ANGLE_5 armAngle5 UA-Float PLC Input Cảm biến góc quay kẹp
RobotArmCtrl - VN_ARM_ANGLE_6 armAngle6 UA-Float PLC Input Cảm biến góc mở/đóng kẹp
RobotArmCtrl - VN_MOTOR1_CTRL motor1Ctrl UA-Int16 PLC Output Servo Motor 01
RobotArmCtrl - VN_MOTOR2_CTRL motor2Ctrl UA-Int16 PLC Output Servo Motor 02
RobotArmCtrl - VN_MOTOR3_CTRL motor3Ctrl UA-Int16 PLC Output Servo Motor 03
RobotArmCtrl - VN_MOTOR4_CTRL motor4Ctrl UA-Int16 PLC Output Servo Motor 04
RobotArmCtrl - VN_MOTOR5_CTRL motor5Ctrl UA-Int16 PLC Output Servo Motor 05
RobotArmCtrl - VN_MOTOR5_CTRL motor6Ctrl UA-Int16 PLC Output Servo Motor 06
HMIRequest - VN_Motor1_TGT motor1Target UA-Int16 N.A N.A (Yêu cầu từ Bộ điều khiển Từ xa)
HMIRequest - VN_Motor2_TGT motor2Target UA-Int16 N.A N.A (Yêu cầu từ Bộ điều khiển Từ xa)
HMIRequest - VN_Motor3_TGT motor3Target UA-Int16 N.A N.A (Yêu cầu từ Bộ điều khiển Từ xa)
HMIRequest - VN_Motor4_TGT motor4Target UA-Int16 N.A N.A (Yêu cầu từ Bộ điều khiển Từ xa)
HMIRequest - VN_Motor5_TGT motor4Target UA-Int16 N.A N.A (Yêu cầu từ Bộ điều khiển Từ xa)
HMIRequest - VN_Motor6_TGT motor6Target UA-Int16 N.A N.A (Yêu cầu từ Bộ điều khiển Từ xa)

4.2 Chu kỳ Đồng hồ Điều khiển PLC

PLC hoạt động trong một vòng lặp thực thi chu kỳ định kỳ, tương tự như các bộ điều khiển công nghiệp thực tế. Mỗi chu kỳ đồng hồ bao gồm thu thập dữ liệu, xử lý và cập nhật đầu ra. Quy trình làm việc được thể hiện trong sơ đồ quy trình dưới đây:

  • Thu thập Dữ liệu Đầu vào (Lấy dữ liệu cảm biến): PLC mô phỏng việc thu thập dữ liệu trường bằng cách lấy tọa độ khối lập phương 3D hiện tại và dữ liệu cảm biến góc khớp 6 trục từ trình mô phỏng cánh tay robot.

  • Cập nhật Máy chủ OPC-UA (Đồng bộ hóa biến): Dữ liệu cảm biến đã lấy được ánh xạ tới các biến nội bộ và đẩy lên máy chủ OPC-UA để đảm bảo "Bản sao số" phản ánh trạng thái vật lý.

  • Khởi tạo Một lần (Đồng bộ hóa tham số): Trong chu kỳ đầu tiên (initFlag), hệ thống đồng bộ hóa tất cả các tham số điều khiển nội bộ với máy chủ OPC-UA để đảm bảo các trạng thái khởi đầu nhất quán.

  • Thực thi Logic Điều khiển (Đọc & So sánh): PLC đọc các giá trị điều khiển mục tiêu (ví dụ: góc động cơ mong muốn hoặc trạng thái kẹp) từ máy chủ OPC-UA và so sánh chúng với trạng thái nội bộ cục bộ của nó.

  • Phát hiện Thay đổi (Đặt cờ): Nếu phát hiện sự khác biệt giữa giá trị mục tiêu OPC-UA và trạng thái cục bộ, PLC kích hoạt các cờ nội bộ (sendArmCtrlFlag hoặc sendGripperCtrlFlag) để chỉ ra rằng cần cập nhật.

  • Cập nhật Đầu ra (Ra lệnh cho bộ truyền động): Nếu các cờ được đặt, PLC gửi tín hiệu lệnh (tin nhắn UDP) trở lại Trình mô phỏng Cánh tay Robot 3D để điều chỉnh động cơ servo hoặc trạng thái kẹp.


5. Triển khai Bộ điều khiển Từ xa HMI

Bộ điều khiển Từ xa HMI đại diện cho Cấp 2 (Lớp Giám sát) của hệ thống. Nó cung cấp cho người dùng một giao diện tương tác để giám sát trạng thái hệ thống, đưa ra lệnh điều khiển và thực hiện các hoạt động robot tự động thông qua giao tiếp OPC-UA-TCP với PLC (như đã giới thiệu trong phần thiết kế Dự án). Tôi đã tái sử dụng một phần chức năng và bảng UI trong dự án Smart Braccio ++ IoT Robot Emulator của tôi.

Giao diện của bộ điều khiển được phát triển bằng wxPython và bố cục UI chính được hiển thị dưới đây:

Chức năng UI chính bao gồm:

  • Bảng Kết nối PLC : Cho phép lựa chọn giao thức giao tiếp (ví dụ: OPC-UA TCP, OPC-UA HTTP, UDP) và hiển thị trạng thái kết nối thời gian thực.

  • Hiển thị Vị trí Chiếu Khối lập phương trên Mặt đất : Vị trí chiếu X-Y của khối lập phương trên mặt đất và phạm vi tối đa mà cánh tay có thể chạm tới.

  • Bảng Trực quan hóa Góc Khớp : 6 Bảng để hiển thị góc cảm biến và động cơ của 6 khớp trục bằng cách sử dụng đồng hồ đo tròn và phạm vi quay tối đa, "Kim xanh" cho giá trị đọc cảm biến và "Kim vàng" cho góc động cơ mục tiêu hiện tại.

  • Thanh trượt Điều khiển Động cơ Servo và Nút Điều khiển : Điều chỉnh thủ công từng động cơ điều khiển khớp, Đặt lại trạng thái mô phỏng, kích hoạt chức năng tự động lấy khối lập phương và Tải/Thực thi các chuỗi hành động được xác định trước.

5.1 Ánh xạ Vị trí Khối lập phương và Tự động Lấy

Để tự động tìm kiếm và lấy các đối tượng trong cảnh, bộ điều khiển sử dụng vị trí mặt đất của khối lập phương (x, y) để ước tính các góc khớp cần thiết để làm cho kẹp cánh tay đạt đến vị trí (khu vực trong ngưỡng, khoảng cách ngưỡng hiện tại = 0.04 đơn vị). Thuật toán chính để tính toán bốn góc theta được hiển thị dưới đây:

Thuật toán tính toán tham số chính được hiển thị dưới đây:

  • Góc Quay Đế (Axis-0) : Góc đế được tính bằng θ₀ = arctan(y / x) (If x = 0 and y > 0 → θ₀ = 90° and If x = 0 and y < 0 → θ₀ = -90°)

  • Tính toán Khoảng cách : Khoảng cách khối lập phương đến đế cánh tay robot k = √(x² + y²)

  • Góc Quay Vai (Axis-1) : θ₁, ground projection distance a = cos( θ₁ ) × 1.5

  • Góc Quay Khuỷu tay (Axis-2) : θ₂, ground projection distance b = cos( θ₁ + θ₂) × 1.0

  • Góc Quay Cổ tay (Axis-3) : θ₃, ground projection distance c = cos( θ₁ + θ₂ + θ₃) × 0.5

  • Mối quan hệ Khoảng cách Trục X: Distance k'≈ a + b + c

  • Khoảng cách Chiếu Trục Z 1: d = sin( θ₁ ) x 1.5

  • Khoảng cách Chiếu Trục Z 2 : e = sin( θ₁+ θ₂ ) x 1.0

  • Khoảng cách Chiếu Trục Z 3 : f = sin( θ₁+ θ₂+ θ₃ ) x 0.5

  • Mối quan hệ Khoảng cách Trục Z : khoảng cách đế cánh tay 2 ≈ d + e + f

Các bước chi tiết để tính toán góc được hiển thị dưới đây, Tôi đã sử dụng scipy fsolve để nhanh chóng tìm ra một giá trị khả thi :

Các bước vận hành chi tiết để lấy đối tượng khối lập phương được hiển thị dưới đây:

  • Đọc vị trí chiếu khối lập phương trên mặt đất từ OPC-UA PLC sau đó tính toán xem nó có nằm trong khu vực có thể tiếp cận được hay không.

  • Nếu đối tượng khối lập phương có thể tiếp cận được, thì tính toán các góc khớp cần thiết θ₀, θ₁, θ₂, θ₃ .

  • Gửi lệnh thay đổi mục tiêu góc động cơ đến PLC để thực hiện chuỗi chuyển động.

  • Khi cảm biến cánh tay cho thấy cánh tay ở đúng vị trí, gửi lệnh đóng kẹp để lấy khối lập phương.

Một minh họa về quy trình này được hiển thị dưới đây (Người dùng có thể kích hoạt chức năng này thông qua nút “Tự động Lấy Khối lập phương”):

5.2 Thực thi Chuỗi Hành động Được Xác định Trước

Bộ điều khiển hỗ trợ tải và lặp lại thực thi các chuỗi chuyển động được xác định trước từ cấu hình JSON.

Tệp JSON Danh sách Tác vụ Ví dụ:

[('grip', '220'), ('base', '90'), ('shld', '155'), ('elbw', '90'), ('wrtP', '205'), ('wrtR', '150'),('grip', '160'),('elbw', '130'),('base', '180'),('grip', '220'),]

Luồng Thực thi:

  • Người dùng tạo tệp JSON chuỗi và đặt nó vào thư mục "src/robotArmController/Scenarios".

  • Nhấn nút “Thực thi Kịch bản”, sau đó bộ điều khiển sẽ gửi từng lệnh một đến PLC. Đối với khoảng thời gian thực thi lệnh, nó đợi mỗi chuyển động hoàn thành sau đó tiến hành hành động tiếp theo.


6. Thiết lập và Sử dụng Hệ thống

Để biết cấu hình và cách sử dụng hệ thống, vui lòng tham khảo tài liệu hướng dẫn sử dụng:

https://github.com/LiuYuancheng/Python_3D_6Axis_Robotic_Arm_Simulator/blob/main/System_Usage_Manual.md

 


7. Tóm tắt và Tham khảo

Video Tóm tắt Dự án: https://youtu.be/Id3tBvNlzc4?si=pdiII1w45f2kjvS1

Trình mô phỏng Cánh tay Robot 6 Trục 3D đã trình bày thành công sự tích hợp giữa trực quan hóa hiệu suất cao và giao tiếp tiêu chuẩn công nghiệp trong một Hệ thống Vật lý-Không gian mạng mô-đun. Bằng cách căn chỉnh kiến trúc với hệ thống phân cấp ISA-95, dự án tạo ra một môi trường thực tế nơi vật lý Cấp 0, logic PLC Cấp 1 và tương tác SCADA/HMI Cấp 2 cùng tồn tại liền mạch. Việc sử dụng Python, wxPython, và OpenGL cho phép mô phỏng nhẹ nhưng mạnh mẽ về động học phức tạp và phản hồi cảm biến, trong khi việc triển khai OPC-UA đảm bảo hệ thống vẫn phù hợp cho sản xuất thông minh hiện đại và nghiên cứu an ninh mạng OT. Cuối cùng, trình mô phỏng này đóng vai trò là một nền tảng dễ tiếp cận, độc lập với phần cứng để các nhà phát triển kiểm tra thuật toán điều khiển và các chuyên gia bảo mật khám phá các lỗ hổng giao thức công nghiệp trong một môi trường thử nghiệm an toàn, được kiểm soát.

Dự án và Tham khảo Chính liên quan:

 

Kho Mã nguồn Dự án: https://github.com/LiuYuancheng/Python_3D_6Axis_Robotic_Arm_Simulator

Thanks for spending time to check the article detail, if you have any question and suggestion or find any program bug, please feel free to message me. Many thanks if you can give some comments and share any of the improvement advice so we can make our work better ~


Last edited by LiuYuancheng ([email protected]) at 20/02/2026, if you have any question please free to message me.

 

  RELATED

No related programming articles found. Browse all programming tutorials and articles.

  COMMENTS

0

No comment for this article.