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

Fix travis indigo #120

Merged
merged 61 commits into from
Aug 20, 2018
Merged

Fix travis indigo #120

merged 61 commits into from
Aug 20, 2018

Conversation

MoriKen254
Copy link
Member

Indigo版、Travis 通りましたので、プルリクです。

メインとなるルーチンに影響を与えていない認識ではあるのですが、マージする前に、動作確認お願いします。

@MoriKen254
Copy link
Member Author

ご指摘いただいた2件の不要な依存関係を除外し、Travisが通ることを確認しました。

どうでしょう。

@TakakiNishio
Copy link
Contributor

今回のご変更で、catkin_make が通るようになりました!
2つのPCで確認できたので、大丈夫かと思われます。

@MoriKen254
Copy link
Member Author

ありがとう!助かります!(不備がまだまだ多く、ごめんなさい汗)

あとは、実機もindigoのままかな?それなら、念の為実機で簡単に確認してみてもらって、問題がなければマージをお願いします。

@TakakiNishio
Copy link
Contributor

実機での確認が大変遅くなり申し訳ありません。
実機はindigoのままです。

下記のコマンドを別々のターミナルで実行し、Rviz上のインタラクティブマーカーで指定した手先位置に実機を動かす試験を行いました。

$ roscore
$ roslaunch motoman_control sia5_with_dhand_and_multi_kinect_streaming.launch
$ roslaunch motoman_control sia5_real_control.launch
$ roslaunch motoman_moveit sia5_with_dhand_moveit_planning_execution.launch

これらのコマンドは現在実機で運用している demo/devel ブランチで動作確認ができているものです。
fix-travis-indigo ブランチで上記のコマンドを実行し、RvizとMoveit!が立ち上がっている状態でインタラクティブマーカーを動かして Plan → Execute を実行すると、Execute時に下記のエラーが発生しました。

[ INFO] [1534227275.021400200]: Received new trajectory execution service request...
[ INFO] [1534227275.021538893]: Returned 0 controllers in list
[ERROR] [1534227275.021584391]: Unable to identify any set of controllers that can actuate the specified joints: [ joint_b joint_e joint_l joint_r joint_s joint_t joint_u ]
[ERROR] [1534227275.021610278]: Known controllers and their joints:

このエラーの原因は sia5_with_dhand_moveit_planning_execution.launch において controllers_config/sia5_with_dhand/fake_controllers.yaml が指定されていることと思われたので、takaki/fix-travis-indigo ブランチで変更 584042f を加えたところ、正常に動くようになりました。

変更点は、sia5_with_dhand_moveit_planning_execution.launch における controllers_configmoveit_planning_execution.launch のdefaultから設定するようにした点です。

この対処法は最適ではないと思いますが、似たようなエラーが indigo-devel ブランチでも発生するため、何らかの対策が必要かと思われます..

@MoriKen254
Copy link
Member Author

@TakakiNishio
確認ありがとうございます!やっぱり動かさないとですね。

さて、状況は理解しました。下記2つのファイルを比較し、現状の問題を解決する手段を見つけて、実機での動作を確認してみて下さい。

デフォルトで読んで動作しているmotoman_moveit/config/sia5/controllers.yaml

controller_list:
  - name: sia5_controller
    action_ns: follow_joint_trajectory
    type: FollowJointTrajectory
    default: true
    joints:
      - joint_s
      - joint_l
      - joint_e
      - joint_u
      - joint_r
      - joint_b
      - joint_t

もともと読んでいて動作不良を起こしたファイルmotoman_moveit/config/sia5_with_dhand/fake_controllers.yaml

controller_list:
  - name: fake_arm_controller
    joints:
      - joint_s
      - joint_l
      - joint_e
      - joint_u
      - joint_r
      - joint_b
      - joint_t
  - name: fake_gripper_controller
    joints:
      - dhand_finger_base_left_joint
      - dhand_finger_middle_left_joint
      - dhand_finger_top_left_joint
      - dhand_finger_middle_middle_joint
      - dhand_finger_top_middle_joint
      - dhand_finger_base_right_joint
      - dhand_finger_middle_right_joint
      - dhand_finger_top_right_joint

以下、私の所感。参考程度に。

  • 後者を編集したものを、fakeではないほんちゃん用のcontrollers.yamlに昇格させる。
  • motoman_moveit/launch/sia5/sia5_with_dhand_moveit_planning_execution.launchでコメントアウトした下記ラインを復活させ、fakeではないyamlファイルを明示的に読み込む。
<!-- <arg name="controllers_config" value="$(find motoman_moveit)/config/sia5_with_dhand/fake_controllers.yaml"/> -->

取り急ぎ。

@TakakiNishio
Copy link
Contributor

ご返信ありがとうございます!

