概要

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

ArduinoのpulseInで割り込み処理ができるようにする
ArduinoのpulseInで割り込み処理ができるようにする
概要 超音波センサーHC-SR04等を用いてArduinoで距離計測を行いたいときに、Trigピンで超音波を発生させた後にEchoピンで、超音波が反射されてくるまでの時間を計測することで距離を計測できます。その際、pulseInという...
Read More
Arduino IDEのインストール方法と使い方
Arduino IDEのインストール方法と使い方
概要 Arduinoは入出力ポートを備えたマイコンボードで、ソースコードを書くことで、さまざまなハードウェアを制御することができます。 ソースコードを開発・ボードに書き込むためには開発環境であるArduino IDEのインストールが必...
Read More
WindowsでArduino Uno互換ボードに書き込む時にシリアルポートが選択できない時の対処法
WindowsでArduino Uno互換ボードに書き込む時にシリアルポートが選択できない時の対処法
概要 Arduino Uno R3の互換ボードを用いる時、WindowsでArduino IDEを開き、シリアルポートを繋げようとした際にグレーアウトされてしまって選択することができない場合があるので、解決方法について解説をします。 ...
Read More