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

2018年度ゼミ #1248

Open
k-okada opened this issue Oct 17, 2018 · 38 comments
Open

2018年度ゼミ #1248

k-okada opened this issue Oct 17, 2018 · 38 comments

Comments

@k-okada
Copy link
Member

k-okada commented Oct 17, 2018

catkin b peppereus

emacs で M-x shellしたあと,

source ~/semi_ws/devel/setup.bash
roscd peppereus
roseus pepper-interface.l

EusLisp上で

(load "package://peppereus/pepper-interface.l")
(pepper-init)

(objects (list *pepper*))
(dotimes (i 100)
  (send *pepper* :angle-vector (float-vector 2.0 -2.0 (+ -5.0 i) 85.0 10.0 (+ -70.0 i) -20.0 -40.0 85.0 -10.0 70.0 20.0 40.0 0.0 0.0))
  (objects (list *pepper*)))

(send *ri* :angle-vector (send *pepper* :angle-vector))

pepper , nao, pr2, fetch などが利用可能.
https://github.com/jsk-ros-pkg/jsk_robot/tree/master/jsk_fetch_robot も参考になる.

@ykawamura96
@konoha4303
@Yu1313321
@nakaotatsuya

@ykawamura96
Copy link

ykawamura96 commented Oct 18, 2018

@k-okada
前回のゼミと同様にcatkin build naoeus は成功して, naoのモデルを表示させ関節の角度を指定できましたが, catkin build fetcheusは以下のように失敗してしました.
source ~/../../opt/ros/kinetic/setup.bash としてもダメでした. どうしたらよいか教えてくださると幸いです.

