ROS 2 実践コース|#07 ロボットにつないで、境界の向こうを調べる

この回から、DOGZILLA S2(4 本脚のロボット)を使います。授業では 1 人 1 台を用意します。前半で PC とロボットをつなぎ、後半で、つないだ先のロボットが PC からどう見えるかを 5 つの実験で調べます。

この回ではロボットを歩かせません。机の上に置いたまま、電源だけ入れて使います。歩かせるのは次の回です。

この回は、次の順に進めます。

  1. Windows の無線を 2.4 GHz にそろえ、ロボットがつなぐ Wi-Fi(モバイル ホットスポット)を PC に立てる(準備 1)
  2. ロボットの SD カードに、ホットスポットの名前とパスワードを書く(準備 2)
  3. ロボットの電源を入れ、背中の表示で IP アドレスを読む(準備 3)
  4. つなぐ前に、実験の結果を予想して書く(つなぐ前に予想する)
  5. つないで、PC から見えるもの・見えないもの・届く速さ・遅れ・切れたときのふるまいを調べる(実験 1〜5)

各実験の結果の画面と説明は、「結果を見る」をクリックすると開きます。予想を書き、自分で実行してから開いてください。

授業で受ける人は、この回の記録を実習レポート(Word)の「第 5 回」のシートに書きます。スクリーンショットは、シートの中の「画面:」の欄(実験や記録の表のすぐ下)に貼ります。ひとりで学ぶ人も、予想と結果を同じ形でノートに残しておくと、あとで見返せます。

この回で撮っておく画面

動画は撮りません。そのかわり、下の画面を撮って残します。授業で受ける人は、実習レポートの「第 5 回」の、それぞれの「画面:」の欄に貼ります。ひとりで学ぶ人も、同じ画面を残しておくと、あとで値を見直せます。最初の 1 枚は、実習を始める前に端末で TZ=Asia/Tokyo date と打ち、日付と時刻が出た画面です。授業の日に実習したことの記録になります。講義用の環境の時計は世界標準時(UTC)なので、TZ=Asia/Tokyo を付けて日本時間で出します。

  • TZ=Asia/Tokyo date と、つないだ直後の robot-status
  • 接続前の ros2 topic list
  • 接続後の ros2 topic list
  • ros2 node list
  • ros2 topic hz /scan
  • latency_probe の結果(送った数・戻った数・平均・95 %・最大)
  • robot-disconnect したあとの ros2 topic hz /scan

この回で使うもの

もの説明
講義用の環境#00 で準備した PC の環境。start.bat で起動し、ブラウザでデスクトップを開いておく
DOGZILLA S2背中に OLED(小さな表示画面)が付いている。机の上に置いておく
号機シール授業では、ロボットに号機番号(例:07)のシールが貼ってある。準備 2 で使う。ひとりで学ぶ人は無くてよい
SD カードリーダーロボットの SD カードを PC に挿すときに使う。PC に SD カードのスロットがあれば要らない。授業では先生に借りられる

準備 1 Windows の無線を 2.4 GHz にそろえる

ロボットは、自分の PC が立てる「モバイル ホットスポット」に Wi-Fi でつなぎます。ホットスポットは 2.4 GHz の電波で立てます。PC が大学の Wi-Fi に 5 GHz でつながったままだと、1 つの無線チップが 2 つの帯域を行ったり来たりすることになり、ロボットから PC への通信がほとんど届かなくなります。2026 年 9 月の試験では、この状態で /scan が 1 秒に 3 回しか届かず、遅れは 10 秒を超えました。

Wi-Fi の電波には、2.4 GHz と 5 GHz の 2 つの帯域(周波数の範囲)があります。そこで、PC の無線アダプタ(PC の中で Wi-Fi の電波を出し入れする部品)を 2.4 GHz に固定し、大学の Wi-Fi もホットスポットも同じ 2.4 GHz で使います。準備 1 でするのは次の 2 つです。

  1. 無線アダプタのワイヤレス モードを 2.4 GHz に固定する(PC がほかの Wi-Fi に 5 GHz でつながらないようにするため)
  2. モバイル ホットスポットを 2.4 GHz で立てる(名前とパスワードは自分で決める。同じ名前とパスワードを、準備 2 でロボットに教える)
