概要

rosserialを用いてArduinoでROSトピックをSubscribeしようとした時に、Lost sync with device, restarting... と表示されて接続が切れてしまう時に確認すべき事項をまとめました。

rosserialのインストール方法・使い方については下記記事を参考にしてください。

https://rb-station.com/blogs/article/rosserial-arduino-cmd_vel

デバッグ方法

ロギング方法は下記を参考にしましょう。

nh.logdebug("Debug Statement");
nh.loginfo("Program info");
nh.logwarn("Warnings.");
nh.logerror("Errors..");
nh.logfatal("Fatalities!");

このようにログレベルごとにロギングができますので、Arduinoのコード内にロギングを加えておきましょう。WARNやFATALの場合など色が変わりますので、適切なログレベルを使い分けましょう。

ログレベル

尚、数値を表示させたい時は下記のようにsprintfでフォーマットしてからロギングしましょう。

  int x = 100;
  char buf[100];
  sprintf(buf, "x = %d", x);
  nh.loginfo(buf);

 

確認チェックリスト

ケーブルが繋がっているか確認

初歩的なミスですが、ケーブルが抜けている・認識されていない可能性があります。ケーブルを抜き差しして認識されるかを確認しましょう。

認識されない場合はケーブルを買い替えてしまうのも手です。

 

USBのデバイス名が合っているか確認

rosserialを実行する際に、/dev/ACM0、/dev/USB0など接続されたデバイスを指定すると思いますが、これが合っているかを確認しましょう。

ls /dev/tty*

などで、rosserialを実行する際に指定しているデバイスが存在するかを確認します。

nh.spinOnce()が実行されているか確認

void loop(){
  nh.spinOnce();
  delay(1);
}

 上記のようにloopの中で一定期間ごとにnh.spinOnce()が実行されているかを確認します。delayの時間が長すぎると、タイムアウトしてしまい接続切れとみなされてしまうので、短めの時間にしておいた方が良いかと思います。

コードの確認

何らかの重い処理をしていたり、他の動作をブロックするような処理をしていて、nh.spinOnce()が実行されない時も接続が切れてしまうことがあります。

一度コードを精査し、他の処理をブロックするような処理がないかを確認しましょう。

その他

  • Arduinoのsetupのタイミング、rosserialの実行タイミングの前後は関係ありません。正常な状態であれば、どちらからスタートさせても繋がります。
  • シリアルモニタと併用はできないので、デバッグをする際は、nh.loginfo等のrosserialが用意しているロギングツールを使うと良いと思います。
ArduinoRosRosserial

Related Posts

VMWare FusionでUbuntu 18.04のディスク容量を上げる方法
VMWare FusionでUbuntu 18.04のディスク容量を上げる方法
概要 VMWare FusionでUbuntu 18.04の仮想ディスクを起動する際に、ハードディスクの容量を上げる方法について解説します。 手順 1. 仮想ディスクの電源をOFFにする 2. 設定ボタンを押して設定画面を開いた後に、...
Read More
rospyでImageデータを取得してOpenCVの配列として扱う
rospyでImageデータを取得してOpenCVの配列として扱う
概要 PythonでROS開発をする際、sensor_msgs/Image型のトピックを受信して色々な処理をかけたいときには、OpenCVの配列に変換した上で処理を行うと便利です。CvBridgeというsensor_msgs/Imag...
Read More
ネイティブアプリでROS通信をする際はFlutterとroslibがおすすめ
ネイティブアプリでROS通信をする際はFlutterとroslibがおすすめ
概要 ROSを起動させているロボットに対して、スマートデバイスからROSで通信を行いたい時があるときは、Flutterを用いたネイティブアプリで実装するのがおすすめです。 https://rb-station.com/blogs/ar...
Read More