頭がだんだん上を向いてしまう現象の対処方法

パペロの頭を動かしていると、何らかの条件で、頭の原点が少しずつ上にずれていってしまう現象があります。これは確率的に発生する現象ではなく、特定の位置、速度であれば必ず発生し、そうでなければ発生しないという性質の様です(推測)。
この現象の対処法について紹介します。

定期的に原点復帰

そもそも原点がずれてしまうのにどうやって原点復帰ができるのかというと、
(1) 最大限上を向く(+55)
(2) 最大限下を向く(-20)
(3) 元に戻す
上下の順序は逆でも構わないと思いますが、これで済みます。ずれが大きいと少し音がしたりしますが大丈夫の様です。
電源を入れっぱなしのアプリの場合、半日に一度とか、ずれが目立たない程度のうちに、定期的にこれをやるのが最も簡単な回避方法ということになります。

危ない位置を避ける

調べてみると、どうもずれが生じやすい移動先座標と、生じにくい移動先座標がある様なのです。したがって移動時に危ない位置を避けることで、だいぶずれを抑えることが出来ます(残念ながら完全ではありません)。
現状わかっている危ない位置を避けるコードをpythonで記述すると、以下の様になります。
現在位置(cx, cy)、移動目標(x, y)のとき、

if 2 == (abs(y) % 3):
    y -= (1 if (0 < y) else -1)
xadif = abs(x - cx)
if (63 == xadif) or (127 == xadif):
    x += (1 if (x > cx) else -1)

xについては限られた条件のみの調整ですが、yについては移動できる点が本来の2/3に減ることになります。