22、机器人系统数字孪生:提升工业能力

机器人系统数字孪生:提升工业能力

1. 相关工作
1.1 提出的框架

构建了一个机器人架构的数字副本,它分为两个组件:虚拟部分和真实部分。
- 虚拟元素 :是基于Unity平台构建的软件。
- 真实部分 :使用两个内置编码器的伺服电机来代表机器人的两个关节,这两个电机通过PID控制器进行控制。此外,还使用集成了ROS的Jetson Nano作为中央处理器。虚拟元素和真实部分通过TCP套接字协议套件相互连接。

Jetson Nano是一款小型但功能强大的计算机,能够并行运行多个神经网络,适用于图像分类、目标检测、分割和语音处理等应用。它功耗低于5W,能提供472 GFLOPS的计算能力以快速运行现代AI算法,具备64位ARM四核CPU、板载128核NVIDIA GPU以及4GB的LPDDR4内存,可并行运行多个神经网络并同时处理多个高分辨率传感器。

用户可以在虚拟模型和真实模型之间进行双向控制:
- 从虚拟到真实模型的控制过程 :当用户通过Unity控制器更改机器人的关节位置时,匹配角度数据将通过中央处理器发送。中央处理器会计算正向运动学以确定机械臂末端的位置。然后,虚拟机器人模型会控制匹配角度,并将数据提供给用户界面以显示关节角度值和机器人机械臂端点的坐标。最后,数据将通过TCP套接字协议套件发送到物理机器人以控制真实模型。
- 从真实到虚拟对象的控制过程 :与上述过程相反,从ROS的控制器开始,在此过程中,Unity端的控制器将被忽略。

以下是系统架构的mermaid流程图:

graph LR
    classDef process fill:#E5F6FF,stroke:#73A6FF,stroke-width:2px;
    A(Unity平台 - 虚拟模型):::process -->|TCP套接字协议| B(Jetson Nano - ROS):::process
    B -->|UART| C(Arduino - 真实模型):::process
    C -->|UART| B
    B -->|TCP套接字协议| A
1.2 虚拟环境

使用Unity平台来构建和开发虚拟环境。Unity是一款专门用于游戏开发的软件,因此构建虚拟环境相对容易,并且它还支持虚拟现实和增强现实,有利于系统的未来发展。构建虚拟环境的步骤如下:
1. 使用可用工具和其他图形软件(如Blender)构建虚拟环境的对象。
2. 为机器人设置数据通信、运动学和旋转控制器等功能。
3. 从ABB主页下载ABB IRB 120机器人模型的详细信息。
4. 编辑并拼接各个部分,形成ABB IRB 120机器人。
5. 为机器人模型的每个关节设置坐标轴。
6. 设置模型的参数。
7. 将模型导出为URDF文件并存储在项目所在的目录中。
8. 将该模型导入Unity虚拟环境。

在虚拟环境中,中央处理器会处理数据、将数据存储在本地内存中并将数据传输到真实模型,同时控制器帮助用户更改角度。该虚拟环境支持数据可视化、监控和控制。

2. 方法:机器人手臂关节角度的数字孪生
2.1 比较逆运动学算法与Robot Studio