Windows 側の準備は 2 つ。左で無線アダプタを 2.4 GHz に固定し、右でホットスポットを自分で決めた名前・パスワードと 2.4 GHz で立てる(画面の並びは Windows のバージョンで少し違います)
Windows 側の準備は 2 つ。左で無線アダプタを 2.4 GHz に固定し、右でホットスポットを自分で決めた名前・パスワードと 2.4 GHz で立てる(画面の並びは Windows のバージョンで少し違います)

無線アダプタのワイヤレス モードを変える

PC の無線アダプタが、2.4 GHz の電波だけを使うように設定を変えます。設定は「デバイス マネージャー」という画面で行います。

  1. 画面の左下(Windows 11 では下の中央)にあるスタートボタン(Windows のマーク)を右クリックします。メニューが出るので、「デバイス マネージャー」をクリックします。「このアプリがデバイスに変更を加えることを許可しますか?」と聞かれたら「はい」を押します。
  2. デバイス マネージャーの一覧から「ネットワーク アダプター」を探し、左の「>」をクリックして開きます。PC の中のネットワーク部品の名前が並びます。
  3. その中から、名前に Wi-Fi か Wireless が入っているものを探してダブルクリックします(例:「Intel(R) Wi-Fi 6 AX201 160MHz」)。「Bluetooth」や「Ethernet」と書かれたもの、「WAN Miniport」で始まるものは違う部品なので、開かないでください。
  4. 開いた画面の上にあるタブから「詳細設定」をクリックします。左に「プロパティ」の一覧、右に「値」の欄が出ます。
  5. 左の一覧から「802.11a/b/g ワイヤレス モード」をクリックします。右の「値」の欄に、いまの設定が出ます。この値を、そのままの文字でメモします。コースを終えたときに元へ戻すためです。
  6. 右の「値」の欄の「∨」を押して、「2.4 GHz 802.11b/g」を選びます。先頭に「3.」のような番号が付いていることがあります。番号は機種によって違うので、「2.4 GHz」と「b/g」が入っているものを選んでください。
  7. 左の一覧に「優先バンド」があれば、それもクリックし、値を「2.4 GHz 帯域を優先」のような 2.4 GHz を選ぶ値にします。無ければ、この手順は飛ばします。
  8. 画面の下の「OK」を押します。Wi-Fi が数秒切れて、またつながります。デバイス マネージャーは閉じてかまいません。
  9. #00 と同じ手順で check_env.bat をもう一度実行し、「ワイヤレスモード」の行が OK(緑)になっていることを確かめます。「ホットスポット」の行は、次の「モバイル ホットスポットを立てる」が終わってから見ます。

この設定のままだと、5 GHz しか出ていない Wi-Fi にはつながりません。コースを終えたら、手順 5 でメモした値に戻してください。

「802.11a/b/g ワイヤレス モード」が見つからないとき

無線アダプタによっては、この項目がありません。似た名前の「ワイヤレス モード」「Wireless Mode」「バンド」があれば、それで 2.4 GHz を選びます。どれも無いときは、check_env.bat の「ワイヤレスモード」が INFO(灰色)になります。「ホットスポット」の行が OK なら、そのまま進めてかまいません。WARN のままなら、授業では先生に PC の機種を伝えてください。PC を有線 LAN でインターネットにつないでいる場合は、無線をホットスポットだけに使えるので、この設定は要りません。

モバイル ホットスポットを立てる

PC を Wi-Fi の親機にする機能が「モバイル ホットスポット」です。ここで決めた名前とパスワードに、準備 2 でロボットをつなぎます。

  1. キーボードの Windows キーを押しながら I(アイ)を押して、「設定」を開きます。
  2. 左の一覧から「ネットワークとインターネット」をクリックし、右に並ぶ項目から「モバイル ホットスポット」をクリックします。
  3. 「プロパティ」の欄の右にある「編集」を押します。「ネットワーク情報の編集」という画面が出て、次の 3 つが並びます。
  4. 「ネットワーク名」を確かめます。最初は「DESKTOP-ABC1234 5678」のような名前が入っています。そのままでも、自分で変えてもかまいません。変えるときは、半角の英字と数字だけにします(ロボットの表示にそのまま出ます。ほかの人と同じ名前にはしないでください)。
  5. 「ネットワーク パスワード」を確かめます。そのままでも、自分で変えてもかまいません。8 文字以上にします。大文字と小文字は別の文字として扱われます。
  6. 「ネットワーク帯域」の「∨」を押して「2.4 GHz」を選びます。「利用可能な任意の帯域」や「5 GHz」のままにしないでください。
  7. 「保存」を押します。
  8. 画面のいちばん上にある「モバイル ホットスポット」のスイッチを押して「オン」にします。
  9. 「プロパティ」の欄に出ている「名前」「パスワード」「帯域」を見て、手順 4〜6 のとおりになっていることを確かめます。名前とパスワードを紙にメモします。準備 2 でロボットに書き写すときに、1 文字ずつ見比べるためです。
  10. check_env.bat をもう一度実行し、「ホットスポット」の行が OK になっていることを確かめます。

