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

revert cmd_vel_renamer, so that we can send /cmd_vel topic, c.f #407 #418

Merged
merged 2 commits into from
Nov 24, 2021

Conversation

k-okada
Copy link
Member

@k-okada k-okada commented Nov 22, 2021

@kindsenior
#407https://github.com/jsk-enshu/robot-programming/pull/407/files#diff-08e0e0faabe14a0737b8228dc366c0cdb979c4bba52880aa00c60c593ab195abL15-L16
/cmd_vel/mobile_base/commands/velocity の別名として使うコードを消しているんだけど,これ必要かな?

世の中的には cmd_vel が一般的で,teleop_twist_keyboard.py もデフォルトこれなので,消す必要ないと思うんですがいかがでしょうか?
もし,enshuロボットは,/mobile_base/commands/velocity で行くんだということだとすると,

"topic": {
"type": "repr",
"repr": "u'/cmd_vel'"
},

の部分を変更する必要があるかとおもいます.
もしこれで良ければ,マージして,以下に善後策を伝えていただければと思います.
#416 #417

%新しくコードを追加する前に Travisなり GithubAction なり使えるように戻すべきでした...

@kindsenior
Copy link
Collaborator

kindsenior commented Nov 23, 2021

すみません 遅くなりました

変更 #407 の目的はシミュレーションと実機のlaunchを共通化するためです
(joystickの課題でgazeboとjoystickのlaunchを起動するとcmd_vel_renameのノード名が重複する)

これは/cmd_velの別名を消したいということではなくて,
mobile_baseを出すパターン(旧gazebo):/cmd_vel → /mobile_base/commands/velocity
から
cmd_vel_muxを出すパターン(実機):/cmd_vel → /cmd_vel_mux/input/teleop
に変更してgazeboと実機のrelayの流れを共通化したということです
cmd_vel_muxへのrelayはjoystickのlaunchでやってくださいということです

やりたいこととしてはjoystickの課題でgazeboと実機でlaunchが起動して正常に動作すればよいだけなので以下は考えどころなんでしょうか...?
a) 実機に合わせてcmd_vel_muxとした方がいいと思いましたが,今確かめたら実機もmobile_baseパターンで動く気がしてて,cmd_vel_muxが本当に必要なのか(試したときに複数のvelコマンドが出てないだけ?)が分からなくなってます...?
cmd_vel_muxではなくmobile_baseに直接relayする方に合わせるのもあるかもしれません?
b) 1日目演習資料の課題1のところには「cmd_velを使ってもいい」とあるところに「joystickを起動しろ」と書き忘れてたので,relayするlaunchは考えたほうがいい気もします?(ただし,その場合,turtlebot_bringup/minimalの方に入れるのは変なので,dxl_armed_turtlebot/minimal.launchみたいな演習用のminimalが必要になる?)

@k-okada
Copy link
Member Author

k-okada commented Nov 23, 2021