构建逆运动学算法后,将其与Unity、MATLAB和Robot Studio进行比较。发现Unity、自建算法和Robot Studio的坐标是互换的,关节值的误差非常小,这些误差是由于算法计算中的舍入过程导致的。结果表明,逆运动学计算在可接受的误差范围内是有效的。以下是测试得到的逆运动学评估表:
| No | 机械臂端点坐标 | 旋转角度 (°) | | | | | | 软件 |
| — | — | — | — | — | — | — | — | — |
| | | 关节1 | 关节2 | 关节3 | 关节4 | 关节5 | 关节6 | |
| 1 | X: 374
RX: 0
Y: 137.47
RY: 90
Z: 479.39
RZ: 90 | 24.48
24.47
24.48 | 6.8
6.8
6.8 | 20.96
20.96
20.96 | 44.34
44.34
44.34 | -36.35
-36.35
-36.35 | -38.21
-38.21
-38.21 | Robot Studio
Unity
MATLAB |
| 2 | X: 374
RX: 0
Y: -239.4
RY: 90
Z: 479.39
RZ: 90 | -38.4
-38.4
-38.4 | 17.87
17.87
17.87 | 7.78
7.78
7.78 | -61.37
-61.37
-61.37 | -45.05
-45.05
-45.05 | 52.3
52.3
52.3 | Robot Studio
Unity
MATLAB |
| 3 | X: 420.12
RX: 0
Y: -147.3
RY: 90
Z: 654.72
RZ: 90 | -22.93
-22.93
-22.93 | 19.01
19.01
19.01 | -26.64
-26.64
-26.64 | 72.59
72.59
72.59 | 24.1
24.1
24.1 | -71.04
-71.04
-71.04 | Robot Studio
Unity
MATLAB |
| 4 | X: 420.12
RX: 0
Y: 165.37
RY: 90
Z: 654.72
RZ: 90 | 25.41
25.41
25.41 | 20.95
20.95
20.95 | -29.2
-29.2
-29.2 | -73.21
-73.21
-73.21 | 26.63
26.63
26.63 | 71.34
71.34
71.34 | Robot Studio
Unity
MATLAB |
| 5 | X: 535.17
RX: 0
Y: -115.5
RY: 90
Z: 516.22
RZ: 90 | -14
-14
-14 | 38.4
38.4
38.4 | -28.05
-28.05
-28.05 | -54.23
-54.23
-54.23 | -17.35
-17.35
-17.35 | 52.96
52.96
52.96 | Robot Studio
Unity
MATLAB |
| 6 | X: 389.93
RX: 0
Y: 158.43
RY: 90
Z: 718.23
RZ: 90 | 26.49
26.49
26.49 | 22.06
22.06
22.06 | -44.05
-44.05
-44.05 | -53.08
-53.08
-53.08 | 33.91
33.91
33.91 | 47.84
47.84
47.84 | Robot Studio
Unity
MATLAB |
| 7 | X: 454.39
RX: 0
Y: -177.3
RY: 90
Z: 592.51
RZ: 90 | -24.88
-24.88
-24.88 | 25.73
25.73
25.73 | -23.7
-23.7
-23.7 | -85.64
-85.64
-85.64 | -24.95
-24.95
-24.95 | 85.19
85.19
85.19 | Robot Studio
Unity
MATLAB |

2.2 构建PID控制器

构建PID控制器的目的是控制电机的旋转角度,使用了行星GP36行星减速器直流伺服电机,减速比为1:27,转速为145 rpm,集成了500 CPR(每转脉冲数)的光学编码器和A - B两个通道。

从脉冲计数到角度的转换公式为:
[
\alpha(x) = \frac{p}{c \times r \times 360} = \frac{p}{500 \times 27 \times 360} = \frac{p}{37.5}
]

电机的PID控制器包含三个参数:Kp、Ki和Kd,这些参数通过手动调整实验确定,分别为Kp = 0.01、Ki = 0.002和Kd = 0.001。通过PID算法确定要供应给电机的电压(期望电压值),公式如下:
[
U = K_p \times e + K_i \times (e_{pre} + e \times (t - t_{pre})) + K_d \times \frac{e - e_{pre}}{t - t_{pre}}
]
其中,Kp、Ki、Kd分别为上述声明的PID系数,t是当前采样时间,tpre是上一采样时间,单位为秒(s),e是期望电机角度(p)与当前电机角度(pcur)之间的误差,epre是上一次的误差。
[
e = p - p_{cur}
]

由于电机驱动器的电源(UPow)为12V,微控制器为8位,将电压转换为控制脉冲(Pwm)的公式为:
[
Pwm = U \times \frac{255}{U_{Pow}} = U \times \frac{255}{12} = U \times 21.25
]

2.3 真实和虚拟模型之间的双向数据传输

在Jetson Nano上安装ROS,并设置节点和主题,以在Arduino和ROS之间以及ROS和Unity之间传输和接收数据。ROS作为中介,支持Arduino和Unity之间的数据收发。使用TCP套接字协议在ROS和Unity之间进行双向数据传输,使用UART在ROS和Arduino之间进行双向数据传输。作为ROS节点运行的TCP端点有助于在Unity和ROS之间传递消息,传递的消息预计会像ROS内部序列化的那样进行序列化。

机器人系统数字孪生:提升工业能力

3. 实验与结果
3.1 比较正向运动学算法与Robot Studio