名前とパスワードでは、次の文字を取り違えやすいので気をつけてください:0(ゼロ)と O(オー)、1(イチ)と l(小文字のエル)と I(大文字のアイ)。

ホットスポットは、PC を再起動したり、しばらく何もつながっていなかったりすると、自動でオフに戻ることがあります。ロボットがつながらないときは、まずこのスイッチがオンかどうかを見ます。

準備 2 ロボットに自分のホットスポットを教える

ロボットは、どのホットスポットにつなげばよいかを知りません。ロボットの SD カード(ロボットの中のコンピューターが使う記憶カード)にあるファイルに、準備 1 で立てたホットスポットの名前とパスワードを書いて教えます。授業では、どのロボットにも同じ内容の SD カードが入っていて、このファイルだけが人によって違います。

準備 2 は、次の 4 つの段階で進めます。

  1. ロボットから SD カードを抜き、PC に挿す
  2. 「bootfs」ドライブの sakigake-wifi.txt を開く
  3. 名前・パスワード・号機番号を書いて保存する
  4. SD カードを取り出して、ロボットに戻す

1. SD カードを抜いて、PC に挿す

  1. ロボットの電源が切れていることを確かめます。背中の OLED(小さな表示画面)が消えていれば切れています。電源が入ったまま SD カードを抜くと、SD カードの中身が壊れることがあります。
  2. ロボットから SD カード(小さな microSD カード)を抜きます。あとで同じ向きで挿し直すので、どちらの面が上だったかを覚えておきます。
  3. SD カードを PC に挿します。PC に SD カードのスロットが無いときは、USB の SD カードリーダーに挿してから、リーダーを PC の USB 端子に挿します(授業では先生に借ります)。PC のスロットが大きい SD カード用なら、microSD を SD の大きさにする「アダプター」に入れてから挿します。
  4. 挿してから数秒で、Windows がいくつかの表示を出します。次の表のとおりにしてください。
出てくる表示押すボタン理由
「ドライブ ○: を使うにはフォーマットする必要があります。フォーマットしますか?」「キャンセル」(「ディスクのフォーマット」は絶対に押さない)SD カードには Windows が読めない形式の場所があり、Windows はそれを見て聞いてくる。フォーマットすると SD カードの中身が消え、ロボットが起動しなくなる
「ドライブに問題があります。スキャンして修正しますか?」閉じる(スキャンしなくてよい)ロボットの電源を切った直後の SD カードで出ることがある。直さなくても読み書きできる
右下に「USB ドライブ」「選んでください」などの通知何もしなくてよい(消えるまで待つ)ドライブを開くのは次の段階でエクスプローラーから行う

フォーマットの確認は、1 回ではなく 2 回以上出ることがあります。そのたびに「キャンセル」を押します。

2. sakigake-wifi.txt を開く

  1. キーボードの Windows キーを押しながら E を押して、エクスプローラーを開きます。
  2. 左の一覧の「PC」(または「この PC」)をクリックします。右に PC のドライブが並び、その中に「bootfs」という名前のドライブが増えています(「bootfs (E:)」のように、後ろの文字は PC によって違います)。「bootfs」が見えないときは、SD カードを挿し直します。
  3. 「bootfs」をダブルクリックして開きます。config.txt や kernel_2712.img など、たくさんのファイルが並びます。これらはロボットが起動するのに使うファイルなので、ほかのファイルは開いたり消したりしないでください。
  4. その中から sakigake-wifi という名前のファイルを探します。名前の順に並んでいるので、s の行のあたりにあります。Windows の設定によっては、後ろの「.txt」が表示されず、「sakigake-wifi」とだけ出ます(種類の欄に「テキスト ドキュメント」と出ているものです)。
  5. sakigake-wifi を右クリックし、「プログラムから開く」→「メモ帳」を選びます。ダブルクリックでメモ帳が開く PC なら、ダブルクリックでもかまいません。

