MoriKen's Journal

MoriKen's Journal

アラサー社会人博士による徒然日記。技術についてつらつら。だけだとコンテンツが貧弱なので、会社公認で大学院博士課程に進学した経緯や、独学でTOEICを475→910にしたノウハウを共有します。

【ROS 1】ROSとV-REP(v3.4.0)でロボットをシミュレートする

Sponsored Link

ROSとV-REP(v3.4.0)を連携させて、ロボットシミュレーションをしてみたのですが、少しハマった箇所もあるので、その手順を記します。

はじめに

V-REPの概要

V-REPとは、Coopelia Robotics が提供するマルチプラットフォーム対応のロボットシミュレータです。多種多彩なロボットモデルがすぐに利用可能な形態で配布されており、様々なAPIと連携できるようになっています。

そのAPIの一つとして、ROSが対応しています。

今回の記述範囲

デフォルトでV-REPに搭載されている「rosInterfaceTopicPublisherAndSubscriber.ttt」を動作させるところまでです。

環境

  • OS: Ubuntu 16.04
  • ROS: Kinetic

セットアップ

V-REP の取得

V-REP v.3.4.0 をダウンロードします。保存先のディレクトリを「~/vrep_v340」とします。

$ wget http://coppeliarobotics.com/files/V-REP_PRO_EDU_V3_4_0_Linux.tar.gz -P ~/vrep_v340
$ tar -zxvf V-REP_PRO_EDU_V3_4_0_Linux.tar.gz
$ mv V-REP_PRO_EDU_V3_4_0_Linux/* ./
$ rm -rf V-REP_PRO_EDU_V3_4_0_Linux

V-REPのルートディレクトリを環境変数VREP_ROOTとして登録するよう、~/.bashrc にアペンドします。

$ echo "export VREP_ROOT=~/vrep_v340" >> ~/.bashrc
$ source ~/.bashrc

ROSパッケージのビルド

ROSワークスペースを作ります。

$ mkdir -p ~/catkin_ws/src
$ cd ~/catkin_ws/src
$ catkin_init_workspace

先にダウンロードしたV-REPのディレクトリにあるROSプラグインのパッケージを、ROSのワークスペースにコピーします。

$ cd ~/vrep_v340/programming/ros_packages/
$ cp -r ros_bubble_rob2 v_repExtRosInterface vrep_plugin_skeleton vrep_skeleton_msg_and_srv ~/catkin_ws/src/

ビルドはcatkin buildで行う必要があるようです。catkin_makeではダメだそうです。python-catkin-toolsをインストールしていない場合は、インストールしましょう。

$ sudo apt update
$ sudo apt install python-catkin-tools

ビルドします。

$ cd ~/catkin_ws
$ catkin build

ビルドされたモジュールをV-REPのルートディレクトリにコピーします。

$ cd ~/catkin_ws/devel/lib
$ cp libv_repExtRosInterface.so libv_repExtRosSkeleton.so ~/vrep_v340/

これにて準備完了です。

V-REPによるシミュレーション

起動

まずroscoreを立ち上げます。

roscore

次に、別シェルでV-REPを立ち上げます。

$ $VREP_ROOT/vrep.sh

シミュレータが立ち上がります。以下のようなメッセージが出ていればROSのプラグインが読み込まれています。

Plugin 'RosInterface': loading...
Plugin 'RosInterface': load succeeded.
Plugin 'RosSkeleton': loading...
Plugin 'RosSkeleton': load succeeded.

Scene ファイルの読み込み

メニューバーの「File」→「Open」→「Scene」からファイル選択ダイアログを開き、「rosInterfaceTopicPublisherAndSubscriber.ttt」を選択します。

その後、ツールバー上の「Play」ボタンを押します。すると、カメラから取得したイメージをPublish した画像が上方に、Subscribe した画像が下方に表示されます。

f:id:MoriKen254:20180731232559p:plain

トピックの一覧を見ると、下記のようになります。/image が画像のトピックです。

$ rostopic list
/image
/rosout
/rosout_agg
/tf
/vrep/info
/vrep_ros_interface/addStatusbarMessage
/vrep_ros_interface/objectCount

rqt_graphも確認してみます。/vrep_ros_interfaceが/image トピックとやり取りしているのが確認できます。

f:id:MoriKen254:20180731232506p:plain

トラブルシューティング

以下のようなエラーメッセージが出る場合があります。

symbol lookup error: ~/vrep_v340//libv_repExtRosInterface.so: undefined symbol: _ZN3ros4initERiPPcRKSsj

これは、~/vrep_v340/compiledRosPlugins\以下のlibv_repExtRosInterface.solibv_repExtRosSkeleton.soを直接~/vrep_v340/にコピーした時に起こります。

これらのモジュールについて、本エントリの手順に従ってソースコードからcatkin buildしたものを使用すれば、問題は解決します。

おわりに

チュートリアルレベルの最低限のサンプルを動作させました。