ご提案いただいたアドバイスを参考に、takaki/fix-travis-indigoブランチにおいて変更 072ad0e を加えました。

実機で問題なく動作することが確認できましたので、こちらもfix-travis-indigoブランチにマージしてよろしいでしょうか?

@MoriKen254
Copy link
Member Author

ありがとうございます!実機での動作確認も、いいですね。

072ad0e を確認しました。

念の為確認ですが、以下のgripper側のコントローラの対応は不要でしょうか?launchファイルの名称を見る限り、dhandに対応していると思われるので。せめてfakeぐらい入れておく必要は?

もし不要であればこのままマージ、必要であれば対応してからマージとしましょう。一回ご自身で調べて判断してみてもらえますか?

8月中で様子を見て、やっぱり不要と言うことであれば、マージしてしまいましょう。

判断基準は?

  • gripper 側のコントローラをきちんと設定する上で得られるメリットは?
  • gripper 側のコントローラの欠落によって生じるデメリット・問題点は?
  • 上記について比較して、頑張っても得られるメリットが小さいな、と判断されれば放って置く。

たとえば、gripper 側のコントローラをちゃんと設定しないと、MoveItと連携する上で何かできなくなってしまうことはないか?等

私は実装者ではないのではっきり回答できないのですが、実績的には問題ないのかなーと、思っています。

ちょっと調べてみた

これを見ると、一応gripperのコントローラが定義されているようですね。arm用で言うところのFollowJointTrajectoryに対して、gripper用のaction としてGripperCommandというものがあるらしいので、真面目にお作法に乗っかるならこれを使うのかな、というイメージです。

これはoptionalだと、こちらにも記載されているようですしね。

一応motomanの他のconfigをざっと見てみたのですが、jammingについてもGripperCommandを使っている形跡がないので、現状問題は起きていないのかな、と推察しています。

運用上は、プランニングをMoveItにやらせて、pickingは独自のROS MessageでI/Fさせている、という感じ?

この辺りの実機の仕様は、OBの @Ry0 くんとか @RyodoTanaka くん辺りが反応してくれると @TakakiNishio くん助かるんじゃないかな、と思います。

もう少し具体的に

  - name: fake_gripper_controller
    joints:
      - dhand_finger_base_left_joint
      - dhand_finger_middle_left_joint
      - dhand_finger_top_left_joint
      - dhand_finger_middle_middle_joint
      - dhand_finger_top_middle_joint
      - dhand_finger_base_right_joint
      - dhand_finger_middle_right_joint
      - dhand_finger_top_right_joint

これをfakeではないコントローラにしたものを登録する必要があるか?という議論です。dhand側のコントローラの情報は下記ファイルが参考になるのかなと思っています。

@RyodoTanaka
Copy link
Member

RyodoTanaka commented Aug 15, 2018

@MoriKen254 @TakakiNishio
gripperのコントローラですが,設定していません.経緯と理由は以下のとおりです.

経緯と理由

ジャミンググリッパ

通常のピッキング(チャックで挟むようなピッキングを指す)を行うことができなかったため,コントローラを設計しませんでした.

D-Hand

D-Handは閉リンク機構を有しているためURDFに記述できず,仮にコントローラを設計したとしてもその開閉をうまく反映できないので,設定していません.
また,仮に設定するのであれば,実際の開閉に使用されている位置決めサーボモータ(IAIのやつ)のjointを新たにURDFに記述し,そこにコントローラを設定する必要があります.

コントローラを設計しないメリット

  • 煩雑な設定を行わなくてすむ.
  • 状態遷移(今はPythonで直書きです.Smach使ったほうが良いですね.)さえきちんと組んでおけば,特にMoveit!に任せなくても良い.

設定しないことによるデメリット

  • Moveit!のピッキングタスクにおいて,把持対象を把持したあと,手先リンクにひっつけたままのプランニングを行うことができない...かもしれない.(これは調査が必要)
    詳しくは,NASに上がっているROS本(洋書)に通常の場合のセッティング方法とその例としてリポジトリの紹介があるのでそれを参考にすると良いかも.

  • Moveit!に一応用意されているのに使わないのは後々何かありそう..?

以上です.よろしくお願いします.

@RyodoTanaka
Copy link
Member

すみません.
間違って閉じてしまいました...orz

@RyodoTanaka RyodoTanaka reopened this Aug 15, 2018
@RyodoTanaka
Copy link
Member

RyodoTanaka commented Aug 15, 2018

仮にD-Handのグリッパコントローラを設計するのであれば

  • IAIの位置決めサーボに与える値を元にFKを解いて閉リンク機構の各joint値を算出し,JointState に Publish する.もちろん,IAIの位置決めサーボのjoint位置(joint の種類は prismatic)もPublish する.
  • IAIにmodbus経由で位置司令を送る.(これはすでにdhand_driverにて実装済み)