同じ場所に sakigake-wifi-result というファイルがあることがあります。ロボットが前回の起動で書いた結果のファイルです。いまは開かなくてかまいません(使い方は、この節の最後で説明します)。

3. 名前・パスワード・号機番号を書いて保存する

メモ帳には、次の内容が出ています。# で始まる行は説明なので、そのままにしておきます。

# ロボットがつなぐホットスポットの設定
# 自分の PC の「モバイル ホットスポット」の画面にある名前とパスワードを、= の右に書いて保存する。
# 帯域は 2.4 GHz にする。保存したら SD をロボットに戻して電源を入れる。
# 結果は同じ場所の sakigake-wifi-result.txt に書かれる。
SSID=
PASSWORD=
# 号機番号(シールの番号)。書くと OLED の 1 行目が sakigake-07 のようになる。
NUMBER=
  1. SSID= の行の、= のすぐ右をクリックし、準備 1 でメモしたホットスポットのネットワーク名を書きます。名前の途中に空白があれば、空白もそのとおりに書きます。
  2. PASSWORD= の行の = のすぐ右に、パスワードを書きます。
  3. NUMBER= の行の = のすぐ右に、ロボットに貼ってある号機シールの番号を書きます。07 と書いても 7 と書いてもかまいません。
  4. 書いた 3 行を、準備 1 のメモ(とホットスポットの画面)と 1 文字ずつ見比べます。
  5. キーボードの Ctrl を押しながら S を押して上書き保存します。メモ帳のタイトルやタブの名前の前に付いていた「*」や「●」が消えれば、保存できています。
  6. メモ帳を閉じます。

書いたあとは、たとえば次のようになります(説明の行は省いています)。

SSID=DESKTOP-ABC1234 5678
PASSWORD=a1b2c3d4
NUMBER=07

書くときに間違えやすいところを表にまとめます。

間違いどうなるか正しい書き方
日本語入力がオンのまま打ち、= や英数字が全角になった全角の = や号機番号は読めず、OLED に wifi.txt: NG が出る。名前やパスワードに全角が混ざると、try: のままつながらない日本語入力をオフにして(キーボードの「半角/全角」キー)半角で書く
パスワードが 7 文字以下wifi.txt: NGホットスポットの画面のパスワードを、8 文字以上のまま写す
NUMBER=00 と書いたwifi.txt: NG(番号は 1〜99)号機シールの番号を書く。分からなければ空のままにする
SSID= の行を消した、= を消したwifi.txt: NG上のひな形と同じ形に戻す
名前やパスワードを 1 文字でも写し間違えたOLED が try: のまま、いつまでもつながらない(ロボットからは誤りが分からない)ホットスポットの画面と 1 文字ずつ見比べる
保存せずに閉じた前の内容のまま。「保存しますか?」と聞かれたら「保存」を押すCtrl+S で保存してから閉じる

= の前後に空白を入れても、行の終わりに空白が残っても、ロボットは読めます。

4. SD カードを取り出して、ロボットに戻す

  1. エクスプローラーの左の一覧で「bootfs」を右クリックし、「取り出し」を選びます。
  2. 「bootfs」がエクスプローラーの一覧から消えたら、SD カード(またはカードリーダー)を PC から抜きます。「取り出し」をせずに抜くと、保存した内容が SD カードに書き込まれていないことがあります。
  3. SD カードを、抜いたときと同じ向きでロボットに奥まで挿します。

ロボットは電源を入れるたびにこのファイルを読み、読めたかどうかを同じ場所の sakigake-wifi-result.txt に書きます。うまくつながらないときは、電源を切って SD カードをもう一度 PC に挿し、このファイルをメモ帳で開きます。書き方の誤り(パスワードが 8 文字より短い、など)があれば、理由が書いてあります。読めた場合は、つなぎに行くホットスポットの名前が書いてあります。

書いた内容は SD カードに残ります。次の回からは、同じ名前とパスワードでホットスポットを立てれば、SD カードを抜かなくてかまいません。名前かパスワードを変えたときは、書き直します。

NUMBER= は書かなくても動きます。書かないと、ロボットの名前は sakigake-robot のままになります。ひとりで学ぶ人は、ロボット側の準備を済ませた SD カードなら同じ方法でつなげます。NUMBER= は 1〜99 の好きな番号を書くか、空のままにします。

準備 3 ロボットの電源を入れ、OLED を読む

ロボットの電源を入れると、背中の OLED に 4 行の表示が出ます。起動が進むにつれて 4 行目が変わります。

