机器人学是研究自动化系统和机器人的一门技术科学。机器人小车、无人机和其他各种机器人已经在现代生活和工业领域中扮演着越来越重要的角色。机器人工具箱是 MATLAB 的一个工具箱,专门用于机器人动力学、运动规划和控制,为机器人建模、仿真和控制提供了便利。这个工具箱是由 Peter Corke 教授所开发,和维护的。这篇文章主要介绍机器人工具箱,包括其的基础知识,库函数和一些使用例子。
一、机器人工具箱基础
机器人工具箱是为了简化通常需要进行的机器人控制任务而开发的工具,其中包括一个完整的仿真环境以及一个强大的 Kinematics 库和 Dynamics 库,这些库可以让你完成很多的机器人任务,例如机器人路径规划、逆运动学求解和运动控制等。
机器人工具箱基于 MATLAB 环境开发,为用户提供了许多的功能。工具箱的核心部分是 Robotics System Toolbox™,它为你提供了创建、模拟和可视化多种类型机器人的工具和函数,包括牛顿欧拉动力学模型、前向和反向运动学模型等,可以应用于各种机器人的身体类型和运动变换,从人型机器人到轮式和飞行器等不同类型。
机器人工具箱中的 Robotics System Toolbox™ 可以大大简化和加速机器人应用程序的开发过程。它提供了强大的算法和功能,例如广义 jacobians、catching 计算等,为高级机器人应用程序提供必要的工具,而且对机器人仿真的支持也是非常丰富。
二、机器人工具箱库函数
机器人工具箱提供了多个库函数,包括但不限于运动规划、三维可视化、机器人建模控制等库函数。下面就简单介绍一些机器人工具箱中常用的库函数。
1、变换库函数
机器人工具箱提供了一些用于运动学和动力学变换的库函数,最重要的库函数是基于齐次变换矩阵描述的四元数和欧拉角。例如:
% 创建旋转矩阵
R = rotx(angX) * roty(angY) * rotz(angZ);
% 创建平移向量
T = [x, y, z];
% 创建变换矩阵
tr = [R, T'; zeros(1, 3), 1];
% 把一个矩阵从一帧转换成另一帧
new_mat = tr*old_mat*inv(tr);
2、Mechanism 类库函数
Mechanism 类是用于描述机器人结构的类,包括一些基本属性和方法,可以方便地进行常见机器人运动规划和控制。如下面的例子所示:
% 创建一个机器人模型
my_robot = rigidBodyTree();
% 添加初始位置的关节
jnt = rigidBodyJoint('jnt1', 'revolute');
% 设置父体和子体
l_hw = rigidBody('link1');
jnt.setParent(l_hw);
my_robot.BaseJnt = jnt;
my_robot.addBody(l_hw, 'base');
3、路径库函数
路径规划是机器人控制的核心部分,机器人工具箱中提供了多种用于路径规划的库函数。如下面的例子所示:
% 初始化路劲规划器
planner = msgswarm.Planner('Size', [12, 12]);
% 添加起点
planner.AddStartNode([6, 4, 0]);
% 定义目标
target = msgswarm.Target([3, 6, 0]);
% 运行路劲规划器
planner.Run(target);
% 得到规划结果
waypoints = planner.Waypoints();
三、机器人工具箱使用例子
下面我们列出一些机器人工具箱官方提供的使用例子,供读者参考。
1、机械臂运动规划
这是一个机械臂在三维空间中运动规划的例子,例如人类手臂可以像这样移动:
% 创建机械臂模型
robot = loadrobot('abb','IRB120');
% 设计随机运动路径
waypoints = [0.5 -0.4 0.248; 0.5 -0.1 0.3; 0.5 -0.1 0.5; 0.4 -0.5 0.8;...
0.4 -0.1 1.2; 0.4 0.5 0.8; 0.4 -0.1 0.5; 0.4 0.1 0.3;...
0.4 0.1 0.248];
% 进行路径规划
[Q,~,~] = ikunc(robot, waypoints);
[result, waypoints] = plan(robot, Q);
% 修改世界坐标系中的机械臂位置
robot.EndEffectorOffset = trvec2tform([0 0 -0.1]);
result = plan(robot, Q);
2、指定路径上运动的机器人
这是一个演示机器人沿着一条指定路径移动的例子:
% 定义路径和其他参数
path = [0 0 0;1 1 1;2 2 1;2 2.5 1.5; 3 3 3];
samples = 100;
connector = 'RigidBodyTree';
baseTransform = trvec2tform([2 2 2]);
% 沿路径进行机器人控制
[traj,states] = preview_path(path,samples,connector,baseTransform);
3、逆运动学求解
下面的例子演示了如何进行逆运动学求解,控制 YRRBot 神经网络在二维平面上移动:
% 创建 YRRBot 神经网络
yrrbot = loadrobot("pa10");
% 设计起点和终点
q1 = yrrbot.homeConfiguration;
q2 = yrrbot.homeConfiguration;
q2(2) = q2(2) - deg2rad(30);
% 进行逆运动学求解
[nodes,edges] = inverse_kinematics(yrrbot,q1,q2,"verbose",false);
V = biograph(edges,nodes);
% 可视化
view(V);
总结
本文简要介绍了机器人工具箱的基础知识、常用库函数和使用例子,其中包括变换库函数、Mechanism 类库函数和路径库函数等。机器人工具箱在机器人建模、仿真和控制方面非常有用,旨在为机器人设计和开发人员提供最简单和最功能强大的工具。