μROSの使用方法@その1

前回ros-yukkysaito.hatenablog.com

μROSを実際に使用する。
μROSを利用した開発フローは以下の図のようになっています。
f:id:yukkysaito:20150429011105p:plain
引用 http://roscon.ros.org/2013/wp-content/uploads/2013/06/urosnode.pdf



とりあえず、

git clone git@github.com:openrobots-dev/uROSnode.git

してみる。すると/uROSnode/demos/turtlesim-posixがある。いったんサンプルコードをmakeする。

cd ./uROSnode/demos/turtlesim-posix
make

エラー発生・・・。
以下、エラー内容

gcc -c -O0 -ggdb -ansi -pedantic -fstack-usage -fdump-final-insns -Wall -Wextra -Wstrict-prototypes -MD -MP -MF .dep/MAKE_ALL_RULE_HOOK.d -I../../include -I./include -I. main.c -o main.o

=== CPPC command example ===
g++ -c -O0 -ggdb -fno-rtti -fstack-usage -fdump-final-insns -Wall -Wextra -MD -MP -MF .dep/MAKE_ALL_RULE_HOOK.d -I../../include -I./include -I. main.cpp -o main.o

Compiling ./src/urosUser.c
In file included from ../../include/urosBase.h:45:0,
                 from ../../include/urosUser.h:45,
                 from ./src/urosUser.c:42:
./src/urosUser.c: In function ‘urosUserParamUpdate’:
./src/urosUser.c:473:21: error: ‘UrosRpcParam’ has no member named ‘class’
     urosError(paramp->class != UROS_RPCP_INT, return UROS_ERR_BADPARAM,
                     ^
./include/urosconf.h:392:9: note: in definition of macro ‘urosError’
   { if (when) { \
         ^
./src/urosUser.c:475:46: error: ‘UrosRpcParam’ has no member named ‘class’
                UROS_STRARG(keyp), (int)paramp->class, (int)UROS_RPCP_INT));
                                              ^
./include/urosconf.h:398:14: note: in definition of macro ‘urosError’
       printf msgargs ; \
              ^
./src/urosUser.c:488:21: error: ‘UrosRpcParam’ has no member named ‘class’
     urosError(paramp->class != UROS_RPCP_INT, return UROS_ERR_BADPARAM,
                     ^
./include/urosconf.h:392:9: note: in definition of macro ‘urosError’
   { if (when) { \
         ^
./src/urosUser.c:490:46: error: ‘UrosRpcParam’ has no member named ‘class’
                UROS_STRARG(keyp), (int)paramp->class, (int)UROS_RPCP_INT));
                                              ^
./include/urosconf.h:398:14: note: in definition of macro ‘urosError’
       printf msgargs ; \
              ^
./src/urosUser.c:503:21: error: ‘UrosRpcParam’ has no member named ‘class’
     urosError(paramp->class != UROS_RPCP_INT, return UROS_ERR_BADPARAM,
                     ^
./include/urosconf.h:392:9: note: in definition of macro ‘urosError’
   { if (when) { \
         ^
./src/urosUser.c:505:46: error: ‘UrosRpcParam’ has no member named ‘class’
                UROS_STRARG(keyp), (int)paramp->class, (int)UROS_RPCP_INT));
                                              ^
./include/urosconf.h:398:14: note: in definition of macro ‘urosError’
       printf msgargs ; \
              ^
make: *** [build/obj/urosUser.o] Error 1

α版ということもありそう簡単にはいかない。
一応バグ修正を行った。
fix demos's bug · yukkysaito/uROSnode@ff9b37e · GitHub

make
cd build
./turtlesim #一回目は実行失敗とともに設定ファイルが作られる(rosmasterのIPアドレスとかが記述される模様?)
./turtlesim #エラー発生

makeして実行すると、エラーが出る。以下、エラー内容

=> uROS Node Test <=
Error at ../../src/lld/posix/uros_lld_conn.c:490
  function: uros_lld_conn_connect
  reason:   err != 0
  message:  Error at ../../src/lld/posix/uros_lld_conn.c:490
  function: uros_lld_conn_connect
  reason:   err != 0
  message:  Socket error [Connection refused] while connecting to 192.168.1.103:11311
Socket error [Connection refused] while connecting to 192.168.1.103:11311
Error at ../../src/urosNode.c:658
  function: urosNodePublishTopicByDesc
  reason:   err != UROS_OK
  message:  Error UROS_ERR_NOCONN while registering as publisher of topic [/turtle1/pose]
Error at ./src/app.c:418
  function: turtle_spawn
  reason:   err != UROS_OK
  message:  Error UROS_ERR_NOCONN while publishing topic [/turtle1/pose]
Error at ../../src/lld/posix/uros_lld_conn.c:490
  function: uros_lld_conn_connect
  reason:   err != 0
  message:  Socket error [Connection refused] while connecting to 192.168.1.103:11311

どうやらrosmasterのIPアドレスが間違っているようだ。
/uROSnode/demos/turtlesim-posix/include/urosconf.h内にIPアドレスの記述があるらしい。
ここを適切なIPアドレスに書き換える必要がある。

その後、以下のコマンドを実行。

cd ..
rm -rf ./build
make
./turtlesim
./turtlesim

再びエラー発生。以下、エラー内容。

=> uROS Node Test <=
turtlesim: ../../src/urosNode.c:594: urosNodePublishTopicSZ: Assertion `namep[0] != 0' failed.
Aborted (core dumped)

再びバグ修正
fix demos's bug · yukkysaito/uROSnode@30fdc7a · GitHub

動くようになったf:id:yukkysaito:20150429023727p:plain
修正版はここにあげときます。ご自由に使ってくださいgithub.com

次はもう少し詳しく見ていきます