OLED の 4 行。2 行目の IP アドレスを robot-connect で使う。4 行目が「ROS: ready (no PC)」になったら、PC からつなげる
OLED の 4 行。2 行目の IP アドレスを robot-connect で使う。4 行目が「ROS: ready (no PC)」になったら、PC からつなげる
4 行目の表示意味すること
ROS: starting...ロボットの中で ROS 2 のノードが起動している途中しばらく待つ
ROS: ready (no PC)起動が終わり、PC からつながるのを待っている次に進む
ROS: PC connectedPC とつながっているそのまま実験を続ける

IP アドレスは、ネットワークの中でロボットを指す住所のような番号です。PC からロボットにつなぐときに、どのロボットかをこの番号で指定します。

2 行目の IP アドレス(例:192.168.137.134)をメモしておきます。この記事では例として 192.168.137.134 を使います。自分のロボットの IP に置き換えて打ってください。

1 行目はロボットの名前です。準備 2 で NUMBER=07 と書いたなら sakigake-07、書かなかったなら sakigake-robot と出ます。3 行目は Wi-Fi の状態で、つながる前とつながったあとで次のように変わります。

3 行目の表示意味すること
try: のあとにネットワーク名sakigake-wifi.txt を読めて、そのホットスポットにつなぎに行っているしばらく待つ。1 分たっても変わらないときは、下の「つまずきやすい点」を見る
wifi.txt: NGsakigake-wifi.txt の書き方に誤りがある電源を切り、SD カードを PC に挿して sakigake-wifi-result.txt を読み、直す
SSID: のあとにネットワーク名ホットスポットにつながった(長い名前は途中で切れる)2 行目の IP アドレスを読む

つなぐ前に予想する

