概要

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

温度・湿度センサーDHT11を使ってArduinoで温度と湿度を計測する
温度・湿度センサーDHT11を使ってArduinoで温度と湿度を計測する
概要 温度と湿度を計測することができるDHT11というセンサーを用いて、Arduinoで温度と湿度を計測する方法について解説をします。 DHT11について   DHT11は、温度と湿度を同時に計測することができるセンサーです。上記はモ...
Read More
Arduino IDEのインストール方法と使い方
Arduino IDEのインストール方法と使い方
概要 Arduinoは入出力ポートを備えたマイコンボードで、ソースコードを書くことで、さまざまなハードウェアを制御することができます。 ソースコードを開発・ボードに書き込むためには開発環境であるArduino IDEのインストールが必...
Read More
Arduino Nanoのピン配置
Arduino Nanoのピン配置
Arduino Nanoのピン配置です。公式ページ: https://content.arduino.cc/assets/Pinout-NANO_latest.pdf 備考 PWM出力が可能なピン:「~」が先頭についているピン...
Read More