上記の2つをaction messageを介して行ってくれるようなドライバを作成する必要があるかと思います.
modbusについては,Pythonライブラリの minimalmodbusというのを使って制御してあります.
minimalmodbusについてわからなければ, @thibaultbarbiedhand_driverを作ってくれた人なので,聞いてみると良いと思います(英語のリファレンスも用意してくれてたので,とりあえずもらって読んでみると良いと思います).
逆に,Pythonでしか実装していないので,C++で実装する必要が出てくると,modbus の C++ライブラリを探してくるところからやる必要があります.

modbus ってそもそも何?というのはググればわかりますが,大雑把に言うと FA機器に広く使われている通信規格みたいなもんです.

以上,補足でした.
よろしくお願いします.

@MoriKen254
Copy link
Member Author

詳細なご解説、ありがとうございます!

閉リンクが絡んでいて、色々厄介なことがよくわかりました。

理解の確認

そして、現状のシステムにおいて、dhandが初期状態以外の開き具合だと、MoveIt側が現実の情報を把握できないために、例えば障害物回避ができない可能性がありそうですね。

それを解決するためには、アクチュエータの位置に合わせて他のJointの現在値を仮想的に計算してjoint_statesにパブリッシュする必要がある。(私がSteering Drive Controllerを作ったときにも似たような対応をしました汗。ROS2でこの辺もいい感じに直ってくれたら嬉しいのですが…。)

順運動学はそれで良さそうな気がします。この状態をjoint_statesにさえ送っておけば、グリッパとアーム先端間の逆運動学もMoveIt側に任せても大丈夫、なんだと思っています。

action を介してIAIドライバに司令を送るdriverノードが必要なことも、よく分かりました。
modobus周りは @thibaultbarbie くんに聞けば良さそうですね。メッセージのハンドリングだけなので、速度の問題さえなければ、Pythonで十分な気はします。

以上を統合したMoveIt対応ROS パッケージを完成させようとしたら、それなりのパワーが必要ですね。

これまでは、dhandの開閉状態を評価しなければならないほどシビアな判定を要するデモもなく、まずは動作させることを優先する必要があったという経緯もあったでしょう。詳細な仕様を意識しすぎてデモができないのでは、元も子もありませんからね。現状のパッケージ構成となっている理由が良く分かりました。

情報がクリアになりました。ありがとうございます。

マージについて

まず本プルリクはマージし、当該案件はIssueとして残しておいて、必要となったとき or 趣味で対応するようにして良さそうですね(デイタイムにlab常駐してフルコミットできるなら、私でもいくらでも実装したいのですが…笑 😭 )。

ブランチの整理

質問ついでですが、demo/develindigo-develの違いがあるみたいですけど、demo/develの内容もindigo-develに混ぜ込んじゃっていいんですかね。demo/stableってブランチも気になる笑。

というのも、最近ブランチが増えてしまったので、整理したいなと。本件も一旦本プルリクをマージした後、別Issueにしようと思います。

@RyodoTanaka
Copy link
Member

RyodoTanaka commented Aug 16, 2018

@MoriKen254

IKについての質問

順運動学はそれで良さそうな気がします。この状態をjoint_statesにさえ送っておけば、グリッパとアーム先端間の逆運動学もMoveIt側に任せても大丈夫、なんだと思っています。

これは単純な質問なんですが,Gripper部分もMoveit!はIKを解いてくれるんですかね?
Moveit! setup assistant で設定する際に,D-Handの手先まで Arm グループに入れてしまえばできるとは思うのですが,それはMoveit!の設計趣旨違うと思ってます.
なので,仮にMoveit!対応のD-Handコントローラを仮に設計したとしても,D-Hand部分についてはIKは解いてくれないものと考えてました.

ブランチについて

最近ブランチが増えてしまったので、整理したいなと

これについては, @Ry0 もSlackでちょいちょい気にしてました笑
僕も気にはなってたんですが,かと言って僕らが口を出して現役の方の混乱を生むのの良くないなと思ってたんで,研究室所属の方にお任せしたいと思ってます.

demo/develindigo-develの違いがあるみたいですけど、demo/develの内容もindigo-develに混ぜ込んじゃっていいんですかね。demo/stableってブランチも気になる笑。

これには経緯があるのでご説明します.

1. まずindigo-develをつくりました.

作成当時,indigoの安定版ブランチを作っておかないとまずいなという話になると同時に,そろそろkineticにも移行したいという思いから,とりあえずindigo-develkinetic-develをそれぞれ作り,ルートブランチをmasterからindigo-develに変えました.ちなみに,masterブランチは安定版として機能していなかった...orz

2. 安定版ブランチで躓く

