[Discourse.ros.org] [Local User Groups/ROS Japan Users Group] Rosserial_mbedのシリアルピンの変更方法について

20 views
Skip to first unread message

t k

unread,
Dec 7, 2017, 12:05:08 AM12/7/17
to ros-jap...@googlegroups.com
s5460
December 7

ROS Japan Users Groupの皆様

ROSを始めて二か月程になる学生です.環境はUbuntu 16.04 LTS ,kinetic となります.

現在,mbed LPC1768 搭載のロボットと,ROSが動いているノートPCをUSBケーブルで接続し,rosserial_mbedを導入して通信させているのですが,ロボットの形状から無線化が必要になりました.そこで,xbeeを導入し無線化を行おうとしているのですが,rosserial_mbedのシリアルピンのデフォルトがUSBTX,USBRXに設定されているため,これをp13,p14に変更してxbeeと接続させたいと考えています.しかし,その方法が分からず困っております.

一通りネット上で調べたのですが,良い方法が見つかりませんでした.ご存知の方はご教授いただけると幸いです.

また,mbed+xbeeよりも簡単にマイコン・PC間の無線化をする方法があれば,そちらの方法も教えていただければと思います.一応,aruduinoは扱ったことがあります.

※raspberry pi 等のシングルボードコンピュータはサイズ的にロボットに載せられないので,恐縮ですが,これらを使った方法は除外ということでよろしくお願いします.

以上になります.質問事項が多岐に渡り,申し訳ありませんがよろしくお願いいたします。


Visit Topic or reply to this email to respond.

You are receiving this because you enabled mailing list mode.

To unsubscribe from these emails, click here.

Ron Tajima

unread,
Dec 7, 2017, 2:18:49 AM12/7/17
to ros-jap...@googlegroups.com
longjie
December 7

ビルド等が手元で出来無いのでヒント程度ですが,mbed_rosserialのコードを見ると,

ros-drivers/rosserial/blob/jade-devel/rosserial_mbed/src/ros_lib/ros.h#L43

  1. */
  2. #ifndef _ROS_H_
  3. #define _ROS_H_
  4. #include "ros/node_handle.h"
  5. #include "MbedHardware.h"
  6. namespace ros
  7. {
  8. typedef NodeHandle_<MbedHardware> NodeHandle;
  9. }
  10. #endif

から,

ros-drivers/rosserial/blob/jade-devel/rosserial_mbed/src/ros_lib/MbedHardware.h#L17

  1. #ifndef ROS_MBED_HARDWARE_H_
  2. #define ROS_MBED_HARDWARE_H_
  3. #include "mbed.h"
  4. #include "BufferedSerial.h"
  5. class MbedHardware {
  6. public:
  7. MbedHardware(PinName tx, PinName rx, long baud = 57600)
  8. :iostream(tx, rx){
  9. baud_ = baud;
  10. t.start();
  11. }
  12. MbedHardware()
  13. :iostream(USBTX, USBRX) {
  14. baud_ = 57600;
  15. t.start();
  16. }

となっているので,おそらく,

ros::NodeHandle nh(new MbedHardware(p13, p14, 57600));

とすれば良いのではないかと思います.


Visit Topic or reply to this email to respond.


Previous Replies

t k

unread,
Dec 7, 2017, 2:57:59 AM12/7/17
to ros-jap...@googlegroups.com
s5460
December 7

ご返信ありがとうございます。
早速,教えていただいた方法を試してみたのですが,No instance of constructor とエラーが出てしまいました.
確認のため,自分の環境でのMbedHardware.hを見てみましたがクラスの中身はご提示いただいたgithubのコードと全く同じものでした.
応急的な措置になりますが,github上の24行目のUSBTX,USBRXをp13,p14に書き換えてしまった方がいいのでしょうか?

以下にエラーメッセージの全文を載せておきます.

Error: No instance of constructor “ros::NodeHandle_<Hardware, MAX_SUBSCRIBERS, MAX_PUBLISHERS, INPUT_SIZE, OUTPUT_SIZE>::NodeHandle_ [with Hardware=MbedHardware, MAX_SUBSCRIBERS=25, MAX_PUBLISHERS=25, INPUT_SIZE=512, OUTPUT_SIZE=512]” matches the argument list in “main.cpp”, Line: 23, Col: 21


Visit Topic or reply to this email to respond.


Previous Replies

s5460
December 7

t k

unread,
Dec 7, 2017, 3:01:06 AM12/7/17
to ros-jap...@googlegroups.com
s5460
December 7

ちなみに自分はmbed公式のオンラインコンパイラを使用しています.

Ron Tajima

unread,
Dec 7, 2017, 5:07:24 AM12/7/17
to ros-jap...@googlegroups.com
longjie
December 7

おっと,NodeHandle_のコンストラクタがHardware型を引数にとるわけじゃないからこれじゃダメでしたね.

ros-drivers/rosserial/blob/jade-devel/rosserial_client/src/ros_lib/ros/node_handle.h#L128

  1. uint8_t message_in[INPUT_SIZE];
  2. uint8_t message_out[OUTPUT_SIZE];
  3. Publisher * publishers[MAX_PUBLISHERS];
  4. Subscriber_ * subscribers[MAX_SUBSCRIBERS];
  5. /*
  6. * Setup Functions
  7. */
  8. public:
  9. NodeHandle_() : configured_(false)
  10. {
  11. for (unsigned int i = 0; i < MAX_PUBLISHERS; i++)
  12. publishers[i] = 0;
  13. for (unsigned int i = 0; i < MAX_SUBSCRIBERS; i++)
  14. subscribers[i] = 0;
  15. for (unsigned int i = 0; i < INPUT_SIZE; i++)
  16. message_in[i] = 0;

もちろんコードを書き換えても動くとは思いますが,なんかやり方がある気がします.
どうするんだろう,ちょっとすぐに分からないです.


Visit Topic or reply to this email to respond.


Previous Replies

s5460
December 7

ちなみに自分はmbed公式のオンラインコンパイラを使用しています.

t k

unread,
Dec 7, 2017, 11:54:55 PM12/7/17
to ros-jap...@googlegroups.com
s5460
December 8

確かに,ヘッダー内を直接書き換えるよりもいい方法があるとは思うのですが...
もう少し時間をかけて方法を探っていきたいと思います.ビルド環境が無い中,お手伝いいただきありがとうございます.

Reply all
Reply to author
Forward
0 new messages