シンプルなPublisherとSubscriberを実行
Simple Wiki Based Contents Management System
関心分野 >> Ros4Winのインストール >> シンプルなPublisherとSubscriberを実行

シンプルなPublisherとSubscriberを実行

このページでは、先ほど実装したシンプルなPublisherとSubscriberを起動し、その動作確認を行います。
ROSノードの実行には、まず最初にワークスペースのsetup.betを実行して環境設定を行います。
また、roscoreを起動しておかなければいけません。
 > roscd
 > devel\setup.bat
 > start roscore

C++版のTalkerとListenerの実行

では、C++版のTalkerとListenerを起動します。
  • Talkerの起動
まずは、talker.exeを実行します。下記のコマンドを実行してください。
 > rosrun --start mytut talker
このコマンドで新しいターミナルが生成され、下記のようなメッセージが出力されます。
[ INFO] [1549844854.758180485]: hello world 0
[ INFO] [1549844854.872939850]: hello world 1
[ INFO] [1549844854.973560110]: hello world 2
[ INFO] [1549844855.069129771]: hello world 3
[ INFO] [1549844855.159020143]: hello world 4
[ INFO] [1549844855.260110250]: hello world 5
[ INFO] [1549844855.359109178]: hello world 6
[ INFO] [1549844855.460095959]: hello world 7
[ INFO] [1549844855.574244626]: hello world 8
[ INFO] [1549844855.672937691]: hello world 9
 ....
  • Listenerの起動
talker.exeの起動確認後、listener.exeを起動しましょう。Talkerと同じように下記のコマンドを実行します。
 > rosrun -start mytut listener
このコマンドで新しいターミナルが生成され、下のようにメッセージが出力されます。
[ INFO] [1549844891.709761565]: I heard: [hello world 295]
[ INFO] [1549844891.812425711]: I heard: [hello world 296]
[ INFO] [1549844891.921390639]: I heard: [hello world 297]
[ INFO] [1549844892.022354288]: I heard: [hello world 298]
[ INFO] [1549844892.117833989]: I heard: [hello world 299]
[ INFO] [1549844892.223817393]: I heard: [hello world 300]
[ INFO] [1549844894.914836941]: I heard: [hello world 301]
[ INFO] [1549844894.916297887]: I heard: [hello world 302]
[ INFO] [1549844894.916470096]: I heard: [hello world 303]
 ....
以上でC++版のTalkerとListenerの起動は終了です。Ctrl+Cでそれぞれのノードを終了させてください。

Python版のTalkerとListenerの実行

次に、Python版のTalkerとListenerを起動します。
talker.pyを実行します。下記のコマンドを実行してください。
  • Talkerの起動
 > rosrun --start mytut talker.py
このコマンドで新しいターミナルが生成され、下記のようなメッセージが出力されます。このコマンドは、起動時に少し時間がかかると思いますが、起動までお待ちください。
[INFO] [1549845462.142998]: hello world 1549845462.142998
[INFO] [1549845463.161963]: hello world 1549845463.161963
[INFO] [1549845463.266190]: hello world 1549845463.2661898
[INFO] [1549845463.375866]: hello world 1549845463.37556
[INFO] [1549845463.477251]: hello world 1549845463.4772513
[INFO] [1549845463.575647]: hello world 1549845463.575135
[INFO] [1549845463.681808]: hello world 1549845463.6818075
[INFO] [1549845463.775603]: hello world 1549845463.775316
[INFO] [1549845463.870591]: hello world 1549845463.870591
[INFO] [1549845463.965235]: hello world 1549845463.9651203
[INFO] [1549845464.076141]: hello world 1549845464.075776
...
  • Listenerの起動
talker.exeの起動確認後、listener.exeを起動しましょう。Talkerと同じように下記のコマンドを実行します。
 > rosrun --start mytut listener.py
