LoginSignup
11
8

More than 5 years have passed since last update.

ALMotion 関節の動きメモ(NAO)

Last updated at Posted at 2015-06-22

始めに

Sunaさんの記事を見ていて、自分はNAOを扱っているのに、記事にしないのもなんかアレなので、作ることにしました。
追記(2015/06/22):記事の書き途中ですが、先にアップしておきます。役に立つ人がいるかもしれないので。

参考記事
ALMotion 関節の動きメモ
http://qiita.com/Suna/items/9ab7f805c2a2d2b1efef

確認方法

確認環境

MacBook Pro (Retina, 13-inch, Late 2013)
コレグラフ2.1.3(バーチャルロボット NAO H21(V32))
追記(2015/06/24):バーチャルロボット NAO H21(V32)だと、手首がないことが発覚しました。後日NAO H25(V50)で追加します。

基本姿勢

ポーズライブラリのStandinitを利用しています。

確認方法

Sunaさんと同じく、PythonからChoregrapheのバーチャルロボットに接続して、関節を動かしてみます。

#naoqiからALProxyをインポートします。
>>> from naoqi import ALProxy
#ALProxyを使い、バーチャルロボットと接続します。
#実機でやるときは実機と繋ぎます。
#class ALProxy(name, ip, port)
>>> m = ALProxy("ALMotion", "localhost", 9559)
[I] 3343 qimessaging.session: Session listener created on tcp://0.0.0.0:0
[I] 3343 qimessaging.transportserver: TransportServer will listen on: tcp://192.168.205.16:50370
[I] 3343 qimessaging.transportserver: TransportServer will listen on: tcp://25.144.112.20:50370
[I] 3343 qimessaging.transportserver: TransportServer will listen on: tcp://127.0.0.1:50370
Tips:ALProxy

コレグラフ内の適当なボックスのpythonスクリプトを見てください。
例えば、[Animated Say Text]のボックス([Animated Say]の中にある)ですが、上の方のALProxyのところを見ると、

def __init__(self):
        GeneratedClass.__init__(self, False)
        self.animSpeech = ALProxy('ALAnimatedSpeech')

となっており、ipとportが載っていません。NAOやPepperの中に入れて動かすアプリケーションを作る際は、ipとportを載せる必要はありません。NAOが2体いる場合にある一方にアプリケーションを入れて、もう一体を動かすなどしたいときに、ipとportを利用するそうです。(今回のように、pythonのみでバーチャルロボットと接続する際にも利用します。)

この状態から確認したい関節のコマンドを入力します。
ちなみに、NAOは以下の関節が存在します。
スクリーンショット 2015-06-19 18.26.14.png

NAO - Actuator & Sensor list
http://doc.aldebaran.com/2-1/family/nao_dcm/actuator_sensor_names.html#actuator-sensor-list-nao

確認

setAnglesは以下のように利用します。

#void ALMotionProxy::setAngles(names,angles,fractionMaxSpeed)
m.setAngles(["HeadYaw", "HeadPitch"], [0.0, 0.0], 0.1)

SetAngle
http://doc.aldebaran.com/2-1/naoqi/motion/control-joint-api.html?highlight=setangles#ALMotionProxy::setAngles__AL::ALValueCR.AL::ALValueCR.floatCR

#void ALMotionProxy::setAngles(names,angles,fractionMaxSpeed)
m.setAngles(["HeadYaw", "HeadPitch"], [0.0, 0.0], 0.1)

HeadPitch

-1.0 0.0 1.0
headPitch_10.png headPitch00.png headPitch10.png

HeadYaw

-1.0 0.0 1.0
headyaw_10.png headyaw00.png headyaw10.png

#void ALMotionProxy::setAngles(names,angles,fractionMaxSpeed)
m.setAngles(["LShoulderPitch", "LShoulderRoll"], [0.0, 0.0], 0.1)

LShoulderPitch

-1.0 0.0 1.0
LShoulderPitch_10.png LShoulderPitch00.png LShoulderPitch10.png

