30代エンジニアの備忘録のカバー画像

30代エンジニアの備忘録

組み込み開発・信号処理・プログラミングの技術メモと短編小説

🤖 【TurtleBot3 ROS2環境構築⑥】TurtleBot3初回起動とキーボード操縦 - bringupからteleop_keyboardまで

シリーズ この記事は「TurtleBot3 × ROS2 環境構築シリーズ」の一部です。 シリーズ目次を見る

2026年5月時点。シリーズ⑥です。ネットワーク設定のあと、実機で bringup と teleop_keyboard を動かし、RViz2 で LiDAR を見ます。想定読者は SSH まで終え、初めてモータを回したい方です。

手順の正本は TurtleBot3 e-Manual の Bringup です。電源順序(OpenCR→RPi4)と ROS_DOMAIN_ID の一致を先に確認すると、/scan が見えないトラブルを減らせます。

読了後はホストPC から /cmd_vel を送り、RViz2 でスキャンが流れるところまで確認できる状態を目指します。


bringup 前に何を確認する?

チェック項目 確認方法
バッテリーが充電されている OpenCR LED が緑 / 電圧 11.1V 以上(目安)
ホストPCと TurtleBot3 が同一 Wi-Fi ping(IP は自分の環境のもの)
ROS_DOMAIN_ID が両方で一致 echo $ROS_DOMAIN_ID
TURTLEBOT3_MODEL=burger echo $TURTLEBOT3_MODEL
OpenCR ファームウェア書き込み済み シリーズ③の手順完了想定
TurtleBot3起動前チェックリスト確認画面
TurtleBot3起動前チェックリスト確認画面

Step 1: 電源投入の順序は?

1-1. バッテリーの装着と確認
バッテリー電圧の確認方法:
- OpenCRの電源スイッチをON
- 緑LED点灯 → 正常(11.1V以上)
- 赤LED点灯 → 要充電(11V未満)
TurtleBot3 BurgerのバッテリーとOpenCR接続位置
TurtleBot3 BurgerのバッテリーとOpenCR接続位置
1-2. 電源ONの順序
  1. OpenCRの電源スイッチをON(基板上のスイッチ)
  2. Raspberry Pi 4の電源をON(OpenCRのUSBポートから給電)
  3. RPi4のLEDが緑色に安定点灯したら起動完了(約30秒〜1分)
TurtleBot3の電源投入手順(OpenCR→RPi4の順)
TurtleBot3の電源投入手順(OpenCR→RPi4の順)
1-3. SSHで接続確認
# ホストPCのターミナルで
ssh turtlebot3
# または: ssh ubuntu@192.168.1.101

Step 2: bringup はどう起動する?

bringup は TurtleBot3 e-Manual どおり、ロボット上のハードウェアノード(LiDAR・オドメ・モータドライバ)を起動する操作です。

2-1. TurtleBot3側でbringupを実行

SSH でログインした RPi4 のシェルで launch を実行します。ホストPC 側は RViz2 や teleop を動かす構成が一般的です。

# RPi4(SSH接続中)
ros2 launch turtlebot3_bringup robot.launch.py

正常起動時の出力:

[INFO] [turtlebot3_node]: Init TurtleBot3 Node.
[INFO] [turtlebot3_node]: ROS_DOMAIN_ID: 30
[INFO] [turtlebot3_node]: Succeeded to open the port - /dev/ttyACM0
[INFO] [turtlebot3_node]: Succeeded to set the baudrate - 1000000
[INFO] [hlds_laser_publisher]: Initializing Scanner...
[INFO] [hlds_laser_publisher]: Firmware version: 1.28
bringup起動成功のターミナル出力(センサー初期化完了)
bringup起動成功のターミナル出力(センサー初期化完了)
💡
bringupを実行したSSHターミナルは起動中は絶対に閉じないでください。終了するとTurtleBot3が即座に停止します。次の操作は別のターミナルで行ってください。
2-2. ホストPC側でトピック確認

別のターミナル(ホストPC)で確認します。

ros2 topic list

以下のトピックが表示されれば起動成功:

/battery_state
/cmd_vel
/imu
/joint_states
/odom
/scan
/sensor_state
/tf
# LiDARデータのリアルタイム確認
ros2 topic echo /scan --once
ホストPC側でのトピック一覧確認(TurtleBot3の全トピックが見える)
ホストPC側でのトピック一覧確認(TurtleBot3の全トピックが見える)

Step 3: teleop_keyboard で操縦するには?

3-1. キーボード操縦ノードの起動

ホストPC側の新しいターミナルで実行します。

# ホストPC(新しいターミナル)
ros2 run turtlebot3_teleop teleop_keyboard

起動すると操作ガイドが表示されます:

Control Your TurtleBot3!
---------------------------
Moving around:
        w
   a    s    d
        x

