[[Tutorial for ver.3]]

SIGVerse_v3では、ROSのプログラムを利用して仮想ロボットを制御することができます。

ここでは、SIGVerse v3のROS (Robot Operating System)を使用したサンプルについて説明します。
基本的なサンプルは[[こちらのページ>Tutorial for ver.3]]を参照してください。



#contents

* システム要件 [#l6825477]

ROSを使用する際にはUbuntu環境を用意して、そこにROSをインストールします。~
そしてROSをインストールしたUbuntuと、UnityをインストールしたWindowsで通信を行います。~

Windows側の要件は[[こちらのページ>Tutorial for ver.3]]を参照してください。

ROS側の要件は、OSが Ubuntu 16.04 、ROSの[[ディストリビューション>http://wiki.ros.org/Distributions]]は Kinetic Kame とします。


* 環境構築 [#vf01a3c9]

** 基本的な環境構築 [#k2704bce]

まず、[[こちらのページ>Tutorial for ver.3]]を参照して、SIGVerse v3を使用するための基本的な環境構築を行ってください。
その後、以降の環境構築作業を行ってください。

** Ubuntu環境の設定 [#zddcd2d8]


ROSを使用するサンプルプログラムを実行する場合、以下のように設定を行います。~

*** CMakeのインストール [#iad7c8b9]
ターミナルで、以下のコマンドを実行します。CMakeはver.3.2以上が必要となります。

 $ sudo apt-get install cmake


*** ROS Kineticのインストール [#dccef8ca]
[[こちら>http://wiki.ros.org/kinetic/Installation/Ubuntu]]の手順に従って、ROSをインストールします。([[日本語版>http://wiki.ros.org/ja/kinetic/Installation/Ubuntu]])~
その後、[[ROSのチュートリアル>http://wiki.ros.org/ja/ROS/Tutorials/InstallingandConfiguringROSEnvironment]]に従ってcatkinワークスペースの作成まで行ってください。

また以降のコマンド簡略化のため、~/catkin_ws/devel/setup.bash の実行を.bashrcに追記します。複数のcatkin workspaceを管理している方は注意してください。

 $ echo "source ~/catkin_ws/devel/setup.bash" >> ~/.bashrc
 $ source ~/.bashrc


*** ROSBridge_suiteのインストール [#c3162771]
ターミナルを起動し、以下のコマンドを実行します。

 $ sudo apt-get install ros-kinetic-rosbridge-server


*** Mongo C driver インストール [#n65f2eba]
ターミナルで、以下のコマンドを実行します。

 $ cd ~/Downloads (日本語設定の場合は cd ~/ダウンロード で実行してください。)
 $ wget https://github.com/mongodb/mongo-c-driver/releases/download/1.4.2/mongo-c-driver-1.4.2.tar.gz
 $ tar zxvf mongo-c-driver-1.4.2.tar.gz
 $ cd mongo-c-driver-1.4.2
 $ ./configure
 $ make
 $ sudo make install

*** Mongo C++ driver インストール [#lf0687e5]
ターミナルで、以下のコマンドを実行します。

 $ cd ~/Downloads (日本語設定の場合は cd ~/ダウンロード で実行してください。)
 $ wget https://github.com/mongodb/mongo-cxx-driver/archive/r3.0.3.tar.gz
 $ tar zxvf r3.0.3.tar.gz
 $ cd mongo-cxx-driver-r3.0.3/build
 $ cmake -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=/usr/local -DLIBMONGOC_DIR=/usr/local -DLIBBSON_DIR=/usr/local ..
 $ sudo make EP_mnmlstc_core
 $ make
 $ sudo make install

*** sigverse_ros_bridgeの設定 [#n891675d]
ターミナルで、以下のコマンドを実行します。

 $ cd ~/catkin_ws/src
 $ git clone https://github.com/SIGVerse/sigverse_ros_package.git
 $ cd ..
 $ catkin_make



*** Turtlebotパッケージのインストール [#c4f5154e]

Turtlebotを使用したサンプルを実行する場合、Turtlebotパッケージもインストールします。

[[こちら>http://wiki.ros.org/Robots/TurtleBot]]の手順に従って、Turtlebotを利用するためのROSパッケージをインストールしますが(※Debs Installationで問題ありません。)、~
Kinetic Kameにインストールする場合は以下も参考にしてください。

http://answers.ros.org/question/246015/installing-turtlebot-on-ros-kinetic/

 $ sudo apt-get install -y linux-headers-generic
 $ sudo sh -c 'echo "deb-src http://us.archive.ubuntu.com/ubuntu/ xenial main restricted
 deb-src http://us.archive.ubuntu.com/ubuntu/ xenial-updates main restricted
 deb-src http://us.archive.ubuntu.com/ubuntu/ xenial-backports main restricted universe multiverse
 deb-src http://security.ubuntu.com/ubuntu xenial-security main restricted" > \
   /etc/apt/sources.list.d/official-source-repositories.list'
 $ sudo apt-get update
 $ sudo apt-get install -y ros-kinetic-librealsense
 $ sudo apt-get install -y ros-kinetic-realsense-camera
 $ sudo apt-get install -y ros-kinetic-turtlebot

また以下もインストールすると便利だと思います。

 $ sudo apt-get install ros-kinetic-turtlebot*

そして、SIGVerse用の.launch XMLファイル(3dsensor)を配備します。

 $ cd ~/catkin_ws/
 $ sudo cp src/sigverse_ros_package/samples/turtlebot2/resources/asus_xtion_pro_sigverse.launch.xml /opt/ros/${ROS_DISTRO}/share/turtlebot_bringup/launch/includes/3dsensor

※本件に関してまして、[[産業技術総合研究所の原功 氏>http://hara.jpn.com/_default/ja/Topics/SIGVerse20Ver.3.html]]からファイルの提供と助言を頂きました。~
有難うございました。



TurtleBot3に関しては[[こちら>https://turtlebot3.readthedocs.io/en/latest/]]を参考にしてください。






* サンプルプログラムの実行 [#o023aef1]

** Unityシーンの開き方 [#open_scene]

まずUbuntu環境のIPアドレスをSIGVerse設定画面で入力します。~
IPアドレスはUbuntu環境で以下のコマンドを実行することで確認できます。

 $ ifconfig

そして、以下の手順でIPアドレス等を設定します。

+ UnityでSIGVerse_v3プロジェクトを開きます。
+ Unityメニューの[SIGVerse]-[SIGVerse Settings]をクリックして、SIGVerse設定画面を開きます。
+ [Config file Settings]の[Rosbridge IP]をROS側のIPアドレスに変更します。~
([Rosbridge Port]や[SIGVeres Bridge Port]を変更したい場合も同様に変更できます。)

Unityシーンの開き方は次の通りです。
+ [Project]タブの[Assets/SIGVerse/SampleScenes/xxxxx/yyyyy(.unity)]をダブルクリックしてシーンを開きます。
+ Unity画面の上部中央にある再生ボタンをクリックしてシーンを再生します。
+ SIGVerseメニューの[Start]をクリックして、シーンを開始します。


** Turtlebot Followerの実行 [#bd112681]

*** Ubuntu環境での起動手順 [#ge25aa6a]

新しいターミナルを開き、以下のコマンドを実行します。
 $ roslaunch sigverse_turtlebot2 follower.launch 


*** Windows環境での起動手順 [#u521891c]

[[こちら>#open_scene]]を参考に[Assets/SIGVerse/SampleScenes/Turtlebot2/Turtlebot2Follower(.unity)]シーンを開始します。


*** 実行 [#b584cb20]

Windows側のUnity画面にフォーカスを当てた状態で十字キーを操作すると、アバターが移動し、TurtleBotがアバターに追従します。

※ROS側でTurtleBotのカメラ画像確認を行いたい場合は以下のコマンドで確認できます。
 $ rosrun image_view image_view image:=/camera/rgb/image_raw

※またrvizでも確認できます。
 $ roslaunch turtlebot_rviz_launchers view_robot.launch





** Turtlebot Keyboard Teleopの実行 [#m81a1f8d]

*** Ubuntu環境での起動手順 [#he2ae03c]

新しいターミナルを開き、以下のコマンドを実行します。
 $ roslaunch sigverse_turtlebot2 teleop_key.launch


*** Windows環境での起動手順 [#ifc7cd9b]

[[こちら>#open_scene]]を参考に[Assets/SIGVerse/SampleScenes/Turtlebot2/Turtlebot2Teleop(.unity)]シーンを開始します。


*** 実行 [#h6d18830]

Ubuntu側の keyboard_teleop.launch のターミナル上でキー操作を行うとTurtleBotが移動します。

※操作方法の詳細はターミナルの表示を確認してください。





** TurtleBot3 with OpenManipulator Chain による把持(Keyboard Teleop)の実行 [#hced1165]

Open Manipulatorの仕様は、[[こちら>https://turtlebot3.readthedocs.io/en/latest/manipulation.html]]をご参照ください。~
カメラの仕様は、[[こちら>https://turtlebot3.readthedocs.io/en/latest/appendix_realsense.html]]をご参照ください。

*** Ubuntu環境での起動手順 [#ncdcea0d]

新しいターミナルを開き、以下のコマンドを実行します。
 $ roslaunch sigverse_turtlebot3_open_manipulator grasping_teleop_key.launch 


*** Windows環境での起動手順 [#w85a2596]

[[こちら>#open_scene]]を参考に[Assets/SIGVerse/SampleScenes/Turtlebot3/OpenManipulator(.unity)]シーンを開始します。


*** 実行 [#dc60bbe2]

Ubuntu側の grasping_teleop_key.launch のターミナル上でキー操作を行うとTurtleBot3を操作できます。

※操作方法の詳細はターミナルの表示を確認してください。





** TurtleBot3 with OpenManipulator Chain による把持(自動把持)の実行 [#e93a5390]

このサンプルは、物体の自動把持を行うシンプルなサンプルです。

darknet_ros(YOLO)による物体認識や、Point Cloudデータを使用しています。~
またYOLOによる物体認識を行うため、Ubuntu環境にCUDAをインストールする必要があります。~
CUDAをインストールしなくともCPUを使用して動かすことは可能ですが、物体認識の速度が非常に遅くなります。

操作の概略は以下の通りです。

+ キー操作でTurtleBot3を物体の手前まで移動する。
+ なるべくカラー画像の中心付近に把持対象が映るようにTurtleBot3を動かす。
+ キー操作で把持する物体を指定する。

上記の操作を行うと、以下のような流れで物体の把持を試みます。

+ darknet_ros(YOLO)が、TurtleBot3が出力しているカラー画像を使用して、物体認識を行う。
+ カラー画像中の物体の位置とPoint Cloud情報を使用して、物体の3次元座標を推測する。
+ 算出した3次元座標の位置を把持する。


Open Manipulatorの仕様は、[[こちら>https://turtlebot3.readthedocs.io/en/latest/manipulation.html]]をご参照ください。~
またカメラは深度センサの最短距離が短い方が都合が良かったため、[[RealSense R200>https://turtlebot3.readthedocs.io/en/latest/appendix_realsense.html]]ではなく、
[[RealSense SR300>https://www.intel.com/content/dam/support/us/en/documents/emerging-technologies/intel-realsense-technology/realsense-sr300-datasheet1-0.pdf]]を想定します。


*** Ubuntu環境の設定 [#c709f1fe]

本サンプルでは darknet_ros(YOLO)をUbuntu環境にインストールする必要があります。~
まずはrosを使用しない[[通常のdarknet>https://github.com/pjreddie/darknet]]の動作確認を行うことをお勧めします。

Note: 2017/12/31現在 ros-kinetic-opencvのバージョンが上がってからかビルド時にエラーが出てしまっています。~
暫定的にdarknet_rosのCMakeLists.txtに${OpenCV_LIBRARIES}を追加することで動作することを確認しています。[[参考URL>https://discourse.ros.org/t/opencv-3-3-1-is-breaking-builds-in-kinetic/3384/2]]

 target_link_libraries(${PROJECT_NAME}_lib
   ...
   ${OpenCV_LIBRARIES}
 ) 

手順は以下の通り
+ CUDAを[[こちら>https://developer.nvidia.com/cuda-downloads]]からダウンロードしてインストールする。~
(詳細は各自のPCやNVIDIA Driverの環境に合わせて行ってください)
+[[こちら>https://github.com/leggedrobotics/darknet_ros]]を参考にして、darknet_rosを git cloneする。~
以下の追加データもダウンロードしてください。
 $ cd ~/catkin_ws/src/darknet_ros/darknet_ros/yolo_network_config/weights/
 $ wget http://pjreddie.com/media/files/yolo.weights
+[[こちら>https://github.com/leggedrobotics/darknet_ros]]を参考にして、darknet_rosをインストールする。~
またビルド時には依存関係にあるdarknet_ros_msgsを先にcatkin_makeしたほうが良いかもしれません。
 $ catkin_make --pkg darknet_ros_msgs

*** Ubuntu環境での起動手順 [#l39593fd]

+新しいターミナルを開き、以下のコマンドを実行します。
 $ roslaunch sigverse_turtlebot3_open_manipulator grasping_auto.launch



*** Windows環境での起動手順 [#df821e14]

[[こちら>#open_scene]]を参考に[Assets/SIGVerse/SampleScenes/Turtlebot3/OpenManipulatorSR300(.unity)]シーンを開始します。


*** 実行 [#sd88b953]

Ubuntu側の grasping_auto という名前のターミナル上でキー操作を行うとTurtleBot3を操作できます。

※操作方法の詳細はターミナルの表示を確認してください。







** TurtleBot3 によるSLAM(Gmapping)の実行 [#i221ef46]

Laser Distance Sensorを使用して、SLAM(Gmapping)を行うサンプルです。

Laser Distance Sensorの仕様は、[[こちら>https://turtlebot3.readthedocs.io/en/latest/appendix_lds.html]]をご参照ください。~
Gmappingの説明は[[こちら>http://wiki.ros.org/gmapping]]をご参照ください。

*** Ubuntu環境での起動手順 [#i234a113]

新しいターミナルを開き、以下のコマンドを実行します。
 $ roslaunch sigverse_turtlebot3_laser_distance_sensor slam.launch 


*** Windows環境での起動手順 [#q350a952]

[[こちら>#open_scene]]を参考に[Assets/SIGVerse/SampleScenes/Turtlebot3/LaserDistanceSensor(.unity)]シーンを開始します。


*** 実行 [#i6d2d2bc]

Ubuntu側の teleop_key という名前のターミナル上でキー操作を行うとTurtleBot3を操作できます。

TurtleBot3を動かすと、RViz上でマップが作成されていることが確認できると思います。

※操作方法の詳細はターミナルの表示を確認してください。







** 人間キャラクターが指差す方向を認識する [#xc5f1917]

TurtleBot3 が人間キャラクターの指差す方向を認識して、Manipulatorをその方向に回転するサンプルプログラムです。

*** Ubuntu環境での起動手順 [#l8b689c6]

新しいターミナルを開き、以下のコマンドを実行します。
 $ roslaunch sigverse_turtlebot3_open_manipulator recognize_pointed_direction.launch


*** Windows環境での起動手順 [#z37ca133]

[[こちら>#open_scene]]を参考に[Assets/SIGVerse/SampleScenes/Turtlebot3/Pointing(.unity)]シーンを開始します。


*** 実行 [#o9555b32]

Unity側で左右の矢印キーを押下すると、人間キャラクターの右手が動きます。~
その後 Spaceキーを押下すると、TurtleBot3がManipulatorを人間キャラクターの指差す方向に回転します。


----

#counter

Front page   New List of pages Search Recent changes   Help   RSS of recent changes