クリーム色の背景、色付き表示、高コントラスト、大きな文字のほうが読みやすいですか?配色と文字を選ぶと、すべてのページに一度で反映されます。

無料レッスン

ヤコビ行列と手先の速さ

このレッスンのあとで: 関節を少し動かして手先の動きを測り、ヤコビ行列を数値で求め、手先の速さを計算できる。

60分のレッスンコマンド2件JupyterLab データサイエンスラボ:pandas、Matplotlib、scikit-learn をブラウザーで

関節の速さが手先の速さになる

ヤコビ行列は、関節がどれだけ速く動くと、手先がどれだけ速く動くかを表す、数の表です。腕の先を滑らかに動かすには、角度だけでなく、速さの関係も必要です。

このレッスンでは、ヤコビ行列を、関節を少し動かして数えるやり方で求めます。シミュレーションの計算です。

このレッスンのゴール

メモ

関節を少し動かして手先の動きを測り、ヤコビ行列を数値で求め、手先の速さを計算できる。

キーワード

ことばいみ
速さ1秒あたりに動く量
ヤコビ行列関節の速さを手先の速さに変える2行2列の表
数値微分少し動かして、変わり方を数で測る方法
特異点ヤコビ行列が働かなくなる腕の形
行列式2行2列の表から作る、1つの数

学生が入力するセルは、このプレビューでは空白です。

少し動かして、手先の動きを測る

関節1を 0.01 度だけ前に、0.01 度だけ後ろに動かし、手先の位置を2回求めます。その差を 0.02 で割ると、関節1が1度動いたときの手先の動きが分かります。

この方法を数値微分といいます。関節2にも、同じ測り方を使います。

例: l1 が 2、l2 が 1、a1 が 0度、a2 が 90度

動かす関節1度動かしたときの手先の x手先の y
関節1約 -0.01745約 0.03491
関節2約 -0.017450

学生が入力するセルは、このプレビューでは空白です。

この4つの数を並べたものがヤコビ行列

上の表の4つの数を、2行2列に並べたものが、ヤコビ行列です。1列目が関節1、2列目が関節2の分です。

手先の速さは、各列に関節の速さをかけて足します。vx は「1行1列 × s1 + 1行2列 × s2」、vy は「2行1列 × s1 + 2行2列 × s2」です。

数値微分を1回測る

コマンド
docker exec jupyter python3 -c "import numpy as np; f = lambda t: 2 * np.cos(np.radians(t)); print(round((f(30.01) - f(29.99)) / 0.02, 5))"

ここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。

関節1が毎秒10度のときの手先の速さ

コマンド
docker exec jupyter python3 -c "import numpy as np; j = np.array([[-0.01745, -0.01745], [0.03491, 0]]); print(j @ np.array([10, 0]))"

ここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。

数値微分を Python で

コード: python
import math
# 手先の位置を求める関数です(前のレッスンと同じ計算)。
def hand_x(l1, l2, a1, a2):
    return l1 * math.cos(math.radians(a1)) + l2 * math.cos(math.radians(a1 + a2))

# 関節1を 0.01 度だけ前後に動かして、手先の x の変わり方を測ります。
h = 0.01
before = hand_x(3, 2, 20 - h, 50)
after = hand_x(3, 2, 20 + h, 50)
print(round((after - before) / (2 * h), 5))
# 20 を 0 に変えて、もう一度実行します。
# 変わり方は、大きくなりますか、小さくなりますか。

腕がまっすぐ伸びると、動けない向きがある

腕がまっすぐ伸びきると、手先は腕の向きには動けません。関節を回しても、手先は横にしか動かないからです。

このとき行列式は 0 になります。この形を特異点といい、ヤコビ行列からは、求めたい関節の速さが決まりません。

例: 行列式の計算

行列行列式の計算行列式
[[2, 1], [1, 1]]2×1 − 1×11
[[2, 1], [4, 2]]2×2 − 1×40(特異)

学生が入力するセルは、このプレビューでは空白です。

よくある間違い

注意

関節の速さと手先の速さは、同じ単位だと考えがちです。実際は、関節は度/秒で、手先は長さ/秒です。1度あたりで測ったヤコビ行列に、度/秒をかければ、長さ/秒になります。

このラボとソースについて: JupyterLab データサイエンスラボ:pandas、Matplotlib、scikit-learn をブラウザーで

授業で使いますか?このモジュールを学生に割り当てると、教員用ガイド、自動採点つきの課題、学生ごとのラボを使えます。