# Matrix and Robotics toolbox on STM32
## 概述
本工具库基于arm_math优化数学库,通过C++模板实现和封装了矩阵的各种基本运算,在此基础上实现了机器人学的基本功能函数,包括位姿描述、DH建模、运动学和逆向动力学。上海交通大学交龙战队在RoboMaster2023赛季基于本工具库开发了工程机器人的机械臂控制算法。
## 索引
**src**目录下包含了矩阵运算工具库(matrix.cpp/h),机器人学工具库(robotics.cpp/h)和两个工具库使用到的基础数学运算函数。
**demo**目录下包含了一个可在RoboMaster C型开发板(STM32F407)上运行的单片机程序,矩阵运算和机器人学工具库相关代码存放在**demo/toolbox**目录下,**demo/Src/main.cpp**中给出了使用3种不同构型机械臂(PUMA560,UR,SCARA)的例程,**demo/matlab**目录下包含了对应的matlab程序。例程中包括了机械臂的建模方法以及运动学、动力学、雅可比矩阵等计算。
## matrix-矩阵运算库
基于arm_math矩阵运算库实现和封装,对常用的基本运算进行了重载,使用方法类似于Eigen的矩阵运算。
### 为什么要专门编写一个矩阵运算工具库?
目前STM32平台缺少高效且易用的开源矩阵库,直接使用arm_math的库函数会使得代码较为臃肿,对于机械臂控制这样包含大量矩阵运算的程序来说非常影响编程体验和调试效率。而在STM32上直接引入Eigen库的运行速度不能满足需求,且编译后的执行文件体积非常大。
### 性能参考
本工具库直接使用arm_math矩阵运算库函数进行封装,矩阵乘法运算耗时约为纯数组计算的1.6倍,约为Eigen库的1/40。
## robotics-机器人学工具库
参考matlab robotics toolbox (Peter Corke)实现了基础的机器人学功能函数,包含位姿变换,DH建模,运动学,雅可比矩阵,动力学等。使用方法也可大致参考robotics toolbox的说明文档。
### 位姿变换
齐次变换矩阵、旋转矩阵、位移向量、欧拉角、旋转向量、四元数、旋量坐标向量间的互相转换。
### struct DH_t
DH建模参数结构体
### class Link
单刚体连杆建模,包含:
- 运动学参数:DH参数,关节初始偏移,关节限位,关节类型
- 动力学参数:质量,质心,惯量张量
### class Serial_Link<_n>
串联多刚体建模,实现正逆运动学,动力学求解等。
- Serial_Link<_n>::fkine(q) -- 正运动学,返回 $T_n^0(q)$
- Serial_Link<_n>::fkine(q,k) -- 正运动学,返回 $T_k^0(q)$
- Serial_Link<_n>::T(q,k-1) -- 返回刚体k的齐次变换矩阵 $T_k^{k-1}(q)$
- Serial_Link<_n>::jacob(q) -- 雅可比矩阵 $J(q)$
- Serial_Link<_n>::ikine(T, q, tol, max_iter) -- 逆运动学数值求解(牛顿法迭代),返回 $q(T,q_0)$
- *Serial_Link<_n>::ikine_analytic(T) -- 逆运动学解析求解接口,由用户实现,返回 $q(T)$
- Serial_Link<_n>::rne(q,qv,qa,he) -- 逆动力学求解(牛顿-欧拉法),返回关节力/力矩 $\tau_i(q,\dot q,\ddot q,h_e)$,( $h_e=[f_e^T,\mu_e^T]^T$,为末端负载)
### 性能参考
6轴机械臂正运动学计算耗时0.14ms,雅可比矩阵计算耗时0.59ms,逆运动学求解耗时3~20ms。
## 补充说明
1. 本工具库最主要的用途是实现机械臂控制,由于自制的机械臂与产品级的机械臂不同,缺少完善的安全保护功能,因此**在编写程序时要尤其关注安全措施例如紧集停止、断电等,在实际对机械臂进行控制前应确保每个电机在发生意外状况时能通过软件或硬件方式断电**。
2. 要实现机械臂的控制,在此工具库的基础上仍需要实现逆运动学的解析解、奇异位形处理、姿态插值、轨迹规划等功能。不同构型、机构参数的机械臂在这方面的处理不完全相同。如果处理不当可能存在一定危险性(例如奇异位形下电机突然高速运行)。
3. 机器人学工具库中的逆运动学使用迭代求解,求解结果数值不稳定且效率较低,推荐自行实现解析逆解。
4. 工具库作者本人非计算机、软件工程相关专业,代码编写方面没有经过系统的训练,同时用C++在STM32上开发目前也不算特别成熟,程序和代码规范可能有些不完善的地方,欢迎指出和提出修改意见。
## 参考资料
[1] SJTU ME385-2, Robotics, Y.Ding.
[2] SJTU ME391-1, Numerical analysis, Y.Ding.
[3] Bruno Siciliano, et al., Robotics: Modelling, Planning and Control, Springer, 2010.
[4] R.Murry, Z.X.Li, and S.Sastry, A Mathematical Introduction to Robotic Manipulation, CRC Press, 1994.
[5] Timothy Sauer, Numerical analysis (2nd ed.), Pearson Education, 2012.
[6] Peter Corke, MATLAB Robotics Toolbox <http://petercorke.com>.
基于ARM优化数学库arm_math实现的矩阵运算和机器人学工具库,可用于实现机械臂控制及后续功能开发.zip
需积分: 0 138 浏览量
更新于2024-02-10
收藏 4.93MB ZIP 举报
人工智能项目资料-
【探索人工智能的宝藏之地】
无论您是计算机相关专业的在校学生、老师,还是企业界的探索者,这个项目都是为您量身打造的。无论您是初入此领域的小白,还是寻求更高层次进阶的资深人士,这里都有您需要的宝藏。不仅如此,它还可以作为毕设项目、课程设计、作业、甚至项目初期的立项演示。
【人工智能的深度探索】
人工智能——模拟人类智能的技术和理论,使其在计算机上展现出类似人类的思考、判断、决策、学习和交流能力。这不仅是一门技术,更是一种前沿的科学探索。
【实战项目与源码分享】
我们深入探讨了深度学习的基本原理、神经网络的应用、自然语言处理、语言模型、文本分类、信息检索等领域。更有深度学习、机器学习、自然语言处理和计算机视觉的实战项目源码,助您从理论走向实践,如果您已有一定基础,您可以基于这些源码进行修改和扩展,实现更多功能。
【期待与您同行】
我们真诚地邀请您下载并使用这些资源,与我们一起在人工智能的海洋中航行。同时,我们也期待与您的沟通交流,共同学习,共同进步。让我们在这个充满挑战和机遇的领域中共同探索未来!


