ROS::ServiceClient callの戻り値が常に0

191 views
Skip to first unread message

Kenta Yonekura

unread,
Dec 18, 2014, 2:55:49 PM12/18/14
to ros-jap...@googlegroups.com
皆さま

筑波大学の米倉です.
いつも勉強させていただいております.

Intel EdisonやRaspberryp-piといった,小型のLinuxボードからGPIOを
叩くためのlibmraaというライブラリがあるのですが,そのラッパーとなる
ROSノード(サービス)を作成しました.

参考 libmraa : https://github.com/intel-iot-devkit/mraa
作成したノード : https://github.com/yoneken/ros_gpio

このノードを実際に使用しようとクライアントからROS::ServiceClientの
インスタンス経由でcallしたところ,表題の問題が出ました.
試しに,rosservice callからコマンドを叩いても,同様にresult: 0が返ります.
ただ,どうもサービスの側ではちゃんと動いているようで,result: 0でも
GPIOはON/OFFして,ログもサービスがtrueを返すほうのものが出ております.

操作中のログ : https://gist.github.com/yoneken/2a7992327bc4ae5af855

私の認識では,サービスとの通信が正常に完了した場合は,result: 1が
返ってくるはずだと思っていたのですが,間違っていたでしょうか?

非常に初歩的なところだと思うのですが,ご教授いただければ幸いです.
よろしくお願い致します.

参考 : Intel EdisonにROSをインストール http://qiita.com/yoneken/items/eda0bedec847761088c1

/**
*@author Kenta Yonekura
*@mail mill...@gmail.com
*@see http://blog.livedoor.jp/k_yon/
*/

Kenta Yonekura

unread,
Dec 18, 2014, 3:20:01 PM12/18/14
to ros-jap...@googlegroups.com
皆さま

筑波大学の米倉です.

すいません.自分の認識違いがわかったので,若干,訂正させてください.

先ほどのメールで,「result: 0が返ります」と言ったところは,
私がサービスの返り値にresultという変数名を設定し,正常に処理が
終了した場合には0を返すようにしていたため,既定の挙動でした.

質問内容を,

ros::ServiceClient client =
n.serviceClient<beginner_tutorials::AddTwoInts>("add_two_ints");
beginner_tutorials::AddTwoInts srv;
srv.request.a = atoll(argv[1]);
srv.request.b = atoll(argv[2]);

上のようなコードの場合に,サービスの通信がうまくいかなかった場合を,

if (!client.call(srv))

で分離しようとしていたのですが,この書き方は間違っていますか?

というように変更させてください.

よろしくお願い致します.

Kenta Yonekura

unread,
Dec 18, 2014, 3:45:33 PM12/18/14
to ros-jap...@googlegroups.com
たびたびすいません.
米倉です.

先ほどの質問について,自己解決してしまいまいたので報告します.

ただ単に,ServiceClientに指定するトピック名が間違っていただけの
問題でした.以下のように変更して,動作するようになりました.
https://github.com/yoneken/ros_gpio/commit/45fe23dd5d8daa2db98d4618b9605fd003040543

お騒がせしました.
またよろしくお願い致します.

/**
*@author Kenta Yonekura
*@mail mill...@gmail.com
*@see http://blog.livedoor.jp/k_yon/
*/


Reply all
Reply to author
Forward
0 new messages