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

jsk_apc の認識プログラムをマスターする #2007

Closed
k-okada opened this issue Feb 8, 2017 · 31 comments
Closed

jsk_apc の認識プログラムをマスターする #2007

k-okada opened this issue Feb 8, 2017 · 31 comments

Comments

@k-okada
Copy link
Member

k-okada commented Feb 8, 2017

@itohdak @Affonso-Gui @YutoUchimi @708yamaguchi がマスターしたいです.
作戦はみんなと使っている環境が被らないように、fetch とどこからかデスクトップを調達して

  1. どこかの計算機に jsk_apc -> jsk_recognition まわりをセットアップする
  2. その計算機のマスターをfetchにして、認識プログラムをlaunchする
  3. 机の上においたAPC物品を認識してboundigboxを出す、

というところができたら、あとは演習と同じようにsubscribeしてikといてつかむことができるはず、ということで、計算機候補として、@pazeshunの机の下のデスクトップを3月までかりれないかな.代替品はz800とかがあるようです by @mmurooka

@pazeshun
Copy link
Collaborator

pazeshun commented Feb 8, 2017

はい、大丈夫です。
色々あって、そのデスクトップにはubuntuが2個、別々のHDDに入っている状態なのですが、その内の一個を使いますか?
それとも、HDD入れ直しますか? ubuntuインストールしなおしますか?

@pazeshun
Copy link
Collaborator

pazeshun commented Feb 8, 2017

あと、グラボが古いやつなんですが、それでもjsk_apcの認識プログラムって動きましたっけ

@pazeshun
Copy link
Collaborator

pazeshun commented Feb 8, 2017

いつから使いますか?

@wkentaro
Copy link
Member

wkentaro commented Feb 8, 2017

あと、グラボが古いやつなんですが、それでもjsk_apcの認識プログラムって動きましたっけ

FCNのためにはTitanあたりがほしいですね。そうでないとCPUモードになると思います。

@k-okada
Copy link
Member Author

k-okada commented Feb 9, 2017 via email

@knorth55
Copy link
Member

knorth55 commented Feb 9, 2017

以下の2つは同じものかな?
https://www.amazon.co.jp/gp/aw/d/B01M0C8QXE/ref=mp_s_a_1_1?__mk_ja_JP=%E3%82%AB%E3%82%BF%E3%82%AB%E3%83%8A&qid=1486601582&sr=8-1&pi=AC_SX236_SY340_QL65&keywords=titan+x&dpPl=1&dpID=41S2F9zYnnL&ref=plSrch
https://www.amazon.co.jp/gp/aw/d/B01JLKP3IS/ref=mp_s_a_1_2?__mk_ja_JP=%E3%82%AB%E3%82%BF%E3%82%AB%E3%83%8A&qid=1486601641&sr=8-2&pi=AC_SX236_SY340_QL65&keywords=titan+x&dpPl=1&dpID=41WfkzHAXxL&ref=plSrch

調べた限り、上の2つは同じものだと思います

ざっくりとした手順としては

  1. グラフィックカードを使う
  2. nvidia-driver, CUDA, chainerの導入(難関)
  3. ソースでPCLを入れる
  4. catkin_wsの構築、ビルド
    となるかとおもいます

@knorth55
Copy link
Member

knorth55 commented Feb 9, 2017

大会で使っていたstow taskのlaunchはグラフィックカードなしで走ってセグメンテーションができるのでそれを試してみてもいいと思います。

https://github.com/start-jsk/jsk_apc/blob/master/jsk_2016_01_baxter_apc/launch/segmentation_in_tote.launch

@k-okada
Copy link
Member Author

k-okada commented Feb 9, 2017 via email

@knorth55
Copy link
Member

knorth55 commented Feb 9, 2017

グラボが届き次第に用意したいと思います
4年生というとぼくと長谷川ですか?

@k-okada
Copy link
Member Author

k-okada commented Feb 9, 2017 via email

@pazeshun
Copy link
Collaborator

pazeshun commented Feb 9, 2017

