Main Content

ロボット アームの最小加加速度の軌跡の計画

この例では、ロボット マニピュレーターの最小加加速度の多項式軌跡を計画する方法について説明します。例では、付属のロボット モデルを読み込み、障害物がある環境でのロボット モデルのパスを計画し、そのパスから最小加加速度の軌跡を生成し、生成された軌跡とロボットの動作を可視化する方法を示します。

ロボット モデルと環境の設定

この例では、7 自由度のロボット マニピュレーターである KUKA LBR iiwa のモデルを使用します。loadrobotを使用して、ロボット モデルをワークスペースにrigidBodyTreeオブジェクトとして読み込みます。コンフィギュレーション用の出力形式を "row" に設定します。

robot = loadrobot("kukaIiwa14","DataFormat","row");

ロボットの環境を生成します。衝突オブジェクトを作成し、ロボットのベースに対するそれらの姿勢を指定します。環境を可視化します。

env = {collisionBox(0.5,0.5,0.05) collisionSphere(0.3)};
env{1}.Pose(3,end) = -0.05;
env{2}.Pose(1:3,end) = [0.1 0.2 0.8];

show(robot);
hold on
show(env{1})
show(env{2})

Figure contains an axes object. The axes object with xlabel X, ylabel Y contains 31 objects of type patch, line. These objects represent world, iiwa_link_0, iiwa_link_1, iiwa_link_2, iiwa_link_3, iiwa_link_4, iiwa_link_5, iiwa_link_6, iiwa_link_7, iiwa_link_ee, iiwa_link_ee_kuka, iiwa_link_0_mesh, iiwa_link_1_mesh, iiwa_link_2_mesh, iiwa_link_3_mesh, iiwa_link_4_mesh, iiwa_link_5_mesh, iiwa_link_6_mesh, iiwa_link_7_mesh.

manipulatorRRT を使用したパスの計画

manipulatorRRTを使用してロボット モデルの RRT プランナーを作成します。パスを内挿しながら中間状態の数を増やすように ValidationDistance プロパティを設定します。

rrt = manipulatorRRT(robot,env);
rrt.ValidationDistance = 0.2;
rrt.SkippedSelfCollisions = "parent";

開始とゴールのコンフィギュレーションを指定します。

startConfig = [0.08 -0.65 0.05 0.02 0.04 0.49 0.04];
goalConfig =  [2.97 -1.05 0.05 0.02 0.04 0.49 0.04];

パスを計画します。RRT アルゴリズムのランダム性を考慮し、反復性のために rng シードを設定します。

rng(0)
path = plan(rrt,startConfig,goalConfig);

パスを内挿し、ウェイポイントを取得します。

interpPath = interpolate(rrt,path);
wpts = interpPath';

最小加加速度の多項式軌跡の生成

プランナーはパスを順序付きの一連のウェイポイントとして返します。それらをロボットに渡すには、それらを通る軌跡を最初に判別する必要があります。関数minjerkpolytrajは、指定されたすべてのウェイポイントを通過する最小加加速度の滑らかな軌跡を作成します。

ロボット アームがウェイポイントに到着する時間の初期推定を与えます。

initialGuess = linspace(0,size(wpts,2)*0.2,size(wpts,2));

軌跡の推定中に取得するサンプルの数を指定します。

numSamples = 100;

最小加加速度の多項式軌跡を計算します。

[q,qd,qdd,qddd,pp,tpts,tSamples] = minjerkpolytraj(wpts,initialGuess,numSamples);

軌跡とウェイポイントの可視化

時間の経過に伴う軌跡とウェイポイントをプロットします。

minJerkPath = q';
figure
plot(tSamples,q)
hold all
plot(tpts,wpts,"x")

Figure contains an axes object. The axes object contains 14 objects of type line. One or more of the lines displays its values using only markers

ロボットの動作の可視化

オブジェクト関数showを使用して結果の動作をアニメーション化します。この可視化で高速更新を有効にすることで、滑らかなアニメーションが得られます。

figure;
ax = show(robot,startConfig);
hold all

% Ensure the figure pops out of the Live Editor so animations are visible
set(gcf,"Visible","on");
for i = 1:length(env)
    show(env{i},"Parent",ax);
end

for i = 1:size(minJerkPath,1)
    show(robot,minJerkPath(i,:),"PreservePlot",false,"FastUpdate",true);
    drawnow;
end

hold off

Figure contains an axes object. The axes object with xlabel X, ylabel Y contains 31 objects of type patch, line.