μROSの使用方法@その3

前回の続きから・・・と言いたかったのですが、諸事情でずいぶん更新していませんでした。
ros-yukkysaito.hatenablog.com

結論から言うと、uROSは動作しました。
uROSをつかってvelodyne driverノードを動かすところまでは成功しています。
bitbucket.org

上記のBitbucketに成果物があるのでご自由に。
この成果物では、velodyne driverとvelodyneのパケット再生シミュレータが入っています。

git clone https://yukkysaito@bitbucket.org/yukkysaito/urosnode_velodyne_driver.git:title=git@github.com:openrobots-dev/uROSnode.git

でcloneできます。

"urosnode_velodyne_driver/velodyne_packet_create/"ディレクトリがシミュレータになります。

make run

すれば、192.168.218.255にvelodyneのパケットがブロードキャストされます。
送信アドレスを変更したければアドレスをMakefileの9行目を変更してください。

肝心のvelodyne driverですが、
"urosnode_velodyne_driver/uROSnode/demos/velodyne_posix /"ディレクトリになります。
あとは
μROSの使用方法@その1 - ROS blog
を参考に、buildして実行で行けるはずです。一応その2で解決できていなかった問題も修正してあるのですんなりいくと思います。
μROSの使用方法@その2 - ROS blog

もし、uROSを使う人がいたら、私の
https://yukkysaito@bitbucket.org/yukkysaito/urosnode_velodyne_driver.git
をベースにしたほうがいいと思います。一応、コア部分のバグはつぶして動作するはずなので・・・。
※どこを修正したかは記憶がありません

μROSの使用方法@その2

前回ros-yukkysaito.hatenablog.com

μROSのサンプルであるturtlesimを実行するところまではたどり着いた。
turtlesimに/turtle1/command_velocityトピックを配信して動作を確認してみる(疑似トピック)。
f:id:yukkysaito:20150430031031p:plain
turtlesimは90Hz弱でトピックを配信しているが、トピック内容に変化はない。
turtlesimの端末では何かしらエラーが出ている。

=> uROS Node Test <=
Error at ../../src/lld/posix/uros_lld_conn.c:541
  function: uros_lld_conn_recv
  reason:   nb == 0
  message:  Socket closed by remote before receiving at most 4 bytes from 127.0.1.1:55335
Error at ../../src/urosTcpRos.c:607
  function: urosTcpRosRecv
  reason:   tcpstp->err != UROS_OK && tcpstp->err != UROS_ERR_TIMEOUT
  message:  Error UROS_ERR_EOF while receiving 4 bytes after []
Error at ../../src/urosTcpRos.c:281
  function: uros_tcpcli_topicsubscription
  reason:   err != UROS_OK
  message:  Topic [/turtle1/command_velocity] client handler returned UROS_ERR_EOF

rosmasterとのXMLRPCによる宣言はうまくいっているようだが、その後のXMLRPCかソケットの確立がうまくいってなさそう・・・。(そして、もう一つ疑問。90Hz弱でトピックを配信しているということは、データ受信していなくても配信動作を行っている?これは問題あり。μROSの仕様なのかturtlesimに限った話かは調査する必要がある。)

次回へ

μ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

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

μROSについて

μROSはROSのEmbedded部門で検討されている組込み向けROSです。(roscというのもある)

参考資料

http://www.osrfoundation.org/wordpress2/wp-content/uploads/2015/04/ros_and_embedded_systems.pdf

sig/Embedded - ROS Wiki

現状では、Github上でイタリアのAndrea Zoppiさんが一人で手掛けている模様。

更新は2年前にとまっており、現在は活動していない?

非常に資料が少ないので、調べて公開していこうと思う。

参考資料

μROSnode - Doxygen

http://roscon.ros.org/2013/wp-content/uploads/2013/06/urosnode.pdf - ROS conference 2013での発表資料

https://vimeo.com/66970254 - ROS conference 2013での発表動画

公になっている参考資料はこれくらいだと思う。

 

とりあえず、μROSをかまってみる。

次回はμROSの使用方法について