産業機械をパソコンの中でひも解く・卵パッカー ―― 平行リンクが一瞬だけ、どちらに進むか決められなくなる
- python
- シミュレーション
- ロボット
- 数値計算
- メカトロニクス

卵をつまんで、水平を保ったまま運んで置く。一周ぶんの動きです。この立体は幾何を解いた結果から起こしています。
卵を10個、パックに並べる機械の話です。つまんで、水平を保ったまま運んで、そっと置く。ただそれだけの動きの中に、機構が「どちらに進むか決められなくなる」一瞬があります。
これは、プログラムを書く人なら知っている壊れ方だと思います。答えが二つあって、境目でどちらを選ぶか決めきれず、符号がぱたっと裏返る。逆運動学で肘を上げるか下げるかが入れ替わる、あの手の話です。今回はそれが、卵をつまむ平行リンクの上で起きます。
前回はロボットアームでした。今回は卵パッカーの頭です。私はこの機械を触ったことがありません。実機も用意していません。パソコンの中にリンクを建てて、水平を保つはずの機構が、なぜ一瞬だけ卵を傾けるのかを見ます。
リンクをパソコンの中に建てる
機構は、平行四辺形の四節リンクです。向かい合う辺を同じ長さにすると、卵を載せる辺は回転せず、平行移動だけをします。だから載った卵は、どこにいてもずっと水平のまま。クランクとロッカーを180mm、それをつなぐ辺と土台を300mmにしてあります。右上でつまみ、ちょうど反対の左下で置く。
寸法は全部、一つのファイルから来ています。位置を計算する関数もただ一つで、物理も、センサも、絵も、その一つを呼びます。幾何を二重に持たない。以前、置く高さを手で打ち込んでいたときに、卵がトレイを79mm突き抜けたことがありました。いまは置く姿勢から高さを導くようにして、手打ちを無くしてあります。
どちらに進むか、決められなくなる一点
この平行四辺形には、死点があります。クランクが一直線に並ぶ瞬間、機構は形の上で行き先が定まらなくなる。そこでは二つの解、つまり「平行のまま進む枝」と「交差してねじれる枝」が、ぴったり重なります。重なっているので、機構はどちらへでも滑り込めてしまう。

クランクが一直線に並ぶ死点では、平行の枝と交差の枝が一致する。
何も強制しないと、下半分で交差の枝に滑り込みます。卵を載せる辺が傾いて、卵が倒れる。置く側でいちばん大きく傾きました。これがGIFの右です。

強制をやめると、置く姿勢のあたりで卵が最大に傾く。
ソフトで言えば、判別式がわずかに負に振れて、平方根がNaNになる、あの一点です。コードのほうは、そこで負に振れないように、あらかじめ押さえてあります。
枝を選ばせない
直しは、枝を選ぶ余地をなくすことです。卵を載せる辺を、いつも土台と平行になる位置に、閉じた式で直接置いてしまう。交差の枝に行きようがなくなります。実機で言えば、リンクをもう一本足して、構造として平行を保たせるのに当たります。
ただ、これがずるをしていないことは確かめないといけません。死点以外のところで、この強制した答えと、正直に円と円の交点を解いた答えが、一致するかどうか。小数点以下でぴったり合いました。強制は近道ではなく、正しい枝を先回りして選んでいるだけ、と言えます。
動きからは見えないもの
置く瞬間の速さの話も書いておきます。設計どおりに毎時36000個で回すと、置く瞬間の横滑りが秒速1.13メートルになります。卵が割れ始める目安の帯(だいたい秒速0.3から0.7メートル)を、超えています。垂直にはぶつからないのに、横には乱暴、という状態です。コンベアの速さに合わせて置くと、これは秒速0.1メートルまで下がって帯の下に収まりますが、そのぶん、問題は機構から制御の側、つまりコンベアとの同期へ移ります。
割れたかどうかそのものは、この頭に付けた加速度センサでは分かりません。割れの音は速すぎて、このセンサの守備範囲の外です。本物の機械は、卵を強く叩かずに軽く20回ほど叩いて、その音の違いで選別します。ここから先は実機と、専用のセンサの仕事です。
いっぽうで、見えるものもあります。卵が一つ、ちゃんと座っていないと、0.06gの小さな衝撃が出ます。生の波形では全体の8%ほどに埋もれて見えませんが、正常な繰り返しを差し引いた残差で見ると、13倍に浮き上がって見分けがつきました。

生の波形では埋もれる小さな衝撃も、正常の繰り返しを引くと浮き上がる。
実機がなくても、確かめられること
実機がないので、この計算が本物と合っているかは分かりません。かわりに、内部の辻褄は確かめられます。リンクを一周させて、ちゃんと閉じているか。卵を載せる辺が、本当に0度で水平を保っているか。720コマすべてで、閉じ残りは実質ゼロ(1ミリの1兆分の1より小さい)、傾きは0度でした。それと、死点以外で強制した答えと正直な答えが一致すること。どれも、数字をわざと壊すと赤くなるようにしてあります。
分かったこと
機構には、ある一点で「どちらに進むか決められなくなる」瞬間がある。それは、答えが二つあって境目で裏返る、ソフトのあの壊れ方と同じ数学でした。直しは、枝を選ぶ余地をなくすこと。そして、割れの検知のように、動きからはどうやっても見えないものもあって、そこは正直に線を引きました。
触ったことのない機械でも、パソコンの中でならここまではたどれます。別の機械でも、同じ手順を試しているところです。

左は枝を強制した機構。卵はずっと水平のまま運ばれる。右は強制をやめたもの。同じ一点で経路が裏返り、卵が傾く。
コードと詳しい諸元・検証は GitHub に置いてあります。
この記事は Zenn に初出したものを加筆・補足したものです ── Zenn の元記事を見る