このコマンドで新しいターミナルが生成され、下記のようなメッセージが出力されます。このコマンドは、起動時に少し時間がかかると思いますが、起動までお待ちください。
[INFO] [1549845495.958827]: /listener_23540_1549845486519I heard hello world 1549845495.952654
[INFO] [1549845496.060109]: /listener_23540_1549845486519I heard hello world 1549845496.054523
[INFO] [1549845496.161596]: /listener_23540_1549845486519I heard hello world 1549845496.1558385
[INFO] [1549845496.266075]: /listener_23540_1549845486519I heard hello world 1549845496.2610874
[INFO] [1549845496.365711]: /listener_23540_1549845486519I heard hello world 1549845496.3603861
[INFO] [1549845496.466376]: /listener_23540_1549845486519I heard hello world 1549845496.4608088
[INFO] [1549845496.564770]: /listener_23540_1549845486519I heard hello world 1549845496.5603533
[INFO] [1549845496.661064]: /listener_23540_1549845486519I heard hello world 1549845496.6554263
[INFO] [1549845496.762734]: /listener_23540_1549845486519I heard hello world 1549845496.7573862
[INFO] [1549845496.860503]: /listener_23540_1549845486519I heard hello world 1549845496.8552563
[INFO] [1549845496.962931]: /listener_23540_1549845486519I heard hello world 1549845496.9572685
...
以上でPython版のTalkerとListenerの起動は終了です。Ctrl+Cでそれぞれのノードを終了させてください。

Ros4Winにおけるrosrun

上の例では、C++版のノードもPython版のノードもrosrunというコマンドで実行させました。では、各ノードのスクリプトまたは実行形式のファイルはどのにあるのでしょうか?
ワークスペースのディレクトリを C:\catkin_ws とすると、mytutパケージの実行形式のファイルは、
 C:\catkin_ws\devel\lib\mytut\Release
の下にあります。
また、Python版のノードは、ビルドの必要がありませんので、ソースコードを生成した場所である
 C:\catkin_ws\src\mytut\scripts
をPythonスクリプトとして起動しています。
このように、rosrunコマンドは、C++版のノードとPython版のノードの実行では、Ros4Winではノードの拡張子によって起動方法を切り替えています。
下にrosrun.batを示します。
@echo off
setlocal enabledelayedexpansion
set QT_QPA_PLATFORM_PLUGIN_PATH=%ROS_HOME%\bin\platforms

set START=
if "%1" == "--start" (
  set START=start
  shift
)

set PYTHON=
set PKG_NAME=%1
shift

set CMD_NAME=%1
set EXT=%~x1
shift

if "%CMD_NAME%" == "" set CMD_NAME=%PKG_NAME%
if "%EXT%" == ".py" set PYTHON=python.exe

set ARGS=
:ARG_PARSE
 set ARGS=%ARGS% %~1
 shift
if not "%~1" == "" goto :ARG_PARSE

set CATKIN_LIBEXEC_DIR=
FOR /F %%i in ('catkin_find --without-underlays --libexec --share  %PKG_NAME% ') do (
 set CATKIN_LIBEXEC_DIR=!CATKIN_LIBEXEC_DIR! %%i
)

FOR /F %%i in ('ros_location_find %PKG_NAME%') do ( set PKG_SHARE_DIR=%%i )

if "%CATKIN_LIBEXEC_DIR%" == "" (
    if "%PKG_SHARE_DIR%" == "Error" goto :END
)

if "%CMD_NAME%" == "%CMD_NAME:/=%" (
  FOR %%i in ( %CATKIN_LIBEXEC_DIR:/=\% ) do (
    FOR /F %%x in ('findfile.bat /r %%i  %CMD_NAME%') do ( 
      if  not "%%x" == "" (
        set CMD=%%x
        if not "!CMD:~-4!" == ".exe" ( set CMD=python.exe !CMD! )
        %START% !CMD! %ARGS%
        goto :END
      )
    )
  )
  if not "%PKG_SHARE_DIR%" == "Error" (
      if exist %PKG_LIB_DIR%\%CMD_NAME% (
        %START% %PYTHON% %PKG_LIB_DIR%\%CMD_NAME% %ARGS%
      ) else (
        echo No such file  %PKG_LIB_DIR%\%CMD_NAME%
      )
  )
) else (
  echo xxx
  if "%PKG_SHARE_DIR%" == "Error" (
     %START% %PYTHON% %CMD_NAME% %ARGS%
  ) else (
     %START% %PYTHON% %PKG_LIB_DIR%\%CMD_NAME% %ARGS%
  )
)

:END
endlocal
@echo on
次は、シンプルなサービスとクライアントを作成していきます。