@kindsenior やりたいことの優先度としては

  1. 実機もシミュ−ションも cmd_vel で動いてほしい
  2. 実機もシミュレションも [turtleot](https://github.com/jsk-enshu/robot-programming/blob/master/dxl_armed_turtlebot/launch/turtlebot_joystick_teleop.launch が動いてほしい,ただし,別のlaunch fileファイルでもよい.
  3. 実機とシミュレーションでできるだけファイルは共通化したい.

gazebo では...

/cmd_vel -> ("cmd_vel_renamer") -> /mobile_base/commands/velocity -> ("gazebo")

gazebo -> https://github.com/yujinrobot/kobuki_desktop/blob/ea5b7283d92f61efbd1a2185b46e1ad344e7e81a/kobuki_gazebo_plugins/src/gazebo_ros_kobuki_loads.cpp#L347-L350

実機ではおそらく,
https://github.com/jsk-enshu/robot-programming/blob/master/dxl_armed_turtlebot/launch/turtlebot_joystick_teleop.launchは,

/cmd_vel -> ("cmd_vel_renamer") -> /cmd_vel_mux/input/teleop -> ("yocs_cmd_vel_mux/CmdVelMuxNodelet") -> /mobile_base/commands/velocity
/cmd_vel_mux/input/teleop_raw -> ("teleop_velocity_smoother")  -> /cmd_vel_mux/input/teleop -> ("yocs_cmd_vel_mux/CmdVelMuxNodelet") -> /mobile_base/commands/velocity
/joy -> (turtlebot_telop_joystick) -> /teleop_velocity_smoother/raw_cmd_vel -> ("teleop_velocity_smoother") -> /cmd_vel_mux/input_teleop ...

だと理解したとして,

  • gazeboも実機も/cmd_velをインターフェースにする
    • gazebo : cmd_vel を受け取る
    • 実機:cmd_vel を受け取る
  • gazeboも実機も/cmd_velをインターフェースにする.実機のvelocity_smooterはcmd_velの下に隠蔽する
    • gazebo : cmd_vel を受け取る
    • 実機:cmd_vel_-> ("teleop_velocity_smoother") -> /mobile_base/commands/velocity
  • gazeboも実機も/cmd_velをインターフェースにし,その下にMuxを配置する.さらに,実機のvelocity_smooterはcmd_velの下に隠蔽する
    • gazebo : cmd_vel -> ("cmd_vel_renamer") -> /cmd_vel_mux/input/teleop -> ("yocs_cmd_vel_mux/CmdVelMuxNodelet") -> /mobile_base/commands/velocity
    • 実機:cmd_vel_-> ("teleop_velocity_smoother") -> /mobile_base/commands/velocity

解としてはいろいろあって,

  • 一番簡単には 5bc2ef8 で,被害はないと思うんだけど.同じ名前のノードが立ち上がって,エラーがでるとか?その場合はノードの名前変えるなり,http://wiki.ros.org/roslaunch/XML#substitution_args$(anon ) にしたら良いのでは,
  • 5bc2ef8 + 実機のturtlebot_bringup/minimal.launch を立ち上げるときは turtlebot/turtlebot@4f414c9
    を使うようにする.(.rosinstall を使うとユーザへのインターフェースは wstool update なので,それがどのフォークのどのコミットかは隠蔽されている)
  • 実機でもgazeboでもCmdVelMuxNodelet で /cmd_vel_mux/input/teleop ではなく,/cmd_vel を受け付けるようにする.turtlebot/turtlebot@fc6f888

などでしょうか.

ちなみに,#416, #417 の人はこの会話を見て自分で,この2行を追加してGazeboでできました,と言ってきていて,これはこれで素晴らしいんですが,もし次の演習までに実機用のなにかコードをrobot-programmingに追加したとして,その時にwstool updateとしてくださいといっても,localに変更があるというエラーがでるはずです.で,そのときには,エラーに気づかず,新しい反映がないワークスペースで作業を進めて動かない,エラーに気づくけど,それを解決する方法がわからない,の2つの可能性があり,これは,問題がおきたときに,トラブルの発見からして難しいパターンになるとおもいます.

そう考えると理想的には何でも良いので動くPRをマージして,wstool update してください,で解決するのが,greedyな評価関数として,結構有効だったりします.

@k-okada
Copy link
Member Author

k-okada commented Nov 24, 2021

実機もシミュ−ションも cmd_vel で動いてほしい

の前提は1つのlaunchを動かしたら,この状態にしたい,ということなので,もし,turtlebot_joystick_teleop.launch を立ち上げればよいのでは?ということだったら,dxl_armed_turtlebot_gazebo.launchにこれをインクルードして,かつ,dxl_armed_turtlebot/minimal.launch にもこれを入れる形にするんだとおもいます.ただこの場合,演習の資料を遡って変更(つまりturtlebot_joystick_teleop.launch)を別途たちげるようにはしない)という変更が必要になるって,すくなくとも演習の時点で動いた資料を直すのは,混乱の元だと思うので,やっぱり,これ以外の作戦で,とにかく早めに, 現状,講義の宿題がそのまま動かない状況を修正したいです.

@kindsenior
Copy link
Collaborator

#419 で対応しました
anonにするのがどちらか迷いましたが,とりあえずjoystickのrenamerをanonにしました
逆がいいなら直します
これでどうでしょうか?

演習だけでなく授業の資料の資料も考えないといけないということを深く理解しました
申し訳ございません...

@k-okada k-okada merged commit 5bc2ef8 into jsk-enshu:master Nov 24, 2021
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

Successfully merging this pull request may close these issues.

2 participants