"wiat for result"
/home/applications/ros/groovy/jsk-ros-pkg/euslisp/jskeus/eus/Linux64/bin/irteusgl 0 error: cannot find method :goal_id in (send ros::action-goal :goal_id :id)
というエラーが出ていたため、
岡田先生に先ほど直して頂いたのですが、
コミットした[r4489]でもまだバグがあったようで
/home/applications/ros/groovy/jsk-ros-pkg/euslisp/jskeus/eus/Linux64/bin/irteusgl 0 error: mismatch argument in (ros::ros-warn invalid goal id: ~A ~A~% msg :~A~% action-goal:~A (send ros::msg :status :goal_id :id) (if ros::action-goal (send ros::action-goal :goal_id :id)) ros::msg)
のように言われてしまします。
[r4496]で直しました.
ただ,本来はこの部分(:update-resultの "invalid goal id" に入ってはダメなんだけど,なぜ
ここに来るんだろう?
test/test-multi-queur.launchに関係している?
あるいは:wait-interpolationを取りこぼすのと関係している?
Related
Commit: [r4496]
バグ自体はごめんなさいなんだけど、このワーニングが出るのはどんな時かな?
同じアクションサーバーに複数のクライアントからgoalを送った時とか?
稲垣くんからの又聞きですが,普通に:move-toを送っていると時どきこの表示が出るという感じでした.
(demo)の途中でもでるのか,あるいは,インタプリタ上からsend ri した時だけでるのか,というのは
気になりますね.
ただコードを見ると,
となっていて,reusltは型さえ同じだったらresult-cbが呼ばれてしまうという場合なので,
ここでは,update-resultでmsgのgoal_idとaction-goalのgoal_idが違ったら,自分宛のメッセージ
でないからワーニングではなく普通にスルーする,というのがいい気がしてきました.
テストコードが必要そうですね.
test/fibonacci-client.l
test/test-fibonacci.launch
で複数のクライアントからゴールを送るサンプルにしてみました.
それぞれ自分の送ったゴールだけを受け取っているようです.
ここで,invalid goal idが出るのは正しい挙動なので
[r4504]でros-warnでなくros-debugを使うようにしました.
Related
Commit: [r4504]
そもそも2人以上が:move-toを使っているという状況ではなかった気がするので,裏で走っているコードがあるのかもしれないんですが,それは別として,稲垣くんによると invalid id はよく表示されているということで,action-goalがnilにっているになっているのが問題じゃないかというきがします.普通はaction-goalはなにか入っているはず.
合っているかわかりませんが、
今のところ確認できるinvalid goal idが表示されるタイミングは、
「右に曲がります」や「左に曲がります」と
pr2の音声が流れるときだけです。
他にもわかったら随時報告します。
test-fibonacci.launch を更新して2つのクライアントがあるようなテストにしました.
jenkinsを見ると時どき失敗しているんですよね.wait-for-serverとかでros:spin-onceしている
のが問題かと思って,デフォルトでspin queueを使おうと
~~~~~~
(:init
(ns spec &key ((:groupname gp)))
(send self :name ns)
(setq name-space ns)
;; (setq groupname gp)
(setq groupname ns)
[ERROR] [1370357880.961906112]: attempted to getNumPublishers to topic fibonacci/feedback, which was not previously subscribed. call (ros::subscribe "fibonacci/feedback") first.
~~~~~~~
とでてくるんですが,どうしたらいいでしょうか?
新しいキューを持ったnodehandleをあらかじめ作っておく必要がある仕様でした。
actionlibの中でgroupnameのキューを持つnodehandleを作るように[r4536] で修正しました。
ちなみに、ros::create-nodehandle groupname を同じgroupnameで複数回呼んでも2回目以降は
何もせずに返ってくるので問題ありません。
Related
Commit: [r4536]
actionlibを異なるキューでsubscribeしたかった元々の理由は、
時間がかかるセンサ系のspinとwait-interpolationなどでのspinを分けたかったからです。
オリジナルのキューか、異なるキューかでactionlib自体の動作が変わる理由は無いように
思います。いずれにしろ、複数クライアントで失敗する理由は追求が必要ですが。
[r4616]でサーバ側もqueue sizeを0にしてみました.
で,添付のactionlib.txtで;; test-fibonacci 56/1000 は上手く行っているけど,;; test-fibonacci 57/1000ではダメなのは以下の状況で,result-cbされたあと,status-cbがきて simple-state が更新されることがきたいされているんだけど,それが来ずに次の(別クライアントの)ゴールのreuslt-cbが来ている気がします.
以下のようにして治らないでしょうか?
Related
Commit: [r4616]
action_client.pyの
def update_result(self, action_result):
でも,
self.transition_to(CommState.DONE)
としている,ということで,以下のようにすると良さそうです.
一応,test-actionlib.lや,pr2eusのpr2-ri-test.launch は通っているようです.他に確認するものはあるかな.[r4619]でコミットしました.
Related
Commit: [r4619]
Last edit: Kei Okada 2013-06-10
テストも一応通っているのでcloseします.
[#54]の問題はこれと関係あるかは不明ですが,[#54]自体は時どき起こる気がします.
Related
Tickets: #54