とりあえず、明日、足元のデスクトップからデータ退避して、HDDをセットします

@yuyu2172
Copy link
Member

yuyu2172 commented Feb 10, 2017

すいません、z620は強化学習をやっている@ioryと僕が使いたいと思っていたので、そのために使わせてもらってもいいでしょうか?強化学習ではXeonのCPUが搭載されているPCが必要になり、現状では足りていないです。

かわりに、僕が使っているCore i7のPCの1つを使ってもらえたらと思います。
また、今年卒業される鎌田さんのPCもCore i7が入っているのですが、それも使って良いと思います。

ちなみに、どちらのPCにもTitan Xは入っていないので、GPUは追加で購入が必要になるかと思います。

@pazeshun
Copy link
Collaborator

わかりました。それでお願いします。

@knorth55
Copy link
Member

今日PCを用意してROSとpclをいれました
グラボが手に入り次第cudaなどを入れて行きたいと思います

@knorth55
Copy link
Member

【報告】
今週の月曜日には、B3がROS, PCL, GPU, cuda, chainer周りの環境は整えられていてfcnを使って認識プログラムを試していました
認識したあとのピッキングまで動作はしていたかはその時掃除をしていたので知りません

@Affonso-Gui
Copy link
Member

【報告】【追加】
月曜日は認識プログラムを試した後、実行、操作や設定で気になった点をまとめた(~/notes)だけで、ピッキングまでは至らなかった。時間ができ次第試しに行こうと思っています。

因みに研究室は土日でも行けたりするんですか。

@pazeshun
Copy link
Collaborator

大丈夫ですよ

@k-okada
Copy link
Member Author

k-okada commented Feb 23, 2017

@itohdak @Affonso-Gui @YutoUchimi @708yamaguchi

時間がある人がいたら、新しい物品が届いたので、以下を試してみるといいと思います.

  1. 今のDepthカメラでどういう画像がとれるか
  2. Kinect 2だとどういう画像がとれるか
  3. レーザセンサだとどいう画像が取れるか (multi sense を利用.multi sense は @knorth55 / @pazeshun にききながら、3号館地下か8号館3Fにあるロボットでとってみましょう)
  4. ステレオセンサだとどういう画像がとれるか (これもmulti senseを利用.うまく行きそうなら、ps4とかzedを使う)

#2018 (comment)

@wkentaro
Copy link
Member

@Affonso-Gui Where's the sample programs in b4apc PC?

@wkentaro
Copy link
Member

@Affonso-Gui We found it, thank you.

@708yamaguchi
Copy link
Member

テーブルの上の物体を掴むとき、普通に逆運動学を解いて手を伸ばすとテーブルと干渉してしまいます。
全体の点群から掴みたい物体のbounding boxの部分を除いた点群をCollision objectとしてMoveitに送ればテーブルと干渉しなくなると思うのですが、Moveitの使い方はどこを参考にすればよいでしょうか。
@knorth55

@knorth55
Copy link
Member

knorth55 commented Mar 3, 2017

@708yamaguchi
Moveit!のplanning sceneにテーブルを追加することでそれを避けた動作計画を行ってくれます。
http://docs.ros.org/indigo/api/moveit_tutorials/html/doc/pr2_tutorials/planning/src/doc/planning_scene_tutorial.html

点群をCollision Objectとする場合はOctomapとして登録するのがいいと思いますが、これはぼくはやったことがないので詳しくないです。
机の環境が既知なのであればEuslispのCubeなどのobjectでそれを再現してSceneに追加することは可能です。
これは
https://github.com/jsk-ros-pkg/jsk_pr2eus/blob/master/pr2eus_moveit/euslisp/collision-object-publisher.l
を参考にして下のようにcollision-object-publisherで追加することができます