実験を始める前に、次の表の 6 つについて予想を書いてください。「手がかり」の列は、予想するときの手がかりです。第 1 週(#03)で確かめたことを思い出しながら考えます。左の列は、レポートの第 5 回で予想と結果を書く欄です。

レポートの欄質問手がかり予想
実験 0いま ros2 topic list を打つと、ロボットのトピック(/scan など)は見えるか#03 の実験 2 では、同じ PC の中のノードは何もしなくても見つけ合えた。#03 の実験 5 では、ROS_DOMAIN_ID が違うと同じ PC の中でも見えなかった。ロボットは PC とは別の機械で、Wi-Fi の向こうにいる
実験 1つないだあと、ros2 topic list にどんなトピックが増えるかロボットには、周りの距離を測るセンサー(LiDAR)と、4 本の脚の関節がある。それぞれのデータがトピックになっているとしたら、何が並びそうか
実験 2つないだあと、ros2 node list にロボットの中のノードは出るか#03 の実験 1 では、動かしたノードが ros2 node list にそのまま出た。つなぐと、同じように見えるようになるだろうか
実験 3LiDAR(周りの距離を測るセンサー)は 1 秒に 10 回測っている。PC で /scan の周期を測ると何 Hz になるか#03 の実験 6 で使った ros2 topic hz で測る。PC の中の通信とくらべて、Wi-Fi で運べる量は多いか少ないか
実験 4PC からロボットに送って、PC に戻ってくるまで何ミリ秒かかるかWi-Fi を 2 回(行きと帰り)通る。平均だけでなく、いちばん遅い回がどのくらいになりそうかも書く
実験 5/scan を受け取っている途中で接続を切ると、エラーは出るか#03 の実験 6 で talker を止めたとき、listener と ros2 topic hz はどうなったか

予想は外れてかまいません。点になるのは、予想と結果が違ったときに「なぜ違ったか」を考えて書くところです。分からないときも空欄にせず、「分からない」と書いて、手がかりにしたことを 1 つ書きます。実験 0 の結果は、実験 1 の最初の ros2 topic list(つなぐ前)で分かります。

実験 1 つなぐ前とつないだあとで、トピックの一覧を比べる

この実験では、次の 3 つをします。

  1. つなぐ前に ros2 topic list を打つ(予想の表の「実験 0」を確かめる)
  2. robot-connect でロボットにつなぎ、robot-status でつながったことを確かめる
  3. もう一度 ros2 topic list を打ち、つなぐ前と比べる

まず、つなぐ前にトピックの一覧を出します。

ros2 topic list
結果を見る(予想を書き、自分で実行してから開く)
つなぐ前。/parameter_events と /rosout だけで、ロボットのトピックは 1 つもありません
つなぐ前。/parameter_events と /rosout だけで、ロボットのトピックは 1 つもありません

ロボットは同じホットスポットにつながっているのに、ロボットのトピックは見えません。第 1 週では、同じ PC の中のノードどうしは何もしなくても見つけ合えました。ロボットの側は、ROS 2 の通信をロボットの中だけに限る設定(ROS_LOCALHOST_ONLY=1)にしてあるので、同じ Wi-Fi にいても PC の ROS 2 からは見つけられません。

次に、OLED の IP アドレスを指定してつなぎます。robot-connect は講義用の環境に入れてあるコマンドで、PC とロボットの間にデータの通り道を作ります(しくみはこの実験の最後で説明します)。IP を 1 文字でも打ち間違えると、「接続できません」と出ます。

robot-connect 192.168.137.134
「つなぎました」のあと、初めてつないだときだけ、RViz でロボットの形を表示するためのデータ(メッシュ)を 15 個取ってきます。2 回目からは「もう取ってあります」と出ます
「つなぎました」のあと、初めてつないだときだけ、RViz でロボットの形を表示するためのデータ(メッシュ)を 15 個取ってきます。2 回目からは「もう取ってあります」と出ます

OLED の 4 行目が ROS: PC connected に変わったか見てください。つながっているかどうかは、PC の側でも確かめられます。robot-status も講義用の環境に入れてあるコマンドで、つながり具合をまとめて表示します。

robot-status
ブリッジが「動作中」で、ping(ロボットまで届くかの確認)に平均 7.3 ms で返事がありました。下のログには「announces Publisher scan - Allowed」と、/scan を通したことが出ています
ブリッジが「動作中」で、ping(ロボットまで届くかの確認)に平均 7.3 ms で返事がありました。下のログには「announces Publisher scan - Allowed」と、/scan を通したことが出ています

もう一度、トピックの一覧を出します。つなぐ前の一覧と比べて、何が増えたかを見てください(予想の表の「実験 1」)。つなぐ前とつないだあとで、一覧が何行あったかも数えてレポートに書きます。

ros2 topic list
結果を見る(予想を書き、自分で実行してから開く)
/scan・/joint_states・/tf など、ロボットのトピックが並びました
/scan・/joint_states・/tf など、ロボットのトピックが並びました

PC に並んだトピックは、ロボットの中にあるトピックの全部ではありません。ロボット側のブリッジ(下で説明します)は、設定ファイルの許可リストに書いたトピックだけを通します。たとえばロボットの中には /cmd_vel_safe というトピックがありますが、PC の一覧には出てきません。なぜ出さないのかは次の回で考えます。

robot-connect が起動しているのは、zenoh ブリッジというプログラムです。ロボットの中にもブリッジが 1 つ動いていて、2 つのブリッジが、Wi-Fi の上の TCP(データを順番どおり、抜けなく届けるための通信の決まり)の通り道 1 本を使ってトピックのデータを運びます。

PC とロボットは、それぞれの中のブリッジどうしでつながる。ロボット側のブリッジは、許可したトピックだけを、決めた回数に間引いて PC に送る
PC とロボットは、それぞれの中のブリッジどうしでつながる。ロボット側のブリッジは、許可したトピックだけを、決めた回数に間引いて PC に送る

実験 2 ロボットのノードは見えるか

予想の表の「実験 2」の行を見直してから、ノードの一覧を出します。

ros2 node list
結果を見る(予想を書き、自分で実行してから開く)
出てきたのは /zenoh_bridge_pc だけです
出てきたのは /zenoh_bridge_pc だけです

ロボットの中では、次の 9 個のノードが動いています。ロボットの中で同じコマンドを実行した結果です(2026 年 9 月に測定)。

/MS200
/base_link_to_base_laser
/cmd_vel_guard
/ping_echo
/robot_state_publisher
/tf_publisher
/yahboom_base
/yahboom_dog_joint_state_publisher
/zenoh_bridge_robot

ブリッジが運ぶのはトピックのデータで、ノードの情報は運びません。PC から見ると、ロボットのトピックはすべて zenoh_bridge_pc が出しているように見えます。LiDAR のノード /MS200 も、歩行を担当する /yahboom_base も、PC からは見えません。

このことは、トラブルを調べるときに効いてきます。PC の ros2 node list にロボットのノードが出ないからといって、ロボットのノードが止まっているとは言えません。ロボットの様子は、トピックが届いているか(次の実験 3)、robot-status、OLED の表示を組み合わせて確かめます。

実験 3 /scan の周期を測る

第 1 週の実験 6 で使った ros2 topic hz で、LiDAR の /scan が 1 秒に何回届いているかを測ります。10 秒ほど見たら Ctrl+C で止めます。

average rate は表示が出るたびに少しずつ変わります。1 回だけ読むと、たまたま高い回や低い回を拾ってしまうので、レポートには 3 回読んだ値を書きます。

ros2 topic hz /scan
結果を見る(予想を書き、自分で実行してから開く)
average rate(1 秒あたりに届いた回数)は 4.9〜5.0 前後です
average rate(1 秒あたりに届いた回数)は 4.9〜5.0 前後です

LiDAR は 1 秒に 10 回測っています。ロボットの中で同じコマンドを実行すると、次のように 10 Hz になります(2026 年 9 月に測定)。

average rate: 10.026
	min: 0.098s max: 0.102s std dev: 0.00133s window: 56

PC に届くのが半分なのは、ロボット側のブリッジで 1 秒に 5 回までに間引いているからです。ほかのトピックも、ロボットの中と PC とで回数を変えています。

トピックロボットの中(実測)PC に送る上限(ブリッジの設定)
/scan(LiDAR の距離)10.0 Hz5 Hz
/joint_states(関節の角度)9.1 Hz5 Hz
/tf(座標の関係)19.2 Hz10 Hz

Wi-Fi で運べる量は、PC の中の通信よりずっと少なく、教室では 1 台のホットスポットの電波をほかの人のホットスポットとも分け合います。全部を送ると、同じ通り道を使う速度指令まで遅れてしまいます。何を 1 秒に何回送るかは、使い道と通信の余裕から決める設計です。この 5 Hz は、第 5 週で「障害物に気づいてから止まるまで」を考えるときに効いてきます。

実験 4 往復にかかる時間を測る

PC からロボットに送ったデータが、ロボットで折り返して PC に戻るまでの時間を測ります。

latency_probe は、PC から /sakigake/ping に 1 秒に 5 回、番号を付けたデータを送ります。ロボットの中の ping_echo ノードが、それを /sakigake/pong でそのまま送り返します。送った時刻と戻ってきた時刻の差が、往復にかかった時間です。50 回送り終えて 2 秒待つと、結果を 1 行にまとめて表示し、自分で終わります(10 秒あまりかかります)。

ros2 run sakigake_samples latency_probe

レポートには、最後の「結果」の行から次の 5 つを書き写します。

表示意味
送信PC から送った数(50)
受信ロボットから戻ってきた数。送信より少なければ、途中で消えたものがある
平均戻ってきた回の往復時間の平均
95%値往復時間を短い順に並べたとき、95 % の回がこの時間以内に収まった、という値。ほとんどの回はこれより速い
最大いちばん遅かった回の往復時間
結果を見る(予想を書き、自分で実行してから開く)
50 回送って 50 回戻ってきました。往復は平均 18.1 ms、95% の回が 31.7 ms 以内でしたが、いちばん遅い回は 207.8 ms かかっています
50 回送って 50 回戻ってきました。往復は平均 18.1 ms、95% の回が 31.7 ms 以内でしたが、いちばん遅い回は 207.8 ms かかっています

見てほしいのは平均よりも最大です。平均 18.1 ms でも、ときどき 10 倍以上遅れる回があります。ロボットが 1 秒に 0.2 m 進んでいるとき、止まれという指令が 0.2 秒遅れると、ロボットはその間に 4 cm 進みます。数値は場所や時間、周りの電波の混み具合で変わります。自分のロボットで測った値を記録してください。

実験 5 受け取っている途中で接続を切る

端末を 2 つ開きます。端末 1 で /scan の周期を測りながら、端末 2 で接続を切ります。端末 1 の表示が出始めてから、端末 2 のコマンドを打ってください。

# 端末 1
ros2 topic hz /scan
# 端末 2
date +%T; robot-disconnect; date +%T; sleep 10; date +%T

端末 2 のコマンドは、;(セミコロン)で区切った 5 つを左から順に実行します。date +%T はいまの時刻を表示し、sleep 10 は 10 秒待ちます。接続を切った時刻と、その 10 秒後の時刻が残るようにしています。端末 2 に 3 つめの時刻が出たら、端末 1 と端末 2 が 1 枚に入るように画面を撮り、端末 1 を Ctrl+C で止めます。

結果を見る(予想を書き、自分で実行してから開く)
右の端末で 11:38:17 に接続を切りました。10 秒後の 11:38:28 になっても、左の hz は最後の表示のまま止まっていて、エラーは出ていません
右の端末で 11:38:17 に接続を切りました。10 秒後の 11:38:28 になっても、左の hz は最後の表示のまま止まっていて、エラーは出ていません

第 1 週の実験 6 で talker を止めたときと同じです。データが届かなくなっても、受け取る側はエラーを出さずに待ち続けます。今回はセンサーの値でしたが、PC からロボットへ送る速度指令が同じように途切れたら、ロボットはどうなるでしょうか。これが次の回のテーマです。

実験が終わったら、もう一度つないでおきます。IP を省くと、前回つないだ IP につなぎます。

robot-connect

片付け

  1. robot-disconnect で接続を切る。
  2. ロボットの電源を切り、元の場所に戻す。
  3. ほかに作業がなければ、stop.bat で講義用の環境を止める。

無線アダプタのワイヤレス モード(準備 1)は、授業期間中はそのままにしておきます。

本質の問い

授業の最後に、次の 2 つに答えてください。

  • 自分のロボットで測った /scan の周期と、往復時間(平均と最大)を書く。PC → ブリッジ → Wi-Fi → ロボットのどこで、回数や時間が変わっていそうかを説明する。
  • PC の ros2 node list にロボットのノードが出ないことは、ロボットがおかしいときに原因を調べるうえでどう困るか。代わりに何を見れば確かめられるか。

手がかり:1 つめは、実験 3 の「ロボットの中」と「PC」の周期の表と、上のブリッジの図を見比べます。2 つめは、実験 2 で見えなかったものと、実験 1 で使った robot-status、準備 3 の OLED の表から考えます。

考え方の例(答えを書いてから開く)

1 つめ:周期はロボット側のブリッジの設定で 10 Hz から 5 Hz に減らしている(設計で決めた値)。往復時間のばらつきは、主に Wi-Fi の区間で起きていそう。ロボットの中で測った周期はほとんど揺れないが、PC で測ると min と max の幅が広がるのが手がかりになる。

2 つめ:ノードが止まったのか、通信が切れたのかを node list だけでは区別できない。robot-status の ping とブリッジのログ、ros2 topic hz でトピックが届いているか、OLED の 4 行目を組み合わせて切り分ける。

つまずきやすい点

症状見るところ
OLED の 3 行目が try: のまま変わらないホットスポットがオンになっているか。帯域が 2.4 GHz か。sakigake-wifi.txt の名前とパスワードが、ホットスポットの画面と 1 文字も違わないか
OLED の 3 行目が wifi.txt: NGSD カードの sakigake-wifi-result.txt に理由が書いてある。直して上書き保存し、SD カードを戻して電源を入れ直す
OLED の 3 行目が wifi.txt: noneSD カードに sakigake-wifi.txt が無い。授業では先生に号機の番号を伝える
SD カードを挿したら「フォーマットしますか」と聞かれた必ず「キャンセル」を押す。使うのは「bootfs」ドライブだけ
OLED の 4 行目が ROS: starting... のまま 3 分以上ロボットの電源を入れ直す。直らなければ、授業では先生に号機の番号を伝える
robot-connect で「接続できません」と出るIP の打ち間違い。表示された 1〜4 の確認項目を上から順に見る
つないだのに ros2 topic list にロボットのトピックが出ないrobot-status のブリッジが「動作中」か。ログの最後にエラーが出ていないか
/scan が 5 Hz より大きく落ちる、往復時間が秒単位になる準備 1 の無線アダプタの設定。check_env.bat の「ホットスポット」の行

まとめ

実験わかったこと
1ロボットの ROS 2 は、同じ Wi-Fi にいても PC から直接は見つけられない。ロボットのトピックはブリッジが運び、許可したものだけが PC に出る
2ロボットのノードは PC から見えない。見えないことと、止まっていることは別
3/scan は 10 Hz で測って 5 Hz で送っている。何を何回送るかは設計で決める
4往復時間は平均より最大が大事。ときどき 10 倍以上遅れる
5接続が切れても受ける側にエラーは出ない

次の回は、PC から /cmd_vel を送ってロボットを動かします。その前に、速度指令がロボットの中のどこを通るか、途切れたときに何が止めてくれるかを調べます。

トップへ戻る