构建正向运动学算法后,将其与Unity和Robot Studio进行比较。发现Unity、自建算法和Robot Studio的坐标是互换的,具体来说,Unity的X轴对应算法和Robot Studio的Y轴,Unity的Y轴对应算法和Robot Studio的Z轴,Unity的Z轴对应算法的X轴和Robot Studio的Y轴。得到的值误差非常小,这些误差是由于算法计算中的舍入过程导致的,这证明了算法的可行性。以下是测试得到的正向运动学评估表:
| No | 关节1 - 3 | 关节4 - 6 | PX | PY | PZ | 软件 |
| — | — | — | — | — | — | — |
| 1 | Joint1: 0
Joint2: 0
Joint3: 0 | Joint4: 0
Joint5: 0
Joint6: 0 | 374 | 374 | 374 | Robot Studio |
| | | | 0 | 630 | 0 | Unity |
| | | | 630 | 0 | 630 | MATLAB |
| 2 | Joint1: 10
Joint2: 30
Joint3: 15 | Joint4: 100
Joint5: 60
Joint6: 0 | 413.94 | 135.34 | 414 | Robot Studio |
| | | | 135.37 | 413.94 | 135 | Unity |
| | | | 341.91 | 341.98 | 341 | MATLAB |
| 3 | Joint1: 10.46
Joint2: -18.76
Joint3: 6.02 | Joint4: 5.59
Joint5: 25.7
Joint6: 2.86 | 257.61 | 50.61 | 258 | Robot Studio |
| | | | 135.37 | 257.64 | 51 | Unity |
| | | | 341.91 | 665.05 | 665 | MATLAB |
| 4 | Joint1: 20
Joint2: 25
Joint3: 30 | Joint4: 35
Joint5: 40
Joint6: 45 | 315.36 | 143.03 | 315 | Robot Studio |
| | | | 143.01 | 315.35 | 143 | Unity |
| | | | 260.52 | 260.54 | 260 | MATLAB |
| 5 | Joint1: 21
Joint2: 30
Joint3: 24 | Joint4: 15
Joint5: 10
Joint6: 18 | 373.27 | 146.74 | 373 | Robot Studio |
| | | | 146.74 | 373.25 | 147 | Unity |
| | | | 256.2 | 256.19 | 255 | MATLAB |
| 6 | Joint1: 26
Joint2: 24
Joint3: 20 | Joint4: 18
Joint5: 55
Joint6: 60 | 321.37 | 177.03 | 321 | Robot Studio |
| | | | 176.99 | 321.39 | 177 | Unity |
| | | | 308.18 | 307.44 | 307 | MATLAB |
| 7 | Joint1: 71
Joint2: 58
Joint3: 56 | Joint4: 30
Joint5: 100
Joint6: 90 | 5.24 | 124.13 | 5 | Robot Studio |
| | | | 124.12 | 525 | 124 | Unity |
| | | | 165.12 | 165.11 | 165 | MATLAB |
| 8 | Joint1: -131.53
Joint2: 5.04
Joint3: 22.36 | Joint4: -63.18
Joint5: 31.64
Joint6: -70.25 | -270.96 | -255.33 | -271 | Robot Studio |
| | | | -255.13 | -271.17 | -255 | Unity |
| | | | 438.77 | 438.036 | 438 | MATLAB |
| 9 | Joint1: -29.44
Joint2: -47.9
Joint3: -18.86 | Joint4: -90.96
Joint5: 39.75
Joint6: 76.07 | -130.88 | 21.15 | -131 | Robot Studio |
| | | | 21.01 | -131.12 | 21 | Unity |
| | | | 827.31 | 827.25 | 827 | MATLAB |
| 10 | Joint1: 92.25
Joint2: -3.69
Joint3: -89.73 | Joint4: -37.11
Joint5: -26.07
Joint6: 70.26 | -13.8 | -136.52 | -14 | Robot Studio |
| | | | -134.91 | -13.74 | -136 | Unity |
| | | | 919.8 | 919.44 | 919 | MATLAB |

3.2 误差和延迟

虚拟模型和真实模型之间的误差由物理机器人的中央处理单元计算,通过虚拟模型匹配角度值减去真实模型匹配角度值得到。设Em为虚拟模型关节值,En为物理模型关节值,m和n从1到系统存储的最后一个检索数据,系统的误差(\Delta E(t))计算公式为:
[
\Delta E(t) = E_m - E_n
]

计算延迟时,将从虚拟机器人发送数据到物理机器人的时间设为t1,从物理机器人发送数据到虚拟机器人的时间设为t2,系统的延迟(\Delta t(s))计算公式为:
[
\Delta t(s) = t_2 - t_1
]

以下是误差和延迟计算的mermaid流程图:

graph LR
    classDef process fill:#E5F6FF,stroke:#73A6FF,stroke-width:2px;
    A(虚拟模型关节值 Em):::process -->|减法运算| C(误差 ΔE(t)):::process
    B(真实模型关节值 En):::process -->|减法运算| C
    D(虚拟到物理数据发送时间 t1):::process -->|减法运算| E(延迟 Δt(s)):::process
    F(物理到虚拟数据发送时间 t2):::process -->|减法运算| E
