##始めに
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は以下の関節が存在します。
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)
###頭
#void ALMotionProxy::setAngles(names,angles,fractionMaxSpeed)
m.setAngles(["HeadYaw", "HeadPitch"], [0.0, 0.0], 0.1)
####HeadPitch
-1.0 | 0.0 | 1.0 |
---|---|---|
####HeadYaw
-1.0 | 0.0 | 1.0 |
---|---|---|
###肩
#void ALMotionProxy::setAngles(names,angles,fractionMaxSpeed)
m.setAngles(["LShoulderPitch", "LShoulderRoll"], [0.0, 0.0], 0.1)
####LShoulderPitch
-1.0 | 0.0 | 1.0 |
---|---|---|
####LShoulderRoll
-1.0 | 0.0 | 1.0 |
---|---|---|
###肘
#void ALMotionProxy::setAngles(names,angles,fractionMaxSpeed)
m.setAngles(["LElbowYaw", "LElbowRoll"], [0.0, 0.0], 0.1)
####LElbowRoll
-1.0 | 0.0 | 1.0 |
---|---|---|
####LElbowYaw
-1.0 | 0.0 | 1.0 |
---|---|---|
###手首
#void ALMotionProxy::setAngles(names,angles,fractionMaxSpeed)
m.setAngles("LWristYaw", 0.0, 0.1)
####LWristYaw
エラーが起きる
旧式のNAOだと手首がそもそも存在しないため、エラーが起きていました。
新型のNAOを用いて検証した結果、動くことが確認できました。
H25V50で行ったものです。
-1.0 | 0.0 | 1.0 |
---|---|---|
###手
#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 |
---|---|---|
###腰
#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 |
---|---|---|
####LHipRoll
-1.0 | 0.0 | 1.0 |
---|---|---|
####LHipYawPitch
-1.0 | 0.0 | 1.0 |
---|---|---|
###脚
#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 |
---|---|---|
####LAnklePitch
-1.0 | 0.0 | 1.0 |
---|---|---|
####LAnkleRoll
-1.0 | 0.0 | 1.0 |
---|---|---|
##感想
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