概要

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

TB6600を使ってステッピングモータをArduinoで動作させる
TB6600を使ってステッピングモータをArduinoで動作させる
概要 TB6600はステッピングモータを制御することができる、ステッピングモータコントローラです。TB6600を用いることで、ステッピングモータの回転速度や回転の粒度、方向などをマイコンから制御できるようになります。本記事ではTB66...
Read More
ACアダプターから得られた電源を回路に組み込む
ACアダプターから得られた電源を回路に組み込む
概要 コンセントから得られる交流の電源を、ACアダプターでDC電源に変換をした上で電子回路に導入したいときの方法について解説をします。 ネジ端子 ACアダプターの端子を+と-に分けてくれるネジ端子がありますので、これを用いることでDC...
Read More
WindowsでArduino Uno互換ボードに書き込む時にシリアルポートが選択できない時の対処法
WindowsでArduino Uno互換ボードに書き込む時にシリアルポートが選択できない時の対処法
概要 Arduino Uno R3の互換ボードを用いる時、WindowsでArduino IDEを開き、シリアルポートを繋げようとした際にグレーアウトされてしまって選択することができない場合があるので、解決方法について解説をします。 ...
Read More