3.3 数据存储

数据存储在本地、Firebase云存储和Google表格中。Cloud Firestore的数据传输和接收速率为10 Hz,免费版本每天限制50,000次数据更新和编辑。Google表格的数据收发速率也为10 Hz,每分钟限制100次获取和更新。

数据分为三个部分:集合、目录和文件。集合名为“data”,其中包含文件夹,每个文件夹的名称是数据存储到云的时间。文件位于目录内,收集的数据包括时间、虚拟模型的匹配位置、伺服电机的旋转位置以及虚拟模型匹配位置与伺服电机旋转位置之间的误差。

还使用了另一种本地数据存储方式,频率约为165 Hz,仅受本地存储内存限制。本地存储的数据表包含以下列:
- STT列:根据数据存储时间升序排列的数据序号。
- Time列:存储数据的时间。
- Error列:虚拟模型和真实模型匹配位置之间的误差。
- Joints Unity列:虚拟模型的关节位置。
- Joints Servo列:伺服电机的旋转位置。

3.4 结果

分析数据表明,系统启动后约2 s达到稳定状态,采样频率约为165 Hz。系统延迟约为30 ms,误差为± 2度。

模拟伺服电机电源故障时,当存储3000个数据时断开伺服电机,在存储3150个数据时重新通电,在存储4665个数据时再次断开伺服电机直至系统完全停止。通过对比故障发生前后的数据差异,可以观察到系统的响应情况。

4. 结论

成功构建了ABB IRB 120机器人的数字孪生模型,该模型通过TCP套接字协议套件实现了真实和虚拟之间的通信。计算了机器人的正向运动学,并与Robot Studio的正向运动学进行了比较。此外,为电机构建了PID控制器,并将数据存储在云存储和本地存储中,以便后续进行机器学习开发。

系统在不存储数据时的最大频率为165 Hz,将数据存入云时为10 Hz。运动学计算由于计算中的舍入值导致误差非常小,PID控制器稳定,能够按预期控制电机位置。真实和虚拟模型之间的双向数据传输由于计算中的转换舍入导致误差也非常小。

未来,计划提高数据发送到云的频率,并使用机器学习分析收集的数据,以帮助监控和评估系统。还打算制作典型移动机器人(如机械臂平台和康复机器人)的数字副本。

附录:运动学DH

使用ABB IRB 120机器人模型计算正向和实验运动学,基于机器人模型的关节设置坐标位置和方向表示。

ABB IRB 120的DH参数如下表所示:
| 关节 | θi (°) | ai (mm) | αi (°) | di (mm) |
| — | — | — | — | — |
| 1 | θ1(+90) | 0 | -90 | 290 |
| 2 | θ2(-90) | 270 | 0 | 0 |
| 3 | θ3 | 70 | -90 | 302 |
| 4 | θ4 | 0 | 90 | 0 |
| 5 | θ5 | 0 | -90 | 0 |
| 6 | θ6 | 0 | 0 | 72 |

每个关节的运动范围限制如下表所示:
| 关节 | 下限 [deg] | 上限 [deg] |
| — | — | — |
| 1 | -165 | 165 |
| 2 | -110 | 110 |
| 3 | -110 | 70 |
| 4 | -160 | 160 |
| 5 | -120 | 120 |
| 6 | -400 | 400 |

每个连杆可以看作是从一个坐标系到下一个坐标系的坐标变换,该变换表示为沿X轴和Z轴的平移和旋转的乘积,公式如下:
[
^{n - 1}T_n =
\begin{bmatrix}
\cos\theta_n & -\sin\theta_n\cos\alpha_n & \sin\theta_n\sin\alpha_n & a_n\cos\theta_n \
\sin\theta_n & \cos\theta_n\cos\alpha_n & -\cos\theta_n\sin\alpha_n & a_n\sin\theta_n \
0 & \sin\alpha_n & \cos\alpha_n & d_n \
0 & 0 & 0 & 1
\end{bmatrix}
]

正向运动学

正向运动学的目的是确定每个关节(或伺服)相对于全局坐标系(即连接到肩部的第一个坐标系)的绝对位置和方向。将上述DH参数应用到公式中,得到每个连杆的变换矩阵,进而计算每个坐标系相对于全局坐标系的位置和方向:
[
^0T_6 = ^0T_1 ^1T_2 ^2T_3 ^3T_4 ^4T_5 ^5T_6 =
\begin{bmatrix}
r_{11} & r_{12} & r_{13} & p_x \
r_{21} & r_{22} & r_{23} & p_y \
r_{31} & r_{32} & r_{33} & p_z \
0 & 0 & 0 & 1
\end{bmatrix}
]

