μROSの使用方法@その1
前回ros-yukkysaito.hatenablog.com
μROSを実際に使用する。
μROSを利用した開発フローは以下の図のようになっています。
引用 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
動くようになった
修正版はここにあげときます。ご自由に使ってくださいgithub.com
次はもう少し詳しく見ていきます