LShoulderRoll

-1.0 0.0 1.0
LShoulderRoll_10.png LShoulderRoll00.png LShoulderRoll10.png

#void ALMotionProxy::setAngles(names,angles,fractionMaxSpeed)
m.setAngles(["LElbowYaw", "LElbowRoll"], [0.0, 0.0], 0.1)

LElbowRoll

-1.0 0.0 1.0
LElbowRoll_10.png LElbowRoll00.png LElbowRoll10.png

LElbowYaw

-1.0 0.0 1.0
LElbowYaw_10.png LElbowYaw00.png LElbowYaw10.png

手首

#void ALMotionProxy::setAngles(names,angles,fractionMaxSpeed)
m.setAngles("LWristYaw", 0.0, 0.1)

LWristYaw

エラーが起きる
旧式のNAOだと手首がそもそも存在しないため、エラーが起きていました。
新型のNAOを用いて検証した結果、動くことが確認できました。
H25V50で行ったものです。

-1.0 0.0 1.0
LWristYaw_10.png LWristYaw00.png LWristYaw10.png

#void ALMotionProxy::setAngles(names,angles,fractionMaxSpeed)
m.setAngles("LHand", 0.0, 0.1)

#上記のものだとエラーが起きるため以下の関数を使って、手の開閉を行います。
#void ALMotionProxy::openHand(handName)
#void ALMotionProxy::closeHand(handName)
m.openHand("LHand")
m.closeHand("LHand")

LHand

エラーが起きる
Open or Closeのため

open init close
LHandOpen.png LHandInit2.png LHandClose.png

#void ALMotionProxy::setAngles(names,angles,fractionMaxSpeed)
m.setAngles(["LHipYawPitch", "LHipPitch", "LHipRoll"], [0.0, 0.0, 0.0], 0.1)

LHipPitch

-1.0 0.0 1.0
LHipPitch_10.png LHipPitch00.png LHipPitch10.png

LHipRoll

-1.0 0.0 1.0
LHipRoll_10.png LHipRoll00.png LHipRoll10.png

LHipYawPitch

-1.0 0.0 1.0
LHipYawPitch_10.png LHipYawPitch00.png LHipYawPitch10.png

#void ALMotionProxy::setAngles(names,angles,fractionMaxSpeed)
m.setAngles(["LKneePitch", "LAnklePitch","LAnkleRoll"], [0.0, 0.0, 0.0], 0.1)

LKneePitch

-1.0 0.0 1.0
LKneePitch_10.png LKneePitch00.png LKneePitch10.png

LAnklePitch

-1.0 0.0 1.0
LAnklePitch_10.png LAnklePitch00.png LAnklePitch10.png

LAnkleRoll

-1.0 0.0 1.0
LAnkleRoll_10.png LAnkleRoll00.png LAnkleRoll10.png

感想

LHand, LWristYawはsetAnglesだとダメみたい?
何かやり方あったら教えて下さい。
また、すこし調べてみます。
追記(2015/06/24):原因がわかりました。バーチャルロボットのバージョンのせいでした。とりあえず、LWristYawは後日追加します。
LHandはopen,closeなので、うまくいかないのかもしれません。また調べてみます。

感想

実際にバーチャルロボットを動かしてみて、表を作ったりしたことで、適当な値をボコスカ入れるのはダメだということがわかった。

今回はバーチャルロボットで[-1.0,0.0,1.0]という値を強制的に入れて動かしたが、実機では絶対うまく行かない。というか、危ない。なので、今後もし実機で検証するなり、動かして見るなりする際にはドキュメントの"JOINTS"の項目によく目を通してから行おうと思う。

参考URL

NAO - Actuator & Sensor list
http://doc.aldebaran.com/2-1/family/nao_dcm/actuator_sensor_names.html#actuator-sensor-list-nao

JOINTS
http://doc.aldebaran.com/2-1/family/robots/joints_robot.html#robot-joints-v4-head-joints

11
8
12

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
11
8