【TurtleBot3 ROS2環境構築⑤】ネットワーク設定とSSH接続 - HostPCとTurtleBot3を繋ぐ
シリーズ この記事は「TurtleBot3 × ROS2 環境構築シリーズ」の一部です。 シリーズ目次を見る
【TurtleBot3 ROS2環境構築⑤】ネットワーク設定とSSH接続 - HostPCとTurtleBot3を繋ぐ
はじめに
読み分け: ④ Wi-FiとDDS疎通 で talker/listener。本記事(⑤)は netplan・SSH・固定 IP・ROS_DOMAIN_ID。
④でやること: 同一 Wi-Fi 上の DDS 疎通確認(nmcli、ROS_DOMAIN_ID、talker/listener)。
⑤でやること: SSH 接続、netplan、固定 IP、HostPC と TB3 の ROS_DOMAIN_ID 一致。同一 LAN 前提(WAN 公開・ゼロトラスト設計は対象外)。
DDS の詳細手順は④に集約し、ここでは接続の固定化に絞っています。
2026年5月時点。シリーズ⑤です。Raspberry Pi のセットアップ後、ホストPC から SSH で操作できる状態にします。想定読者は「モニターを繋ぎっぱなしにしたくない」「再起動のたびに IP を探すのが面倒」という段階の方です。
よくある状況は次のとおりです。RPi4 のセットアップは終わったが、ホストPC からの操作手順が分からない。IP の確認場所が分からず、毎回ディスプレイを繋いでいる。
完了後は、ホストPC のターミナル1つから RPi4 を操作でき、再起動後も IP と ROS_DOMAIN_ID がずれにくい状態を目指します。
この記事のゴールは、同一 Wi-Fi 上で SSH を確立し、ROS_DOMAIN_ID の説明 を揃えたうえで ros2 topic が見えることです。DDS の詳細な疎通手順は Wi-FiとDDS疎通(④)、本記事は netplan・SSH・固定 IP を担当します。
この記事で押さえること
- Raspberry Pi(TurtleBot3)のWiFi設定方法
- ホストPCからSSH接続を確立する手順
- 固定IPアドレスの設定方法(DHCPの罠を回避。)
- ROS_DOMAIN_ID と ROS_LOCALHOST_ONLY の扱い(マルチマシンでは ROS_LOCALHOST_ONLY=1 にしない)
- pingとros2 topic listで疎通確認する方法
- 実機でよく詰まるポイントとその解決策
HostPC と TurtleBot3 のネットワーク構成は?
HostPC と TurtleBot3(Raspberry Pi 4)を同一 Wi-Fi に接続する構成です。有線でも構いませんが、教材では無線が多いです。
[HostPC (Ubuntu 22.04)]
↕ WiFi
[WiFiルーター]
↕ WiFi
[TurtleBot3 (Raspberry Pi 4)] ROS 2 は DDS でトピックを共有します。同一サブネットにいるだけで発見される一方、ROS_DOMAIN_ID の説明 の不一致は「トピックが見えない」典型原因です。
ROS_DOMAIN_ID はホストPC と TurtleBot3 で同じ整数(0〜101)にしてください。複数人が同じ LAN で ROS 2 を動かす場合は、衝突を避ける値に変えるのが無難です。
検証環境: HostPC Ubuntu 22.04 + ROS 2 Humble / TurtleBot3 RPi4 + Ubuntu 22.04 Server + ROS 2 Humble(2026年5月時点)。
Raspberry Pi の Wi-Fi は netplan でどう設定する?
netplanを使ったWiFi設定
Ubuntu 22.04 Server では Ubuntu netplan リファレンス でネットワークを管理します。初回だけ HDMI とキーボードを繋ぐか、Imager 事前設定済みなら SSH のみで進められます。
netplanの設定ファイルを開きます:
sudo nano /etc/netplan/50-cloud-init.yaml 以下の内容に編集します:
network:
version: 2
renderer: networkd
ethernets:
eth0:
dhcp4: true
optional: true
wifis:
wlan0:
dhcp4: true
optional: true
access-points:
"あなたのSSID":
password: "WiFiパスワード" 設定を適用します:
sudo netplan apply YAML はインデントが構文です。タブではなくスペース2つで揃えてください。インデント崩れは netplan apply で即エラーになります。
raspi-configを使う方法(代替)
raspi-configが使える環境なら、GUIライクなメニューで設定できます:
sudo raspi-config System Options → Wireless LAN でSSIDとパスワードを入力するだけです。
WiFi接続を確認する
ip a show wlan0 inet 192.168.x.x の行が出れば Wi-Fi 接続成功です。表示された IP をメモし、SSH の HostName に使います。
SSH でホストPCから RPi4 に接続するには?
Raspberry Pi側でSSHを有効化
Ubuntu 22.04 Server では openssh-server が入っていることが多いですが、systemctl で有効化を確認します。
# SSHサービスの状態確認
sudo systemctl status ssh
# 有効化(自動起動設定)
sudo systemctl enable ssh
sudo systemctl start ssh Active: active (running) と表示されればOKです。
ホストPCからSSH接続
ホストPC側のターミナルで以下を実行します:
ssh ubuntu@192.168.x.x ubuntu はUbuntu 22.04 Serverのデフォルトユーザー名です。IPアドレスは先ほど確認したものに置き換えてください。
初回接続時は以下のメッセージが表示されます:
The authenticity of host '192.168.x.x' can't be established.
ED25519 key fingerprint is SHA256:xxxx...
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes と入力してEnterを押せば接続完了です。
毎回IPアドレスを打つのが面倒な方は、~/.ssh/config に設定を書いておくと楽です。Host turtlebot3 / HostName 192.168.x.x / User ubuntu と記述しておくと ssh turtlebot3 だけで接続できます。
SSH公開鍵認証の設定(パスワード入力を省略)
パスワード入力を減らすため、ホストPC から ed25519 鍵で公開鍵認証を設定します。
ホストPC側で:
# 鍵がない場合は生成
ssh-keygen -t ed25519 -C "turtlebot3"
# 公開鍵をRaspberry Piにコピー
ssh-copy-id ubuntu@192.168.x.x 設定後は ssh ubuntu@<IP> でパスワード無し接続できることが多いです(権限・sshd_config は環境次第)。
固定 IP(DHCP 予約)はなぜ必要か?
なぜ固定IPが必要なの?
DHCP だけだと再起動のたびに IP が変わり、SSH の HostName や RViz の設定がずれます。固定 IP または DHCP 予約を推奨します。
教材でも再起動のたびに IP を探し直す負荷は大きいです。ルーターの DHCP 予約が手軽なことが多いです。
netplanで固定IPを設定
sudo nano /etc/netplan/50-cloud-init.yaml network:
version: 2
renderer: networkd
ethernets:
eth0:
dhcp4: true
optional: true
wifis:
wlan0:
dhcp4: no
optional: true
addresses:
- 192.168.1.100/24
routes:
- to: default
via: 192.168.1.1
nameservers:
addresses: [8.8.8.8, 8.8.4.4]
access-points:
"あなたのSSID":
password: "WiFiパスワード" 192.168.1.100 は割り当てたいIPアドレス、192.168.1.1 はルーターのIPアドレスに変えてください。
設定を適用:
sudo netplan apply ルーターのIPアドレスは ip route show で確認できます。default via xxx.xxx.xxx.xxx のxxx部分がゲートウェイ(ルーター)IPです。
ルーター側でDHCP予約を使う方法(もっと簡単)
固定IPの設定がよくわからない場合、ルーターのDHCP予約機能を使うのが一番簡単です。
- ルーターの管理画面にアクセス(例: http://192.168.1.1 ※メーカーにより異なる)
- 「DHCP予約」や「静的リース」の設定を探す
- Raspberry PiのMACアドレスと割り当てたいIPを登録
こうするとRaspberry PiはいつもそのIPアドレスをもらえるようになります。Raspberry Pi内のファイルは変更不要です。
ROS 2 の ROS_DOMAIN_ID はどう揃える?
SSH接続が確立できたら、次はROS2のネットワーク設定をしていきましょう。
ROS_DOMAIN_IDの設定
ROS_DOMAIN_ID は DDS の論理セグメントです。HostPC と TurtleBot3 で同じ値が必須です(ROS_DOMAIN_ID の説明)。
デフォルトは 0 ですが、複数人が同じネットワークを使う場合は別の値に変えましょう。
echo 'export ROS_DOMAIN_ID=30' >> ~/.bashrc
source ~/.bashrc SSH接続したRaspberry PiのターミナルでHostPCと同じ値を設定します:
echo 'export ROS_DOMAIN_ID=30' >> ~/.bashrc
source ~/.bashrc ROS_LOCALHOST_ONLY の設定
ROS_LOCALHOST_ONLY=1 に設定すると、ROS2通信がローカルホスト(同じPCの中)に限定されます。
TurtleBot3と通信するためにはこれを設定してはいけません。
通信できない場合、以下を確認してください:
echo $ROS_LOCALHOST_ONLY 何も表示されないか 0 であればOKです。1 の場合はunsetしましょう:
unset ROS_LOCALHOST_ONLY
# または ~/.bashrc から削除する TURTLEBOT3_MODELも設定しておきましょうね。BurgerならHostPC側の~/.bashrcに追加: export TURTLEBOT3_MODEL=burger
/etc/hostsの設定(オプション)
IPアドレスの代わりにホスト名で通信したい場合は /etc/hosts を設定します。
HostPC側:
sudo nano /etc/hosts 以下を追加:
192.168.1.100 turtlebot3 TurtleBot3側も同様に:
192.168.1.200 hostpc これで ping turtlebot3 や ssh ubuntu@turtlebot3 が使えるようになります。
ping と ros2 topic で疎通はどう確認する?
設定が完了したら、ちゃんと繋がっているか確認しましょう。
pingで疎通確認
HostPCからTurtleBot3(Raspberry Pi)にpingを打ちます:
ping -c 4 192.168.1.100 成功すると以下のような出力が得られます:
PING 192.168.1.100 (192.168.1.100) 56(84) bytes of data.
64 bytes from 192.168.1.100: icmp_seq=1 ttl=64 time=2.45 ms
...
4 packets transmitted, 4 received, 0% packet loss 0% packet loss が出ればネットワーク疎通はOKです
ros2 topic listでROS2通信確認(要点)
SSH と固定 IP が通ったあと、ROS_DOMAIN_ID がホスト側と TurtleBot3 側で一致していることをまず確認します。talker/listener をクロスホストで回す細かい切り分けは、turtlebot3-ros2-network-setup に寄せています。
bringup が動いている状態であれば HostPC で:
ros2 topic list /scan や /odom などが増えるのが一般的です(構成により名称は異なります)。
/battery_state
/cmd_vel
/imu
/joint_states
/odom
/parameter_events
/rosout
/scan
/tf
/tf_static ネットワーク・SSH でよくあるトラブルは?
pingが通らない
症状: ping 192.168.1.100 を実行してもレスポンスがない
確認ポイント:
- Raspberry PiがWiFiに繋がっているか確認: Raspberry Pi内で ip a show wlan0 を実行して inet アドレスが表示されているか確認
- IPアドレスが正しいか確認: DHCPの場合、再起動でIPが変わっている可能性あり。ip a で現在のIPを確認
- ファイアウォールの確認: sudo ufw status で確認。Activeの場合は sudo ufw allow from 192.168.1.0/24 で許可
SSH接続に失敗する
症状: ssh: connect to host 192.168.x.x port 22: Connection refused
# Raspberry Pi上でSSHサービスを確認
sudo systemctl status ssh
# 停止していれば起動
sudo systemctl start ssh
sudo systemctl enable ssh ros2 topic listで何も表示されない
症状: ros2 topic list を実行しても何も出ない(または /parameter_events と /rosout しか出ない)
最頻出の原因: ROS_DOMAIN_IDが違う。
# HostPCとTurtleBot3の両方で確認
echo $ROS_DOMAIN_ID 両方同じ値になっているか確認しましょう。
2番目に多い原因: ROS_LOCALHOST_ONLY=1 が設定されている
echo $ROS_LOCALHOST_ONLY
# 1 と出れば unset ROS_LOCALHOST_ONLY で解除 3番目の原因: TurtleBot3のbringupがまだ起動していない(これは⑥で解説)
netplan applyでエラーが出る
症状: sudo netplan apply でエラーが出る
# YAMLの構文確認
sudo netplan generate エラーメッセージを確認してYAMLのインデントを修正しましょう。tabs vs spaces 問題が非常に多いです
ネットワーク・SSH 設定の要点は?
この記事ではTurtleBot3とホストPCのネットワーク接続を確立する手順を解説しました。
- Raspberry PiのWiFiをnetplanで設定
- SSH接続を有効化してホストPCからリモートアクセス確立
- 固定IPアドレスでIPアドレス変動問題を解消
- ROS_DOMAIN_IDをHostPCとTurtleBot3で統一
- ROS_LOCALHOST_ONLY は設定しない(マルチマシンでホスト間通信を許可)
- ping と ros2 topic list で疎通確認
これでTurtleBot3をリモート操作する準備が整いましたね。次の記事⑥ではいよいよTurtleBot3のbringupを起動してキーボードで操縦してみましょう。🤖
この記事の検証環境は?
- HostPC: Ubuntu 22.04 LTS + ROS2 Humble
- TurtleBot3: Raspberry Pi 4 (4GB) + Ubuntu 22.04 Server + ROS2 Humble
- TurtleBot3モデル: Burger