w/x : increase/decrease linear velocity (Burger : ~ 0.22 m/s)
a/d : increase/decrease angular velocity (Burger : ~ 2.84 rad/s)
space key, s : force stop
CTRL-C to quit
teleop_keyboardの起動画面(操作ガイド表示)
teleop_keyboardの起動画面(操作ガイド表示)
3-2. 操縦方法
キー 動作 備考
W 前進(速度アップ) 押すたびに 0.01 m/s 程度増加(種別による)
X 後退(速度ダウン) 押すたびに速度減少
A / D 左旋回 / 右旋回 角速度を段階的に変更
S / Space 停止 速度ゼロへ
💡
初めは速度を小さくしてテストしてください。Burgerの最高速度は 0.22 m/s です。急に全速力にするとTurtleBot3が転倒する可能性があります。
TurtleBot3が実際に進行している様子
TurtleBot3が実際に進行している様子

Step 4: RViz2 で LiDAR はどう見る?

ホストPCのRViz2でTurtleBot3のLiDARデータや姿勢をリアルタイム可視化します。

4-1. RViz2の起動

ホストPC側の新しいターミナルで実行します。

ros2 launch turtlebot3_bringup rviz2.launch.py
4-2. RViz2の表示内容
  • 赤い点群: LiDARが検出した障害物・壁
  • TurtleBot3の3Dモデル: ロボットの現在姿勢
  • 座標軸: ロボットの向き(赤=X軸、緑=Y軸、青=Z軸)
RViz2でLiDARデータをリアルタイム表示している様子
RViz2でLiDARデータをリアルタイム表示している様子

TurtleBot3を操縦しながらRViz2を見ると、LiDARの点群が部屋の壁や障害物を検出し、ロボットの移動に合わせてリアルタイムで更新されるのがわかります。

4-3. 追加表示の設定

RViz2の「Add」ボタンから追加できます:

  • LaserScan → Topic: /scan(LiDAR点群)
  • Odometry → Topic: /odom(走行距離推定)
  • Imu → Topic: /imu(加速度・角速度)

Step 5: センサーデータはどう確認する?

オドメトリ(走行距離センサー)
ros2 topic echo /odom --once
header:
  frame_id: odom
pose:
  pose:
    position:
      x: 0.12
      y: 0.0
      z: 0.0
    orientation:
      z: 0.045
      w: 0.999
バッテリー残量
ros2 topic echo /battery_state --once
# voltage: 11.8
# percentage: 0.85  ← 85%
LiDARデータの動作中周波数
ros2 topic hz /scan
# average rate: 5.000  ← 5Hz(LDS-02の仕様)

よく使うコマンドは?

# ===== TurtleBot3側(SSH接続) =====
ros2 launch turtlebot3_bringup robot.launch.py

# ===== ホストPC側 =====
# キーボード操縦
ros2 run turtlebot3_teleop teleop_keyboard

# RViz2可視化
ros2 launch turtlebot3_bringup rviz2.launch.py

# センサー確認
ros2 topic echo /scan --once
ros2 topic echo /battery_state --once
ros2 topic echo /odom --once

# ノード・トピック確認
ros2 node list
ros2 topic list

bringup・teleop で困ったら?

bringupで /dev/ttyACM0 エラーが出る
# パーミッションの確認
ls -la /dev/ttyACM0

# パーミッション変更(一時的)
sudo chmod 777 /dev/ttyACM0

# 永続化(推奨)
sudo usermod -aG dialout ubuntu
/dev/ttyUSB0 が見つからない(LiDARエラー)
ls /dev/ttyUSB*
# LiDARのUSBケーブルを確認
dmesg | tail -20 | grep tty
teleop_keyboardでTurtleBot3が動かない
# /cmd_velが届いているか確認
ros2 topic echo /cmd_vel
# teleop_keyboardでキーを押して値が変わるか確認

/cmd_vel が届いているのに動かない場合は、bringupのターミナルを確認してください。

TurtleBot3が急に止まった

バッテリー電圧低下が最も一般的な原因です。

ros2 topic echo /battery_state --once
# voltage: が 10.8V以下なら要充電
バッテリー確認コマンドの出力画面(11.1V以上の正常値)
バッテリー確認コマンドの出力画面(11.1V以上の正常値)

初回起動・操縦の要点は?

  • 電源投入の正しい順序(OpenCR → RPi4)を理解した
  • ros2 launch turtlebot3_bringup robot.launch.py でロボットのセンサー・モーターを起動した
  • ros2 run turtlebot3_teleop teleop_keyboard でキーボード操縦ができた
  • RViz2でLiDARデータをリアルタイム可視化した
  • バッテリー・オドメトリ・LiDARデータをコマンドで確認できた
  • 次回はslam_toolboxを使ったSLAM(同時自己位置推定と地図生成)に挑戦します。