Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

send robot-model :larm :joint-list :nameの挙動について #467

Open
M-Onitsuka opened this issue Nov 17, 2017 · 1 comment
Open

send robot-model :larm :joint-list :nameの挙動について #467

M-Onitsuka opened this issue Nov 17, 2017 · 1 comment

Comments

@M-Onitsuka
Copy link

腱悟郎のモデルを使っていて疑問に思い、sample-robot-modelでも同じ現象が起きたので、robot-modelクラスに起きる現象だと考え、こちらに質問します

robot-modelクラスのインスタンスのjoint-listの名前が欲しかったので

(setq *robot* (instance sample-robot :init))
(send *robot* :joint-list :name)

としたところ

(:torso-waist-y :torso-waist-p :head-neck-y :head-neck-p :larm-shoulder-p :larm-shoulder-r :larm-shoulder-y :larm-elbow-p :larm-wrist-y :larm-wrist-r :larm-wrist-p :rarm-shoulder-p :rarm-shoulder-r :rarm-shoulder-y :rarm-elbow-p :rarm-wrist-y :rarm-wrist-r :rarm-wrist-p :lleg-crotch-y :lleg-crotch-r :lleg-crotch-p :lleg-knee-p :lleg-ankle-p :lleg-ankle-r :rleg-crotch-y :rleg-crotch-r :rleg-crotch-p :rleg-knee-p :rleg-ankle-p :rleg-ankle-r)

となって名前のリストが帰って来ます

次にlarmに関わるjointの名前を取ろうとして

(send *robot* :larm :joint-list :name)

としたところ

(#<rotational-joint #X7386a00 :larm-shoulder-p> #<rotational-joint #X7386ac0 :larm-shoulder-r> #<rotational-joint #X77e4fb8 :larm-shoulder-y> #<rotational-joint #X77e50f0 :larm-elbow-p> #<rotational-joint #X77e51b0 :larm-wrist-y> #<rotational-joint #X77e52e8 :larm-wrist-r> #<rotational-joint #X77e5420 :larm-wrist-p>)

の様になり、インスタンスのリストが帰ってきてしまいました。:nameを送っているので名前のリストが欲しいところですが、仕様でしょうか?

一応

(mapcar #'(lambda (x) (send x :name)) (send *robot* :larm :joint-list))

とすれば

(:larm-shoulder-p :larm-shoulder-r :larm-shoulder-y :larm-elbow-p :larm-wrist-y :larm-wrist-r :larm-wrist-p)

となって目的としていたものは得られます

@Affonso-Gui
Copy link
Member

後者の例だと:nameを送ってるように見えて、実は何も送ってないですね。

中身を見てみると定義されている引数は(limb method &rest args)L114で、method:joint-listの時、結果はL174

(send-all (send self :limb limb :links) :joint)

で、argsが無視されます。なので、(send *robot* :larm :joint-list :name) でも (send *robot* :larm :joint-list :alien) でも実は(send *robot* :larm :joint-list)と同じです。

:nameを取得するためには言った通りにmapcarを使うなり、send-allを使うなりしなければなりません。一応おすすめは

(send-all (send *robot* :larm :joint-list) :name)

です。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants