适用于 MATLAB® 版本 10 的机器人工具箱
该工具箱利用 MATLAB 的本机功能(线性代数、可移植性、图形)为 MATLAB 带来了机器人特定功能。
工具箱使用一种非常通用的方法将串行链接机械手的运动学和动力学表示为 MATLAB® 对象——用户可以为任何串行链接机械手创建机器人对象,并为 Kinova 的知名机器人提供了许多示例、Universal Robotics、Rethink 以及 Puma 560 和 Stanford arm 等经典机器人。
该工具箱还支持具有机器人运动模型(独轮车、自行车)、路径规划算法(bug、距离变换、D*、PRM)、运动动力学规划(晶格、RRT)、定位(EKF、粒子滤波器)、地图功能的移动机器人构建(EKF)和同时定位和映射(EKF),以及非完整车辆的Simulink模型。该工具箱还包括用于四旋翼飞行机器人的详细 Simulink 模型。
工具箱的优点是:
- 代码成熟,为相同算法的其他实现提供了一个比较点;
- 例程通常以简单的方式编写,以便于理解,可能以牺牲计算效率为代价。如果您对计算效率有强烈的感觉,那么您可以随时重写函数以提高效率,使用 MATLAB 编译器编译 M 文件,或创建 MEX 版本;
- 由于源代码可用,因此有利于理解和教学。
daimashil
>> mdl_puma560
>> p560
p560 =
Puma 560 [Unimation]:: 6 axis, RRRRRR, stdDH, fastRNE
- viscous friction; params of 8/95;
+---+-----------+-----------+-----------+-----------+-----------+
| j | theta | d | a | alpha | offset |
+---+-----------+-----------+-----------+-----------+-----------+
| 1| q1| 0| 0| 1.5708| 0|
| 2| q2| 0| 0.4318| 0| 0|
| 3| q3| 0.15005| 0.0203| -1.5708| 0|
| 4| q4| 0.4318| 0| 1.5708| 0|
| 5| q5| 0| 0| -1.5708| 0|
| 6| q6| 0| 0| 0| 0|
+---+-----------+-----------+-----------+-----------+-----------+
>> p560.fkine([0 0 0 0 0 0]) % forward kinematics
ans =
1 0 0 0.4521
0 1 0 -0.15
0 0 1 0.4318
0 0 0 1
可以为路径设置动画
mdl_puma560
p = [0.8 0 0];
T = transl(p) * troty(pi/2);
qr(1) = -pi/2;
qqr = p560.ikine6s(T, 'ru');
qrt = jtraj(qr, qqr, 50);
plot_sphere(p, 0.05, 'y');
p560.plot3d(qrt, 'view', ae, 'movie', 'move2ball.gif');
四旋翼动画
移动机器人沿着圆形轨迹升空并悬停在一个点上,同时缓慢转动。
>> sl_quadrotor
移动机器人动画
使用 Reeds-Shepp 规划器计算的汽车式移动机器人进行 3 点转弯
q0 = [0 0 0]'; % initial configuration [x y theta]
qf = [0 0 pi]'; % final configuration
maxcurv = 1/5; % 5m turning circle
rs = ReedsShepp(q0, qf, maxcurv, 0.05)
% set up a vehicle model for animation
[car.image,~,car.alpha] = imread('car2.png');
car.rotation = 180; % degrees
car.centre = [648; 173]; % pix
car.length = 4.2; % m
% setup the plot
clf; plotvol([-4 8 -6 6])
a = gca;
a.XLimMode = 'manual';
a.YLimMode = 'manual';
set(gcf, 'Color', 'w')
grid on
a = gca;
xyzlabel
% now animate
plot_vehicle(rs.path, 'model', car, 'trail', 'r:', 'movie', '3point.gif');
粒子过滤器定位动画
使用粒子过滤器从信标定位的移动机器人。
V = diag([0.1, 1*pi/180].^2);
veh = Vehicle(V);
veh.add_driver( RandomPath(10) );
map = Map(20, 10);
W = diag([0.1, 1*pi/180].^2);
L = diag([0.1 0.1]);
Q = diag([0.1, 0.1, 1*pi/180]).^2;
pf = ParticleFilter(veh, sensor, Q, L, 1000, 'movi