highlight.pack.js

2014年5月22日木曜日

逆運動学 (IK: Inverse Kinematics) の勉強

概要

逆運動学 (IK: Inverse Kinematics) は、エンドポイント(手の位置など)から、各関節の角度を求めることを言う。 逆に、各関節の角度からエンドポイントの位置を導く出すことは、順運動学 (FK: Forward Kinematics) という。

順運動学では、一意にエンドポイントが定まるが、逆運動学では一般に関節の角度は一意に定まらず、複数の解が存在する。

ヤコビアンを用いた近似解法

$m$ 個のパラメータ(各関節の回転量) $\vec{x} \in \mathbb{R}^{m}$ から3次元空間上での各関節の位置を決定できるものとする。 $i$ 番目の関節の位置は $p_{i}: \mathbb{R}^{m} \rightarrow \mathbb{R}^{3}$ で与えられる。

ここで初期状態の関節位置が $p_{i}(\vec{x_{0}})$ で与えられ、最終的な関節の位置は $p_{i}(\vec{x_{0}} + \sigma)$ で表されるものとする。

いくつかの関節において、目標となる位置を与える。目標となる関節の位置を $\vec{t}_{i} \in \mathbb{R}^{3}, i \in \tau$ で表す。 $\tau$ は目標となる位置を持つ、全ての関節の添字をまとめた集合。

ここで $\sigma$ を決めるため、 $$ \| \sum_{i \in \tau} p_{i}(\vec{x_{0}} + \sigma) - p_{i}(\vec{x_{0}}) \| $$ を最小にする事を考える。

$\sigma$ が小さい場合は、 $$ p_i(\vec{x_{0}} + \sigma) \approx p_i(\vec{x_{0}}) + J_{p}(\vec{x_{0}})\sigma $$ と近似することが出来る。ここで、 $J_{p}(\vec{x_{0}})$ は $\vec{x_{0}}$ における、$3 \times m$ のヤコビアンを表している。

2014年5月3日土曜日

Ubuntu で日本以外からのSSHアクセスを拒否する (GeoIP2 Python API ver.)

前の記事で紹介した方法は手軽なのですが、 実は MaxMind 社の古いAPIを使っているという、ちょっとだけ気になる点が存在します。

そこで、今度は最新のAPIを利用したスクリプトを使用+データーベースの自動更新をやってみたいと思います。

Ubuntu で日本以外からのSSHアクセスを拒否する (legacy version)

ssh への不正アクセスを見ると結構な数が海外からだったりします。 というわけで、海外からの ssh へのアクセスを禁止して、 精神の安寧を保ちましょう。

最新APIを利用し、データベースの自動更新も行う場合は GeoIP2 ver. を御覧ください。

国の判定に、 geoip を使用した python スクリプトを利用し、 hosts_options が提供する aclexec (debian系列限定らしい) を利用して、実際に海外からの ssh アクセスを遮断します。