妄北y
- 粉丝: 2w+
- 资源: 1万+
最新资源
- 毕业设计JAVAWEB校园订餐系统项目源码
- html css js分页按钮
- Comsol多孔板相场断裂模型:一种高效的数值模拟工具,好的,以下是根据您提供的“comsol多孔板相场断裂模型”提炼出的一个标题: COMSOL多孔板相场模拟与断裂分析模型 此标题涵盖了您提供
- Vcredist运行库【2005、2008、2010、2012、2013、2015-2022】X86+X64集合打包
- 六轴EtherCAT总线伺服涂布收卷机程序:动态测量与同步控制,具备参考值的六个伺服+变频器+编码器方案,六轴EtherCAT总线伺服涂布收卷机高级编程:伺服、变频器与编码器的协同控制及动态测量频率转
- springboot接入InfoSuiteAs
- 命令行界面构建库 :CmdForge
- 电力系统风储协同调频策略的MATLAB仿真模型:基于四机两区系统的频域模型与控制策略优化分析,MATLAB仿真模型:风储联合一次调频在四机两区电力系统的应用与优化,电力系统风储联合一次调频MATLAB
- 【微信小程序源码】笑话
- 「三菱R系列PLC应用:ST、RD77MS定位与触摸屏配方功能实现异地操作及快速通信」,三菱R系列PLC案例详解:高级应用与CClink通信实现机器人远程操作及触摸屏配方功能,三菱R系列PLC案例程序
- 【微信小程序源码】滑动选项卡
- Video_59564296397953.mp3
- 使用c++开发相机的示例CameraDS,引用DirectShow技术
- 贪吃蛇 web版 支持python启动
- 基于NRBO优化算法的Transformer-BiLSTM回归模型Matlab代码:适用于多变量时序预测的电力负荷与光伏功率预测,NRBO-Transformer结合BiLSTM神经网络的时序数据回归
- 【微信小程序源码】京东白条