Turtlebot3上のLEDの意味について調べてみた

スポンサーリンク

Turtlebot3を動かしていると色々なLEDがチカチカするので、OpenCR部分のLEDについて調べてみた。

結果

ハードウェア上に記載されている名称

http://emanual.robotis.com/docs/en/parts/controller/opencr10/

f:id:sato_susumu:20190823213555p:plain:w300 f:id:sato_susumu:20190823213613p:plain:w300

名称毎のLEDの意味

名称 内容
USER1 オレンジ TXD:ラズパイにシリアルデータを送信してればトグル点灯
USER2 オレンジ RXD:ラズパイからシリアルデータの受信してればトグル点灯
USER3 オレンジだったかな ローバッテリー
USER4 ROS接続できれいれば点灯
STATUS 基本消灯? よくわからなかった。
Arduino OpenCR上のスケッチのループが動作してれば、500ミリ秒間隔でトグル点灯
Power OpenCRの電源が入っていれば点灯

USB端子の隣の緑のLEDはUSBと書いてある。

解析情報

あとはダラダラと解析内容を記載。

OpenCRのPIN定義

OpenCR / arduino / opencr_arduino / opencr / variants / OpenCR / chip.h

#define LED_BUILTIN             13
#define BDPIN_LED_USER_1        22
#define BDPIN_LED_USER_2        23
#define BDPIN_LED_USER_3        24
#define BDPIN_LED_USER_4        25
#define BDPIN_LED_STATUS        36

PIN設定と初期の消灯

OpenCR / arduino / opencr_arduino / opencr / variants / OpenCR / variant.cpp

void var_init(void)
{
省略
  pinMode(BDPIN_LED_USER_1, OUTPUT);
  pinMode(BDPIN_LED_USER_2, OUTPUT);
  pinMode(BDPIN_LED_USER_3, OUTPUT);
  pinMode(BDPIN_LED_USER_4, OUTPUT);

  digitalWrite(BDPIN_LED_USER_1, HIGH);
  digitalWrite(BDPIN_LED_USER_2, HIGH);
  digitalWrite(BDPIN_LED_USER_3, HIGH);
  digitalWrite(BDPIN_LED_USER_4, HIGH);
}

LED操作関数。引数は0〜3

static uint8_t user_led_tbl[] = { BDPIN_LED_USER_1,
                                  BDPIN_LED_USER_2,
                                  BDPIN_LED_USER_3,
                                  BDPIN_LED_USER_4 };
省略
void setLedOn(uint8_t led_num)
{
  if(led_num < 4)
  {
    digitalWrite(user_led_tbl[led_num], LOW);
  }
}

void setLedOff(uint8_t led_num)
{
  if(led_num < 4)
  {
    digitalWrite(user_led_tbl[led_num], HIGH);
  }
}                                  

void setLedToggle(uint8_t led_num)
{
  if(led_num < 4)
  {
    digitalWrite(user_led_tbl[led_num], !digitalRead(user_led_tbl[led_num]));
  }
}

LED操作関数に渡す0〜3の使い方定義

OpenCR / arduino / opencr_arduino / opencr / libraries / turtlebot3 / include / turtlebot3 / turtlebot3_diagnosis.h

#define LED_TXD                          0
#define LED_RXD                          1
#define LED_LOW_BATTERY                  2
#define LED_ROS_CONNECT                  3
#define LED_WORKING_CHECK                13

USER1〜4の点灯、消灯指示

OpenCR / arduino / opencr_arduino / opencr / libraries / turtlebot3 / src / turtlebot3 / turtlebot3_diagnosis.cpp

void Turtlebot3Diagnosis::showLedStatus(bool isConnected)
{
  static uint32_t t_time = millis();

  if ((millis()-t_time) >= 500)
  {
    t_time = millis();
    digitalWrite(LED_WORKING_CHECK, !digitalRead(LED_WORKING_CHECK));
  }

  if (getPowerInVoltage() < 11.1)
  {
    setLedOn(LED_LOW_BATTERY);
  }
  else
  {
    setLedOff(LED_LOW_BATTERY);
  }

  if (isConnected)
  {
    setLedOn(LED_ROS_CONNECT);
  }
  else
  {
    setLedOff(LED_ROS_CONNECT);
  }

  updateRxTxLed();
}

showLedStatusの呼び出し元のスケッチ

OpenCR / arduino / opencr_arduino / opencr / libraries / turtlebot3 / examples / turtlebot3_burger / turtlebot3_core / turtlebot3_core.ino

void loop()
{
省略
  // Show LED status
  diagnosis.showLedStatus(nh.connected());
省略
}