其中,参数r构成机器人的旋转矩阵,参数P是机械臂端点的坐标位置。机械臂端点坐标的计算公式如下:
[
p_x = d_5c_1s_{234} + d_4s_1 - d_6c_1c_{234} + a_2c_1c_2 + d_6c_5s_1 + a_3c_1c_2c_3 - a_3c_1s_2s_3
]
[
p_y = d_5s_1s_{234} - d_4c_1 - d_6s_1c_{234} + a_2c_2s_1 - d_6c_5c_1 + a_3c_2c_3s_1 - a_3s_1s_2s_3
]
[
p_z = d_1 - d_6s_{234}s_5 + a_3s_{23} + a_2s_2 - d_5c_{234}
]

逆向运动学

由于关节数量较多,求解三角函数方程较为困难,因此将6个关节分为两组:第1到第3关节为一组,第4到第6关节为一组。

对于第1到第3关节:
设Pc点坐标为([P_{cx}, P_{cy}, P_{cz}]),通过一系列矩阵运算和化简得到:
[
\theta_1 = \text{atan2}(P_{cy}, P_{cx})
]
[
\theta_3 = \text{atan2}\left(\pm\sqrt{1 - \left(\frac{D}{\rho}\right)^2}, \frac{D}{\rho}\right) - \text{atan2}(d_4, a_3)
]
其中,
[
D = n_x^2 + n_y^2 - (a_2^2 + a_3^2 + d_4^2)
]
[
\rho = 2\sqrt{(a_2a_3)^2 + (a_2d_4)^2}
]
[
n_x = \frac{P_{cx}}{\cos\theta_1}
]
[
n_y = P_{cz} - d_1
]

继续进行矩阵运算和化简得到:
[
\theta_2 = \phi - \text{atan2}\left(\pm\sqrt{1 - \left(\frac{M}{\sigma}\right)^2}, \frac{M}{\sigma}\right)
]
其中,
[
M = d_4\cos\theta_3 + a_3\sin\theta_3
]
[
\sigma = \sqrt{p_x^2 + p_y^2}
]
[
\phi = \text{atan2}(p_y, p_x)
]
[
p_x = P_{cx}\cos\theta_1 + P_{cy}\sin\theta_1
]
[
p_y = d_1 - P_{cz}
]

对于第4到第6关节:
计算从第4到第6关节的变换矩阵(^3T_6),得到旋转矩阵(^3R_6),通过与(^0R_6 = ^0R_3 ^3R_6)的关系,得到:
[
\cos\theta_5 = r_{33}
]
[
\sin\theta_5 = \pm\sqrt{1 - r_{33}^2}
]
[
\theta_5 = \text{atan2}\left(\pm\sqrt{1 - r_{33}^2}, r_{33}\right)
]

内容概要:本文介绍了一项创新性未发表的研究,即利用多元宇宙优化算法(Multiverse Optimizer, MVO)对分时电价下的需求响应与综合能源系统调度问题进行建模与求解,旨在实现能源系统的经济性、高效性与可持续性运行。该研究构建了包含多种能源设备(如光伏、风机、燃气轮机、储能系统等)及可调节负荷的综合能源系统模型,充分考虑了用户侧的需求响应行为在分时电价机制下的响应特性,通过MVO算法对系统运行成本、能源利用率、碳排放等多目标进行协同优化,实现了日前调度计划的智能决策。研究还提供了完整的MATLAB代码实现,便于研究人员复现实验、验证算法性能,并为进一步研究提供可靠的仿真基础。; 适合人群:具备一定电力系统、优化算法及MATLAB编程基础的科研人员、研究生以及从事能源互联网、综合能源系统规划与运行的技术工程师。; 使用场景及目标:① 学习并掌握多元宇宙优化算法在复杂能源系统调度中的具体应用方法;② 研究分时电价机制如何通过需求响应引导用户参与电网互动,实现削峰填谷;③ 实现综合能源系统(IES)中冷、热、电、气等多种能源的协同优化调度,以降低运行成本、提高新能源消纳能力和系统可靠性;④ 为相关领域的学术研究提供可复现的代码实例和仿真平台。; 阅读建议:此资源以MATLAB代码为核心载体,深入剖析了算法应用与系统建模的全过程。建议读者在学习时,不仅应关注代码的实现细节,更要理解其背后的数学模型、优化目标设定和约束条件的物理意义。建议结合文档中的模型描述,逐步调试代码,观察不同参数和场景下的优化结果,从而深刻掌握综合能源系统优化调度的设计思想与关键技术。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值