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

無料レッスン

順運動学で手先の位置を求める

このレッスンのあとで: 2つの関節の腕について、リンクの長さと関節の角度から、手先の座標を求められる。

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

角度から手先の位置を求める

順運動学(フォワードキネマティクス)は、ロボットアームの関節の角度から、手先の位置を求める計算です。角度を測るだけで、アームがどこに手を伸ばしているかが分かります。

ここで扱うのは、平面の上で動く、2つの関節の腕です。計算はすべてシミュレーションです。

このレッスンのゴール

メモ

2つの関節の腕について、リンクの長さと関節の角度から、手先の座標を求められる。

キーワード

ことばいみ
リンク腕の、まっすぐな1本の部分
関節リンクとリンクをつなぎ、角度を変える部分
関節角度関節がどれだけ曲がっているかを表す数
手先腕の先の、ものをつかむ点
順運動学関節角度から手先の位置を求めること

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

腕は2本のリンクと2つの関節でできている

1つ目の関節は原点にあり、角度 a1 は x 軸から測ります。1つ目のリンクの長さは l1 で、その先がひじです。

2つ目の関節はひじにあり、角度 a2 は1つ目のリンクの向きから測ります。2つ目のリンクの長さは l2 で、その先が手先です。

手先はひじに2つ目のリンクを足した位置

ひじの座標は、(l1 × cos a1, l1 × sin a1) です。2つ目のリンクの向きは、a1 と a2 を足した角度になります。

手先は、ひじからその向きに l2 だけ進んだ点です。だから、手先の x は l1 × cos a1 + l2 × cos(a1 + a2) になります。y は cos を sin に変えます。

l1 が 2、a1 が 30度のひじ

コマンド
docker exec jupyter python3 -c "import numpy as np; print(np.round([2 * np.cos(np.radians(30)), 2 * np.sin(np.radians(30))], 3))"

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

例: l1 が 2、l2 が 1 の腕

a1a2ひじ手先
0度0度(2, 0)(3, 0)
90度0度(0, 2)(0, 3)
0度90度(2, 0)(2, 1)
90度90度(0, 2)(-1, 2)

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

l2 が 1、a2 が 60度の手先

コマンド
docker exec jupyter python3 -c "import numpy as np; print(np.round([2 * np.cos(np.radians(30)) + np.cos(np.radians(90)), 2 * np.sin(np.radians(30)) + np.sin(np.radians(90))], 3))"

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

手先の位置を Python で

コード: python
import math
# リンクの長さ 3 と 2、関節の角度 45 度と -45 度の腕です。
l1 = 3
l2 = 2
a1 = math.radians(45)
a2 = math.radians(-45)
elbow_x = l1 * math.cos(a1)
elbow_y = l1 * math.sin(a1)
hand_x = elbow_x + l2 * math.cos(a1 + a2)
hand_y = elbow_y + l2 * math.sin(a1 + a2)
print("ひじ:", round(elbow_x, 3), round(elbow_y, 3))
print("手先:", round(hand_x, 3), round(hand_y, 3))
# a2 を 0 に変えて、もう一度実行します。
# 腕はまっすぐ伸びます。手先は原点から何の距離ですか。

手先が届く範囲には限りがある

腕がまっすぐ伸びたとき、手先は原点から l1 + l2 の距離にあり、これが届く最も遠い点です。

腕を折りたたむと、距離は l1 と l2 の差まで近づきます。この2つの距離の間にある点だけが、手先の届く範囲です。

よくある間違い

注意

a2 は、x 軸から測った角度だと考えがちです。実際は、1つ目のリンクから測った角度です。2つ目のリンクの向きは a1 + a2 です。a2 だけを cos に入れると、手先の位置がずれます。

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

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