indigo-develを安定版にすべく,Travisのテストを遠そうとしましたが,industrial_ci導入前のTravisのテストでrosdepに問題があり,うまくTravisを通すことができないでいました.
さらに,industrial_ciにチャレンジするも,こちらもテストに失敗するという躓きっぷりでした...
industrial_ciについては @MoriKen254 も良くご存知 & 超絶助けていただいている通りです.( #113 #117 を参照 )

3. とりあえずの安定版ブランチが必要になる

indigo-develがうまく行かない(ビルドすら失敗することが多々あった)にもかかわらず,実験室でのデモを求められることが多かったので, @TakakiNishio により,demo/stableブランチが作られました.

4. demo/develについて(憶測)

上記までは僕が所属していた間の話です.demo/develについては,名前から察するにdemo/stableの開発版ブランチだと思います.

以上が経緯です...
で,結局どうするかという話ですが, @MoriKen254 のおかげでTravisのテストが通っているので,当初の設計どおりに行くなら,indigo版はindigo-develへマージ,kinetic版はkinetic-develにマージするのが良いと思います.研究室のメインのROSバージョンがどうなってるのか知らないのでindigo-develkinetic-develのどちらをルートブランチにするのかは現役の方で決めて頂きたいです.

そもそものブランチルールを変える時に来ているのかもしれない...

これは,個人的に思うことですが,現在は研究室メンバーそれぞれの開発をNishida-Labのリポジトリに直接ブランチを切ってCommitしています.これは,motoman_projectが始まった当初の開発人数が少なかった時には特に問題ないルールだったのですが,現在のように開発人数が増えてくるとブランチが増えすぎて機能しなくなるというのは想像に難くないと思います.
そこで,これまでは新入生の理解が複雑になるという理由でさけていたのですが,Nishida-Labのmotoman_projectをそれぞれのGithubアカウントでForkしてもらって,そこで開発を行ってもらい,研究室全体にとってマージすべきものをPRを出して管理するという,通常のGithubの使い方に則るのが良いと思います.
これについても,実際に行うのは現役の方々なので,そちらで決めてください!

以上,長くなりましたが,よろしくお願いします.

@MoriKen254
Copy link
Member Author

MoriKen254 commented Aug 16, 2018

丁寧に対応いただき、ありがとうございます。

IKについて

Setup Assistantの設定画面を見返したのですが、確かにGripper のAction定義とIKは無関係そうですね。失礼しました ^^; (いつもこんな感じで早とちりしてすみません汗。)

それとは別に、End Effectorという項目で、Grasping Frameを定義することで、把持位置についてIKが解けるっぽいじゃないかなと思っています。(多分フレームが追加されるだけなので、やってるんだろうなぁという意識ですが ^^;)

ひとまず、現状多大な工数をかけてグリッパ側のコントローラをMoveIt!対応させなくても、demoは可能そうですね。

ブランチの整理

こちらもよくわかりました。ずっとモヤモヤしていた感じですね ^^; ようやっと ci が通ったということで、見通しが立ちましたね。

やることはざっと下記のとおりですね。

fix ci 周りの残骸をお掃除

とりあえずプルリク承認されたら、ci関連の残骸を一掃しましょう。

demo 関連ブランチの整理

demo 関連も、プルリク承認後のindigo-develなら安定してビルドが通るはず。

てなわけで、demo/stable を indigo-develにマージして、demo/stableを削除。

demo/devel の正体を暴き、不要なら削除。必要な開発項目が残っていれば indigo-develにマージ。

ルートブランチ

これは、実機側に合わせるしかないですね。indigoのうちはindigo-devel, kineticに以降したらkinetic-develにする感じで。

これをどうするかは、おっしゃる通り現役メンバーで決めるべきですね。

Fork について

おっしゃる通り、こちらは現役メンバーで決めることにしましょう。

ありがとうございます!

@TakakiNishio
Copy link
Contributor

色々と遅くなり,申し訳ありません。
ひとまず本プルリクは承認させていただきます。
その上で下記項目については別のissueでの議論にさせていただきます。

D-hand の IK について

現状のデモではgripperのコントローラは必要ないですが、近い将来必要になりそうです(その頃にはD-Handじゃないハンドになってるかも..?笑)

ブランチ整理について

ルートブランチ・Fork について

demo/develdemo/stable の開発ブランチでした。長い間マージしていませんでしたが、変更をdemo/stable にマージしたのでdemo/develは削除しました。)

@TakakiNishio
Copy link
Contributor

すみません、マージしてから閉じます。

@TakakiNishio TakakiNishio merged commit 01eb659 into indigo-devel Aug 20, 2018
@TakakiNishio TakakiNishio deleted the fix-travis-indigo branch August 23, 2018 11:03
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.

4 participants