mech-user@test1-pc:~/semi_ws/src/jsk_robot/jsk_fetch_robot/fetcheus$ roseus fetch-interface.l 
configuring by "/opt/ros/kinetic/share/euslisp/jskeus/eus//lib/eusrt.l"
;; readmacro ;; object ;; packsym ;; common ;; constants ;; stream ;; string ;; loader ;; pprint ;; process ;; hashtab ;; array ;; mathtran ;; eusdebug ;; eusforeign ;; coordinates ;; tty ;; history ;; toplevel ;; trans ;; comp ;; builtins ;; par ;; intersection ;; geoclasses ;; geopack ;; geobody ;; primt ;; compose ;; polygon ;; viewing ;; viewport ;; viewsurface ;; hid ;; shadow ;; bodyrel ;; dda ;; helpsub ;; eushelp ;; xforeign ;; Xdecl ;; Xgraphics ;; Xcolor ;; Xeus ;; Xevent ;; Xpanel ;; Xitem ;; Xtext ;; Xmenu ;; Xscroll ;; Xcanvas ;; Xtop ;; Xapplwin 
connected to Xserver DISPLAY=:0
X events are being asynchronously monitored.
;; pixword ;; RGBHLS ;; convolve ;; piximage ;; pbmfile ;; image_correlation ;; oglforeign ;; gldecl ;; glconst ;; glforeign ;; gluconst ;; gluforeign ;; glxconst ;; glxforeign ;; eglforeign ;; eglfunc ;; glutil ;; gltexture ;; glprim ;; gleus ;; glview ;; toiv-undefined ;; fstringdouble irtmath irtutil irtc irtgeoc irtgraph ___time ___pgsql irtgeo euspqp pqp irtscene irtmodel 
;; extending gcstack 0x5bd69d0[16374] --> 0x60a36b0[32748] top=3f12
irtdyna irtrobot irtsensor irtbvh irtcollada irtpointcloud irtx eusjpeg euspng png irtimage irtglrgb irtgl irtglc irtviewer 
EusLisp 9.25( 1.2.0) for Linux64 created on ip-172-30-1-26(Fri Aug 24 10:32:54 PST 2018)
roseus ;; loading roseus("1.7.1") on euslisp((9.25 ip-172-30-1-26 Fri Aug 24 10:32:54 PST 2018  1.2.0))
eustf roseus_c_util Call Stack (max depth: 20):
  0: at (apply #'ros::load-org-for-ros ros::fullname args)
  1: at (apply #'ros::load-org-for-ros ros::fullname args)
  2: at (let ((ros::fullname fname)) (when (substringp "package://" fname) (setq ros::fullname (ros::resolve-ros-path fname)) (when ros::*compile-message* (let* ((ros::urlname (url-pathname fname)) (package-name (send ros::urlname :host)) (ros::path-name (format nil "~A_~A" package-name (substitute 95 47 (concatenate string (subseq (send ros::urlname :directory-string) 1) (send ros::urlname :name))))) (ros::old-module (find ros::path-name *loaded-modules* :key #'lisp::load-module-file-name :test #'equal))) (unless ros::old-module (let* ((ros::ppath (unix:getenv "CMAKE_PREFIX_PATH")) (dir (format nil "~A/share/roseus/ros/~A" (subseq ros::ppath 0 (position 58 ros::ppath)) package-name))) (unless (probe-file dir) (unix:mkdir dir)) (compiler:compile-file-if-src-newer ros::fullname (format nil "~A/~A" dir ros::path-name)) (return-from load (load (format nil "~A/~A.so" dir ros::path-name) :entry (format nil "___~A" ros::path-name)))))))) (if (null ros::fullname) (error "file ~s not found" fname)) (apply #'ros::load-org-for-ros ros::fullname args))
  3: at (require :fetch "package://fetcheus/fetch.l")
  4: at (require :fetch "package://fetcheus/fetch.l")
  5: at (apply #'ros::load-org-for-ros ros::fullname args)
  6: at (apply #'ros::load-org-for-ros ros::fullname args)
  7: at (let ((ros::fullname fname)) (when (substringp "package://" fname) (setq ros::fullname (ros::resolve-ros-path fname)) (when ros::*compile-message* (let* ((ros::urlname (url-pathname fname)) (package-name (send ros::urlname :host)) (ros::path-name (format nil "~A_~A" package-name (substitute 95 47 (concatenate string (subseq (send ros::urlname :directory-string) 1) (send ros::urlname :name))))) (ros::old-module (find ros::path-name *loaded-modules* :key #'lisp::load-module-file-name :test #'equal))) (unless ros::old-module (let* ((ros::ppath (unix:getenv "CMAKE_PREFIX_PATH")) (dir (format nil "~A/share/roseus/ros/~A" (subseq ros::ppath 0 (position 58 ros::ppath)) package-name))) (unless (probe-file dir) (unix:mkdir dir)) (compiler:compile-file-if-src-newer ros::fullname (format nil "~A/~A" dir ros::path-name)) (return-from load (load (format nil "~A/~A.so" dir ros::path-name) :entry (format nil "___~A" ros::path-name)))))))) (if (null ros::fullname) (error "file ~s not found" fname)) (apply #'ros::load-org-for-ros ros::fullname args))
  8: at (require "package://fetcheus/fetch-utils.l")
  9: at (require "package://fetcheus/fetch-utils.l")
/opt/ros/kinetic/share/euslisp/jskeus/eus/Linux64/bin/irteusgl: ERROR th=0  0x61d7ee8 in (apply #'ros::load-org-for-ros ros::fullname args)E: 

としてみても, 上のようなエラーが出ました. jsk_robot/jsk_fetch_robot/fetcheus/.gitignoreを見ると, 以下のように書いてあるのですが, 関係があるのでしょうか?

# license of fetch_description is CreativeCommons-Attribution-NonCommercial-NoDerivatives-4.0
fetch.l
fetch.dae
mech-user@test1-pc:~/semi_ws/src/jsk_robot/jsk_fetch_robot$ catkin build fetcheus
------------------------------------------------------------
Profile:                     default
Extending:          [cached] /opt/ros/kinetic
Workspace:                   /home/mech-user/semi_ws
------------------------------------------------------------
Source Space:       [exists] /home/mech-user/semi_ws/src
Log Space:          [exists] /home/mech-user/semi_ws/logs
Build Space:        [exists] /home/mech-user/semi_ws/build
Devel Space:        [exists] /home/mech-user/semi_ws/devel
Install Space:      [unused] /home/mech-user/semi_ws/install
DESTDIR:            [unused] None
------------------------------------------------------------
Devel Space Layout:          linked
Install Space Layout:        None
------------------------------------------------------------
Additional CMake Args:       None
Additional Make Args:        None
Additional catkin Make Args: None
Internal Make Job Server:    True
Cache Job Environments:      False
------------------------------------------------------------
Whitelisted Packages:        None
Blacklisted Packages:        None
------------------------------------------------------------
Workspace configuration appears valid.
------------------------------------------------------------
[build] Found '46' packages in 0.0 seconds.                                                                                                                                    
[build] Updating package table.                                                                                                                                                
Starting  >>> fetcheus                                                                                                                                                         
_______________________________________________________________________________________________________________________________________________________________________________
Errors     << fetcheus:cmake /home/mech-user/semi_ws/logs/fetcheus/build.cmake.000.log                                                                                         
CMake Warning at /opt/ros/kinetic/share/catkin/cmake/catkinConfig.cmake:76 (find_package):
  Could not find a package configuration file provided by "fetch_description"
  with any of the following names:

    fetch_descriptionConfig.cmake
    fetch_description-config.cmake

  Add the installation prefix of "fetch_description" to CMAKE_PREFIX_PATH or
  set "fetch_description_DIR" to a directory containing one of the above
  files.  If "fetch_description" provides a separate development package or
  SDK, be sure it has been installed.
Call Stack (most recent call first):
  CMakeLists.txt:10 (find_package)


CMake Error at /opt/ros/kinetic/share/catkin/cmake/catkinConfig.cmake:83 (find_package):
  Could not find a package configuration file provided by "fetch_description"
  with any of the following names:

    fetch_descriptionConfig.cmake
    fetch_description-config.cmake

  Add the installation prefix of "fetch_description" to CMAKE_PREFIX_PATH or
  set "fetch_description_DIR" to a directory containing one of the above
  files.  If "fetch_description" provides a separate development package or
  SDK, be sure it has been installed.
Call Stack (most recent call first):
  CMakeLists.txt:10 (find_package)


cd /home/mech-user/semi_ws/build/fetcheus; catkin build --get-env fetcheus | catkin env -si  /usr/bin/cmake /home/mech-user/semi_ws/src/jsk_robot/jsk_fetch_robot/fetcheus --no-warn-unused-cli -DCATKIN_DEVEL_PREFIX=/home/mech-user/semi_ws/devel/.private/fetcheus -DCMAKE_INSTALL_PREFIX=/home/mech-user/semi_ws/install; cd -
...............................................................................................................................................................................
Failed     << fetcheus:cmake          [ Exited with code 1 ]                                                                                                                   
Failed    <<< fetcheus                [ 1.4 seconds ]                                                                                                                          
[build] Summary: 0 of 1 packages succeeded.                                                                                                                                    
[build]   Ignored:   45 packages were skipped or are blacklisted.                                                                                                              
[build]   Warnings:  None.                                                                                                                                                     
[build]   Abandoned: None.                                                                                                                                                     
[build]   Failed:    1 packages failed.                                                                                                                                        
[build] Runtime: 1.6 seconds total.                                                                                                                                            
[build] Note: Workspace packages have changed, please re-source setup files to use them.
mech-user@test1-pc:~/semi_ws/src/jsk_robot/jsk_fetch_robot$ 
``

@k-okada
Copy link
Member Author

k-okada commented Oct 19, 2018

そうでした.fetchの場合は
https://github.com/jsk-ros-pkg/jsk_robot/tree/master/jsk_fetch_robot#setup-environmentの
をみてcatkin_wsをsemi_wsに読み替えて実行してみてください.
srcの下にfetch_descriptionみたいなパッケージがダウンロードされるはずです

@708yamaguchi
Copy link
Member

@ykawamura96
基本的には以下のURLのSetup Environmentを参考にしてもらったらいいのですが、kineticの場合はjsk_fetch.rosinstall(indigo用)の代わりにjsk_fetch.rosinstall.kineticを使ってもらうといいと思います。
https://github.com/jsk-ros-pkg/jsk_robot/tree/master/jsk_fetch_robot#setup-environment

@ykawamura96
Copy link

できました。ありがとうございます。
fetch

@ghost
Copy link

ghost commented Oct 24, 2018

幕内です。
naoとpepperのファイティングポーズを作りました。
screenshot from 2018-10-24 15-10-54
screenshot from 2018-10-24 15-11-02

(load "package://peppereus/pepper-interface.l")
(pepper-init)

(objects (list *pepper*))
(dotimes (i 100)
  (send *pepper* :angle-vector (float-vector 2.0 -2.0 (- -5.0 i) 85.0 10.0 (- -70.0 i) -20.0 -40.0 85.0 -10.0 70.0 20.0 40.0 0.0 0.0))
  (objects (list *pepper*)))

(send *pepper* :angle-vector (float-vector 15 -5 0 20 -45 -89.5 -20 -40 85 -10 70 20 -30 -20 10))
  (objects (list *pepper*)))


(send *ri* :angle-vector (send *pepper* :angle-vector))

(send *pepper* :rarm :shoulder-p :joint-angle 5)
(send *pepper* :rarm :shoulder-r :joint-angle -45)
(send *pepper* :rarm :elbow-p :joint-angle 30)
(send *pepper* :larm :shoulder-p :joint-angle 30)
(send *pepper* :larm :shoulder-r :joint-angle 0.5)
(send *pepper* :larm :elbow-p :joint-angle -89.5)
(send *pepper* :head :neck-y :joint-angle -20)
(send *pepper* :head :neck-p :joint-angle 10)
(objects (list *pepper*))

(send *ri* :angle-vector (send *pepper* :angle-vector))

@nakaotatsuya
Copy link

中尾達也
pepperでエアギターを弾いているポーズ
screenshot from 2018-10-24 15-22-18

(load "package://peppereus/pepper-interface.l")
(pepper-init)

(objects (list *pepper*))
(dotimes (i 30)
  (send *pepper* :angle-vector (float-vector 0.0 2.0 -5.0 75.0 40.0  -50.0 (+ -89.5 i) -20.0 65.0 -25.0 85.0 85.0 85.0 0.0 0.0))
    (objects (list *pepper*)))




(send *ri* :angle-vector (send *pepper* :angle-vector))

@YS-KID
Copy link

YS-KID commented Oct 24, 2018

@ykawamura96
Copy link

ykawamura96 commented Oct 24, 2018

河村です
*ごろねする動作(横向きに見てください
*試合に勝って喜ぶ動作
*握手をする動作
を作りました

screenshot from 2018-10-24 15-22-30
)
screenshot from 2018-10-24 15-22-43
screenshot from 2018-10-24 15-49-41

(load "fetch-interface.l")
(fetch-init)

(objects (list *fetch*))

(defun shake-hand ()
  (dotimes (i 300)
    (setq dest-y (* (cos(/ i 20.0)) 20.0))
    (setq dest-z (+ 900 (* (cos (/ i 20.0)) 100.0)))
    (setq dest-pos (float-vector 800 dest-y dest-z))
    (send *fetch* :rarm  :inverse-kinematics (make-coords :pos dest-pos :degug-view t))
    (objects (list *fetch*))
    (format t "dest-pos = ~A ~%" dest-pos)
    (format t "angle-vector = ~A ~%" (send *fetch* :angle-vector))
    )
  )

  ;;(send *fetch* :torso :waist-z :joint-angle i)

(load "nao-interface.l") 
(nao-init)

(objects (list *nao*))

(setq goron (float-vector -40.0 10.0 -100.0 -88.0 -60.0  90.0 -40.0 50.0 90.0 0.0  -30.0  0.0 0.0 60.0 -25.0 0.0  -30.0 -00.0 -40.0   90.0  10.0  -0.0 -30.0 5.0))

(setq *default_pose* (float-vector 110.0 10.0 -90.0 -40.0 0.0   110.0 -10.0 90.0 40.0 0.0  0.0 10.0 -30.0 60.0 -30.0 0.0  0.0 0.0 -30.0 60.0 -30.0 0.0  0.0 0.0))

(setq katimashita #f(20.0 0.0 -90.0 -80.0 0.0 20.0 0.0 90.0 80.0 0.0 -30.0 0.0 -40.0 80.0 -20.0 0.0 -30.0 0.0 -40.0 80.0 -20.0 0.0 0.0 0.0))


(dotimes (i 100)
  (send *nao* :angle-vector (float-vector 110.0 10.0 -90.0 -40.0 0.0   110.0 -10.0 90.0 40.0 0.0  0.0 0.0 -30.0 60.0 -30.0 0.0   0.0 0.0 -30.0 60.0 -30.0 0.0  0.0 0.0))
  (unix:usleep 100)
  (objects (list *nao*)))

(send *ri* :angle-vector (send *nao* :angle-vector))

(defun my-anime (pose)
  (dotimes (i 100)
    (send *nao* :angle-vector (v+ *default_pose* (scale  (/ i 100.0) (v- pose *default_pose*))))
    (format t "progress: ~A [%] ~%" i)
    (print  (v+ *default_pose* (scale  (/ i 100.0) (v- pose *default_pose*))))
    (objects (list *nao*))
    )
  )


;;(cond t((send *nao* :legs :crotch-r :joint-angle 0) (objects (list *nao*)))
;;値を表示/更新して描画も更新
(cond (t (print (send *nao* :larm :elbow-p :joint-angle )) (objects (list *nao*)) (format t "angle-vecotr: ~A ~%" (send *nao* :angle-vector))))

@ghost
Copy link

ghost commented Oct 30, 2018

@k-okada
明日に向けて課題を進めようと思っていたのですが、roseusというコマンドが消えてしまったようです。
catkin b peppereusを試みましたが、

==> Expanding alias 'b' from 'catkin b peppereus' to 'catkin build peppereus'

Profile:                     default
Extending:          [cached] /home/mech-user/catkin_ws/devel:/opt/ros/kinetic
Workspace:                   /home/mech-user/semi_ws

Source Space:       [exists] /home/mech-user/semi_ws/src
Log Space:          [exists] /home/mech-user/semi_ws/logs
Build Space:        [exists] /home/mech-user/semi_ws/build
Devel Space:        [exists] /home/mech-user/semi_ws/devel
Install Space:      [unused] /home/mech-user/semi_ws/install
DESTDIR:            [unused] None

Devel Space Layout:          linked
Install Space Layout:        None

Additional CMake Args:       None
Additional Make Args:        None
Additional catkin Make Args: None
Internal Make Job Server:    True
Cache Job Environments:      False

Whitelisted Packages:        None
Blacklisted Packages:        None

Workspace configuration appears valid.

[build] Found '48' packages in 0.0 seconds.
[build] Package table is up to date.
Starting  >>> naoqieus                
No handlers could be found for logger "trollius"

Errors     << naoqieus:check /home/mech-user/semi_ws/logs/naoqieus/build.check.008.log
CMake Warning at /opt/ros/kinetic/share/catkin/cmake/catkinConfig.cmake:76 (find_package):
  Could not find a package configuration file provided by "naoqi_driver" with
  any of the following names:

    naoqi_driverConfig.cmake
    naoqi_driver-config.cmake

  Add the installation prefix of "naoqi_driver" to CMAKE_PREFIX_PATH or set
  "naoqi_driver_DIR" to a directory containing one of the above files.  If
  "naoqi_driver" provides a separate development package or SDK, be sure it
  has been installed.
Call Stack (most recent call first):
  CMakeLists.txt:4 (find_package)


CMake Error at /opt/ros/kinetic/share/catkin/cmake/catkinConfig.cmake:83 (find_package):
  Could not find a package configuration file provided by "naoqi_driver" with
  any of the following names:

    naoqi_driverConfig.cmake
    naoqi_driver-config.cmake

  Add the installation prefix of "naoqi_driver" to CMAKE_PREFIX_PATH or set
  "naoqi_driver_DIR" to a directory containing one of the above files.  If
  "naoqi_driver" provides a separate development package or SDK, be sure it
  has been installed.
Call Stack (most recent call first):
  CMakeLists.txt:4 (find_package)


cd /home/mech-user/semi_ws/build/naoqieus; catkin build --get-env naoqieus | catkin env -si  /usr/bin/make cmake_check_build_system; cd -

Failed     << naoqieus:check           [ Exited with code 2 ]
Failed    <<< naoqieus                 [ 0.5 seconds ]
Abandoned <<< peppereus                [ Unrelated job failed ]
[build] Summary: 0 of 2 packages succeeded.
[build]   Ignored:   46 packages were skipped or are blacklisted.
[build]   Warnings:  None.
[build]   Abandoned: 1 packages were abandoned.
[build]   Failed:    1 packages failed.
[build] Runtime: 0.7 seconds total.

と出ました。
naoqieus.driver周辺のroseusに関するパッケージが消えてしまったようです。

ROSまわりで何かアクションをしたといえば、考える限りは、先日月曜日に行ったロボットシステムの授業にて、私が間違えてEusLisp言語インストールの一般ユーザ編を行ってEusLispをインストールしてしまったことと、それに伴い.bashrc

$source ~/semi_ws/devel/setup.bash
$source ~/bashrc.eus

を加えたことくらいだと思っています。

$mkdir prog
$cd prog
$sudo apt-get install subversion gcc g++ libjpeg62-dev libtext-dev libx11-dev libgl1-mesa-dev libglu1-mesa-dev libpq-dev libpng12-dev xfonts-100dpi xfonts-75dpi msttcorefonts
$git clone https://github.com/euslisp/jskeus
$cd jskeus
$make

$mv bashrc.eus ~/
$cd ~/
$emacs -nw .bashrc
(.bashrc末尾にsource ~/bashrc.eusを追加)

@k-okada
Copy link
Member Author

k-okada commented Oct 30, 2018 via email

@ykawamura96
Copy link

ykawamura96 commented Oct 30, 2018

@708yamaguchi
fetchにボールを投げる動作をさせてみたいと思い、以下のようなコードを書きました。
投げる際、前に進みながら腕を動かし、途中で(send *ri* :stop_grasp)をして手を放したいのですが、このような動作は可能でしょうか?
シミュレーター上だと、動いたあとに腕を動かし、また、(send *ri* :stop_grasp)をどのように挟めばいいのかが分かりません。

;;受け取るポジション
(setq recieve-pos #f(88.1373 39.5951 37.3204 -182.416 85.4712 -228.729 60.863 31.5685 0.0 0.0))
;;投げる動作と時間の設定
(setq thr1 #f(25.3106 68.8275 50.8513 -219.216 127.925 -465.502 107.636 -15.8476 0.0 0.0))
(setq thr2 #f(25.3106 68.8275 50.8513 -219.216 127.925 -465.502 107.636 -15.8476 0.0 0.0))
(setq thr3 #f(118.474 31.4167 29.9995 -206.956 96.9245 -391.023 -101.781 34.9092 0.0 0.0))
(setq throw-list (list thr1 thr2 thr3))
(setq throw-tm-list (list 1000 1000 1000))

;;受け取るポジションに腕を出す
(defun recieve ()
  (send *ri* :stop-grasp)
  (send *ri* :angle-vector recieve-pos)    
  )

;;手を閉じる
(defun grab ()
  (send *ri* :start-grasp)
  )

;;投げる
(defun throw ()
  ;;  (send *ri* :go-pos 0.3 0 0)
  ;;go-posすると、シミュレーター上では進んでから腕を動かし始める  
  (send *ri* :angle-vector thr1)
  (send *ri* :angle-vector-sequence throw-list throw-tm-list)
  (send *ri* :wait-interpolation)
  (objects (list *fetch*))
)

@708yamaguchi
Copy link
Member

@ykawamura96

投げる際、前に進みながら腕を動かし、途中で(send ri :stop_grasp)をして手を放したいのですが、このような動作は可能でしょうか?

(send *ri* :move-to (make-coords :pos #f( ... ) :rpy #f( ... )) :no-wait t)
(send *ri* :angle-vector #f( ... ) 5000)
(unix:sleep 2) ;; (send *ri* :wait-interpolation)を使わない。
(send *ri* :stop-grasp)

のようにすれば、前に進みだした直後に5秒かけて腕を動かし始め、2秒たったところでグリッパを開くと思います。

シミュレーター上だと、動いたあとに腕を動かし、また、(send ri :stop_grasp)をどのように挟めばいいのかが分かりません。

シミュレータはkinematic simulatorかな?
シミュレータでも同じコードが動くと思いますが、少し不自然なアニメーションになるかもしれません。

@k-okada
Copy link
Member Author

k-okada commented Oct 31, 2018 via email

@708yamaguchi
Copy link
Member

:wait-interpolation-smoothの存在を忘れていました。
fetchでは使ったことがないので、今日時間があれば @ykawamura96 と試してみたいと思います。

@nakaotatsuya
Copy link

nakaotatsuya commented Oct 31, 2018

来週は移動+動作を組み合わせてみましょう

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

(load "package://jsk_maps/src/eng2-scene.l")
(setq s (make-eng2-scene))
(objects (list s))
(print (mapcar #'(lambda (x) (send x :name)) (send s :spots)))
(send *fetch* :move-to (send (send s :spot "/eng2/7f/room73B2-sink-front") :copy-worldcoords) :world)

(send *ri* :move-to (send s :spot "/eng2/7f/room73B2-sink-front"))
;; (send *ri* :move-to (send s :spot "/eng2/7f/room73B2-table-front1"))

(send *irtviewer* :look-all (send s :find-object "/eng2/7f/73b2"))

(in-package "GL")
(defmethod glviewsurface
  (:string
   (x y str &optional (fid x:font-courb24)) ;;x::font-helvetica-bold-12))                                                               
   (send self :makecurrent)
   (glMatrixMode GL_PROJECTION)
   (glPushMatrix)
   (send self :2d-mode)
   (unless (eq (get self :glxusexfont) fid)
     (setf (get self :glxusexfont) fid)
     (glxUseXfont fid 32 96 (+ 1000 32)))
   (glRasterPos2i (round x) (- (send self :height) (round y)))
   (glListBase 1000)
   (glCallLists (length str) GL_UNSIGNED_BYTE str)
   (send self :3d-mode)
   (glMatrixMode GL_PROJECTION)
   (glPopMatrix)
   (glMatrixMode GL_MODELVIEW)
   ))
(in-package "USER")

(print "hit return to stop...")
(do-until-key
 (dolist (s (send s :spots))
   (let (p)
     ;;(send *irtviewer* :draw-string (send s :worldcoords) (send s :name))                                                             
     (setq p (send *irtviewer* :viewer :point-to-screen (send s :worldpos)))
     (send *irtviewer* :viewer :viewsurface :string (elt p 0) (elt p 1) (send s :name) x::font-courb12)
 (send *irtviewer* :viewer :viewsurface :glflush)
 (x::window-main-one))


euslisp/EusLisp#344 を使ってspot名を表示しました

screenshot from 2018-10-31 21-09-47

@nakaotatsuya
Copy link

nakaotatsuya commented Nov 7, 2018

相対座標系inverse-kinematicsがこれで使えるよ

(send *fetch* :rarm :inverse-kinema
tics (send (send *fetch* :copy-worldcoords) :transf
orm (make-coords :pos #f(600 0 500))) :debug-view t
)

@ykawamura96
Copy link

相対座標系で移動させるコード

(defun goto-tableside()
  (send *ri* :move-to (send (send (send *scene* :spot "/eng2/7f/room73B2-table-side1") :copy-worldcoords)
			       :transform (make-coords :pos #f(-300 -130 0) :rpy (float-vector -1.2 0 0))));;実機の移動
  (send *fetch* :move-to (send (send (send *scene* :spot "/eng2/7f/room73B2-table-side1") :copy-worldcoords)
			       :transform (make-coords :pos #f(-300 0 0) :rpy (float-vector -0.7 0 0))) :world);;irtvewerでの移動
  )

@708yamaguchi
Copy link
Member

覚えている範囲でいいのですが、昨日の3年生ゼミの最中にfetchの腕が落ちる問題は発生したでしょうか?
fetch内部のログを見る限り、昨日はあまり発生していないのかな、と思っています。

デバッグの参考になるので、教えてもらえると非常に助かります。

@ykawamura96
@konoha4303
@Yu1313321
@nakaotatsuya

@ykawamura96
Copy link

@708yamaguchi 昨日のゼミでは、僕が知る限り、fetchの腕が落ちる現象は見られませんでした。

@ykawamura96
Copy link

机の脇から73A2まで移動してものを運ぶプログラム
https://gist.github.com/ykawamura96/3f40b839caae79134d353191172c6583

@YS-KID
Copy link

YS-KID commented Nov 13, 2018

fetchが部屋を出たところで忘れ物を思い出して、急いで部屋に戻るという動きを作りました。

(コード)
https://gist.github.com/Yu1313321/5f0c3bc7e5b6e9528ae28faaece1beb9

(様子)
screenshot from 2018-11-13 10-23-29

@k-okada
Copy link
Member Author

k-okada commented Nov 13, 2018

もうそろそろ皆のプログラムが固まってきた気がするので,各自のプログラムを連結して一連の動作を津kつてみましょう.テンプレートは
#1252
に作ったので,ココにPullRequestを追加して roslaunch jsk_2017_10_semi demo.launch するとロボットがウゴクようにすると良いとおもいます.

明日は試験日なので,ゼミは無いですが,試験がなく時間が余っている人は73B2に来てください.
僕自身は別件でその時間はいないのですが,@mmurooka 先生, @708yamaguchi 先輩が

  • workspaceにbranchを持ってくる方法,
  • そこからPullRequestを送る方法,
  • 自分のプログラムの追加の仕方,
  • 実機がないときにkinemtaics simulatorだけでも動くように,
  • 画像処理の追加方法,たとえば人の顔を見つけたら,でもプログラムが開始する,など
    教えてくれるとおもいます.

@708yamaguchi
Copy link
Member

実験でmoveitを使う人もいるかと思いますが、実験が終わったら以下のコードを参考にしてcollision objectを全て消しておいてください。
その後fetchを使うと挙動がおかしくなってしまいます。

https://github.com/jsk-ros-pkg/jsk_pr2eus/blob/master/pr2eus_moveit/euslisp/collision-object-publisher.l#L173-L175

@ykawamura96
Copy link

@708yamaguchi
申し訳ございません。次回以降気を付けます。

@ghost
Copy link

ghost commented Nov 21, 2018

fetchが給湯室の前まで行って、ものをとって帰ってくるという動きを作りました。

(コード)
https://gist.github.com/konoha4303/39a7ac4bbff7e430c64502573ed9a606

(様子)
kyuutou

@708yamaguchi
Copy link
Member

fetchで人認識をするという話がありましたが、外部PCで常に人認識プログラム(https://github.com/jsk-ros-pkg/jsk_recognition/blob/master/jsk_perception/node_scripts/people_pose_estimation_2d.py )を走らせるようにしたので、
/people_poses_to_poses/output

/people_pose_estimation_2d/output
をsubscribeすると人認識の結果を使うことが出来ます。

@ykawamura96
@konoha4303
@Yu1313321
@nakaotatsuya

@ykawamura96
Copy link

ストーリー

  • 20XX年, 宅配業者は面倒くさがりになり、73B2にまとめて荷物を持ってくるようになった. ロボットは, 73B2に積まれた荷物を, 然るべき部屋にはこばなくてはいけない. これを任されたのが, Fetchだった. (to be continue...)

@ykawamura96

  • 人に宅配物を渡される(何も認識しない)
  • 机の上においてある宅配物を拾う ->カゴに入れる
    • rosparamを使って荷物の数を追加する
  • シール(赤とか)が貼ってある宅配物を選んで拾う ->適切なカゴに入れる
    • rosparamを使って荷物の数を追加する

@Yu1313321

  • よさげなカゴを買う
  • 部屋の前に移動する (rosparamを使って, 持っているものに応じて行く部屋を分ける)
  • 適切なカゴを掴む

@nakaotatsuya

  • 認識せずにノックする (何も認識しない)
  • 壁を認識してノックする
  • ドアが開くまでノックし続ける (開いたら↓へ)

@konoha4303

  • 持っているものを渡す (何も認識しない)
  • 人の顔が見えたら渡す
  • 人のポーズを認識して、手のところにカゴ渡す

@YS-KID
Copy link

YS-KID commented Nov 30, 2018

fetchの台車に板を取り付けて、箱を3つ置けるようにしました。

img_5766

@ykawamura96
Copy link

ykawamura96 commented Dec 5, 2018

  • rosbagを使うと, fetchの状態を記録してその状況を再現できます. jsk_data/を参照すると良いでそうですが, とりあえずjsk_2018_demos/launch/record.launchjsk_2018_demos/launch/play.launchを使うと最低限のことができます. 最低限なので, 記録したrosbagファイルはhome/mech-usr/.ros/以下にできます. playするときは, 引数として再現したいrosbagファイルのpathを指定する必要があります.
  • 再現するときには, rossetloaclとすることと, rvizなどで確認したりする際も, rossetlocalする必要があります. 特に, fetchにつながった状態でplayするとよくわからないことが起きてしまうので注意が必要です.
  • あとは, 家でもrecordしたデーターでデバッグができます.

@ykawamura96
Copy link

  • ハマりポイント
    • 取得したdepthやrgbやpoint cloudのheaderにはtime stampがくっついていて, 処理した結果にもtime sampがくっつている. 複数のtopicをsubscribeして画像処理する際は, これらのtopicのtime stampが完全に一致 (exact sync)していないと, call backが呼ばれないものもある. 複数のtopicがsyncしているかは, rosrun jsk_topic_tools is_synchronized honya hoge etc... で確認できる. デフォルトだと, exact syncしているかを返すが, -a (approximate)オプションをつけると, ゆる〜くsyncしているかが確かめられる. どのくらい緩くかは, ここらへんを見れば良くて, 多分引数に何も指定しないと0.1秒になるっぽい.
    • MultiPlaneExtarcionを用いて, 机の上の箱たちを検出しようと思ったら, なにも出力されなくて, async=trueにしたら直ったのでメモしておきます.
mech-user@test1-pc:~/semi_ws/src/jsk_demos/jsk_2018_10_semi/launch$ rosrun jsk_topic_tools is_synchronized /head_camera/depth_registered/points /HSI_color_filter_2/multi_plane_estimate/output /HSI_color_filter_2/multi_plane_estimate/output_polygon /HSI_color_filter_2/multi_plane_estimate/output_coefficients  -a
****************** Test Condition ******************
sync_policy: Approximate
topics: 
  - /head_camera/depth_registered/points [sensor_msgs/PointCloud2]
  - /HSI_color_filter_2/multi_plane_estimate/output [jsk_recognition_msgs/ClusterPointIndices]
  - /HSI_color_filter_2/multi_plane_estimate/output_polygon [jsk_recognition_msgs/PolygonArray]
  - /HSI_color_filter_2/multi_plane_estimate/output_coefficients [jsk_recognition_msgs/ModelCoefficientsArray]
timeout: 5 seconds
queue_size: 100
slop: 0.1
****************************************************
listening these topics for at most 5 seconds in rostime
synchronized in 0.4 seconds
these topics are: 'synchronized'

@ykawamura96
Copy link

ykawamura96 commented Dec 6, 2018

  • ゼミの進捗
    • 机の上においた箱の検出
  • 流れ
    • 机の点群だけcolor filterでとってくる -> 机の平面を検出 -> 平面の上にある点群をとってくる -> とってきた点群と検出した平面をClusterPointIndicesDecomposerに入れる -> 箱のbounding boxが出てくる
  • その他
    • jsk_rviz_pluginsをつかって, bounding boxの場所に "box found ↓" てきなマーカを表示させた
    • 本当はbounding boxの真上にマーカーを出したかったのだけど, scriptはpythonで書いてて, eusのtf的な感じでぱぱっと座標変換できなさそうな感じだったので, bounding boxのposeからの変換は諦めて適当に値を決め打ちした.
    • 余裕があったらeusで書き直すか, pythonにもtf的なものがあるらしいのでそれを使ってみたい (フラグ)
    • 全部deliverd_box_pickup.launchで立ち上がるようにした(つもり)
    • いままでlocalで加えていたdoor_detectionとか他の人のファイルの変更は戻して, 自分が書いたのは全部 /derivery_box_detectionてきなname space以下で動くようにしたので, 干渉しないはずです.

recog

@YS-KID
Copy link

YS-KID commented Dec 12, 2018

img_2286
img_6603

@YS-KID
Copy link

YS-KID commented Dec 12, 2018

ちょっと窮屈だけど、箱3つとも腕の可動域に入っているので全部取れると思います。
実際取れるかは今日試してみます。

@ykawamura96
Copy link

fetchのrobot_radiusを変えるスクリプト. 終わったら再起動すれば証拠が残らない(はず)

for a in /move_base/global_costmap/inflater/inflation_radius /move_base/global_costmap/inflater/robot_radius /move_base/global_costmap/robot_radius /move_base/local_costmap/inflater/inflation_radius /move_base/local_costmap/inflater/robot_radius /move_base/local_costmap/robot_radius /safe_teleop_base/local_costmap/inflater/inflation_radius /safe_teleop_base/local_costmap/inflater/robot_radius /safe_teleop_base/local_costmap/robot_radius  ; do
    echo $a
	rosparam get $a
	rosparam set $a 0.5
done
rosnode kill move_base

@YS-KID
Copy link

YS-KID commented Dec 12, 2018

for a in /move_base/global_costmap/footprint /move_base/local_costmap/footprint /safe_teleop_base/local_costmap/footprint ; do                 
#/move_base/global_costmap/inflater/inflation_radius /move_base/global_costmap/inflater/robot_radius /move_base/global_costmap/robot_radius /move_base/local_costmap/inflater/inflation_radius /move_base/local_costmap/inflater/robot_radius /move_base/local_costmap/robot_radius /safe_teleop_base/local_costmap/inflater/inflation_radius /safe_teleop_base/local_costmap/inflater/robot_radius /safe_teleop_base/local_costmap/robot_radius  ; do
  echo $a
  rosparam get $a
  rosparam set $a '[[0.141315,-0.25],[0.092705,-0.285317],[-0.092705,-0.285317],[-0.242705,-0.176336],[-0.3,2.842171e-17],[-0.242705,0.176336],[-0.092705,0.285317],[0.092705,0.285317],[0.141315,0.25],[0.5,0.25],[0.5,-0.25],[0.141315,-0.25]]'
done
rosnode kill move_base

@ykawamura96
Copy link

remote_camera_fetch.launch を立ち上げることで, point cloud を直接subscribeしなくても, /remote_camera以下の諸々をsubscribeすれば良くなりました. ( また, 一般的にpoint cloudは重いのでなるべく直接subscribeしないほうが良いらしいです.)
point cloudをsubscribeしてhzが出ないことが原因で, 認識が上手く行かないことがあるかもしれないので, そういう時は remote cameraを使うといいそうです.

@ykawamura96
Copy link

メモ
/camera_remote以下のtopicをsubscribeすることで、point cloudのhzが出ていないことが原因で平面検出できていない問題が解決し、実機で箱の認識までできました。
screenshot from 2018-12-13 15-59-36

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

5 participants