(setq *co* (instance collision-object-publisher :init))
(setq cube (make-cube 30 30 30))
(send *co* :add-object  cube :frame-id 'base' :relative-pose (make-coords :pos #f(0 0 0) :rpy #f(0 0 0))

sceneの削除は

;; delect one object
(send *co* :delete-object cube)
;; delete all objects
(send *co* :wipe-all)

で削除することができます

@708yamaguchi
Copy link
Member

@knorth55
丁寧に答えてくださってありがとうございます。まずはsceneの追加・削除をやってみようと思います。

@YutoUchimi
Copy link
Collaborator

@knorth55
以下のように立方体をfetchの目の前において逆運動学を解いて(立方体を避けるつもりで)アームを動かしてみましたが、立方体の内部を通過してしまいます。どうすれば避けられるか教えてください。
fetch_and_cube

実行したのは以下のプログラムです。

#!/usr/bin/env roseus

(ros::load-ros-manifest "jsk_recognition_msgs")
(ros::load-ros-manifest "geometry_msgs")
(ros::load-ros-manifest "jsk_pcl_ros")
(ros::load-ros-manifest "std_msgs")
(ros::load-ros-manifest "roseus")

(require "package://fetcheus/fetch-interface.l")

(fetch-init t)

(setq *co* (instance collision-object-publisher :init))
(setq cube (make-cube 800 800 800))
(send cube :locate #f(1000 0 400))
(send cube :set-color :green)
(objects (list cube *fetch*))
(send *co* :add-object  cube
           :frame-id 'base'
	   :relative-pose (make-coords :pos #f(0 0 0) :rpy #f(0 0 0))
	   )

(send *ri* :angle-vector (send *fetch* :inverse-kinematics (make-coords :pos (float-vector 1000 0 1000))) 5000)

@knorth55
Copy link
Member

knorth55 commented Mar 9, 2017

まずrvizでmoveit!のプラグインからsceneにこのcubeが追加されているかを見てみてください。
sceneが正しくaddされている場合は以下のようなcubeがrviz上でもみえるはずです(デフォルトは緑色でこの画像は色を変更しています)

@YutoUchimi
Copy link
Collaborator

@knorth55
原因がわかりました。ありがとうございました。
jsk-ros-pkg/jsk_robot#756

@knorth55
Copy link
Member

これは今どんな感じですか?
@YutoUchimi @Affonso-Gui

@708yamaguchi
Copy link
Member

708yamaguchi commented Mar 22, 2017

@knorth55
OrganizedMultiPlaneSegmentationで平面検出をして、その平面の各頂点の情報から平面を直方体に近似してsceneに送ることで机の認識をしてみました。
https://github.com/708yamaguchi/jsk_apc/blob/develop/jsk_apc2016_common/node_scripts/polygon_array_to_collision_object.py

スマホの写真で申し訳ないのですが、認識結果は以下のようになりました。

@wkentaro
Copy link
Member

物体の位置を認識するためのデータセットを作るプログラムをマージしたので、
時間があるときに試してみてください。
やり方はここ: #2028
Tutorial動画がここ: https://drive.google.com/open?id=0B9P1L--7Wd2vNVZPdnpzdllRamc
にあります。

プロセスとしては、以下の2つで、

  1. Baxterで画像データを集める。
  2. アノテーションをする。

「認識システムをマスターする」ためには一度試してもらうといいかと思います。

@knorth55
Copy link
Member

knorth55 commented Apr 3, 2017

Fetchで認識からピッキングまで一連の流れは実現できていると思います。 (#2045
https://drive.google.com/file/d/0BxzzMEwOXXe9SXVZT1pHc1lCMDg/view

次はARCの設定のように色々な物品がある中から、指定された1つをとれるようにしたらいいのではないでしょうか?
テーブルトップでもいいですが棚でもいいとおもいます。
次に考えるべきことは

  • 複数物体があるときの把持計画
    • 指定されたものだけを取る
    • 取るときに他の物体を落としたり損傷しない
  • 認識精度をあげる
    • 学習データを増やす
  • 把持物体を含めた動作計画
    • 衝突回避
    • IKがとけるか

@wkentaro
Copy link
Member

Please reopen if you need.

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

No branches or pull requests

8 participants