ROS 2 の操作は、ほとんどを端末(ターミナル)で文字を打って行います。ボタンを押せば済む画面はあまりありません。この回では、授業で困らないように、端末の基本操作を 1 つずつ練習します。Linux を使ったことがなくても大丈夫です。
練習用のフォルダ ~/renshu を作り、その中で試します。失敗しても授業のファイルには影響しないので、気軽に打ってみてください。
始める前に、#00 の手順で start.bat を実行し、ブラウザで講義用のデスクトップを開いておきます。
1. 端末を開く
デスクトップの左上に、アイコンが 4 つ並んでいます。この講座でいちばん使うのは Terminator です。ダブルクリックすると端末が 1 つ開きます。
端末は何個開いてもかまいません。ROS 2 では「1 つの端末で 1 つのプログラムを動かす」ことが多いので、授業では 3〜4 個を並べて使います。
文字を打つ前に、Windows の日本語入力をオフ(半角英数)にしてください。日本語入力がオンのままだと、コマンドが全角で入って動きません。全角のスペースも、目では見分けにくいのにエラーの原因になります。
2. プロンプトを読む
端末を開くと、次のような 1 行が出て、その後ろでカーソルが点滅します。この行をプロンプトと呼びます。「ここにコマンドを打ってください」という合図です。
~(チルダ)はホームフォルダを表す記号です。ホームフォルダは、自分のファイルを置く場所で、この環境では /home/ubuntu です。別のフォルダに移動すると、この部分が ~/renshu のように変わります。
コマンドを打ったら Enter を押すと実行されます。Enter を押すまでは、Backspace や ← → キーで打ち直せます。
3. いまいる場所と中身を見る(pwd・ls)
まず、いまどこにいるのか、そこに何があるのかを見ます。1 行ずつ打って、そのつど Enter を押します。
pwd
ls
| コマンド | 意味 | 覚え方 |
|---|---|---|
pwd | いまいるフォルダの場所を表示する | print working directory |
ls | いまいるフォルダの中身を表示する | list |
ls で出てくる名前のうち、青い文字はフォルダ、白い文字はファイルです。
デスクトップの「ubuntu's Home」をダブルクリックすると、同じ場所を絵で見られます。端末の ls と、ファイルの画面は、同じものを別の見せ方で表示しているだけです。
ファイルの画面はマウスで操作できて分かりやすいのですが、ROS 2 のプログラムを動かしたり、ビルドしたりするのは端末でしかできません。端末で場所を確かめる習慣をつけておくと、授業で迷いにくくなります。
4. Linux のフォルダの形
Linux のフォルダは、/(ルート)をいちばん上にした木のような形でつながっています。Windows の C:\ にあたるものが / です。
フォルダやファイルの場所を文字で書いたものをパスと呼びます。パスには 2 種類あります。
- 絶対パス:
/から始めて全部書く。どこにいても同じ場所を指す(例:/home/ubuntu/renshu/memo.txt) - 相対パス:いまいるフォルダからの道順を書く。いる場所が変わると指す場所も変わる(例:ホームにいるときの
renshu/memo.txt)
Windows に慣れている人が間違えやすい点を挙げておきます。
| Windows | Linux | |
|---|---|---|
| いちばん上 | C:\ | / |
| 区切りの記号 | \(円マーク・バックスラッシュ) | /(スラッシュ) |
| 大文字と小文字 | 区別しない | 区別する(Memo.txt と memo.txt は別のファイル) |
| 自分のファイルの場所 | C:\Users\(名前) | /home/ubuntu(~) |
名前にスペースや日本語を入れると、コマンドで扱うときに面倒が増えます。この講座では、フォルダやファイルの名前は半角の英小文字・数字・_(アンダーバー)だけで付けてください。
5. フォルダとファイルを作る(mkdir・cd・echo・cat)
ホームフォルダに練習用のフォルダ renshu を作り、その中にファイルを 1 つ作ります。1 行ずつ打ってください。# から後ろは説明なので打たなくてかまいません。
cd ~ # ホームフォルダに移動する
mkdir renshu # renshu というフォルダを作る
ls # できたか確かめる
cd renshu # renshu の中に移動する
pwd # いまいる場所を確かめる
echo "hello ROS 2" > memo.txt # 文字を memo.txt に書き込む
ls # memo.txt ができたか確かめる
cat memo.txt # memo.txt の中身を表示する
| コマンド | 意味 |
|---|---|
mkdir 名前 | フォルダを作る(make directory) |
cd 場所 | フォルダを移動する(change directory) |
echo 文字 | 文字を表示する。> ファイル名 を付けると、表示する代わりにファイルに書き込む |
cat ファイル名 | ファイルの中身を表示する |
> は、ファイルの中身をまるごと置き換えます。すでにあるファイルに > で書き込むと、前の中身は消えます。後ろに書き足したいときは >> を使います。
コマンドがうまくいったとき、Linux は何も表示しないことがよくあります。mkdir renshu を打っても「作りました」とは出ません。何も出ずに次のプロンプトが出たら成功、と考えてください。心配なときは ls で確かめます。
6. コマンドの形
ここまでに打ったコマンドは、どれも同じ形をしています。先頭がコマンド(何をするか)、そのあとにオプション(やり方を変える)や引数(何に対して)が続きます。
区切りのスペースを忘れて ls-l と打つと、「ls-l という名前のコマンド」を探しに行ってエラーになります。
ROS 2 のコマンドも同じ形です。たとえば ros2 run turtlesim turtlesim_node は、ros2 コマンドに run・turtlesim・turtlesim_node の 3 つの引数を渡しています。使い方を忘れたときは、コマンドのあとに --help を付けると説明が出ます。
7. コピー・名前の変更・削除(cp・mv・rm)
~/renshu にいる状態で、次を 1 行ずつ打ちます。
cp memo.txt memo2.txt # memo.txt をコピーして memo2.txt を作る
ls
mv memo2.txt copy.txt # memo2.txt の名前を copy.txt に変える
ls
rm copy.txt # copy.txt を削除する
ls
ls -l # 詳しい情報つきで表示する
| コマンド | 意味 |
|---|---|
cp 元 先 | コピーする(copy) |
mv 元 先 | 名前を変える。先にフォルダを書くと、そのフォルダへ移動する(move) |
rm ファイル名 | 削除する(remove) |
rm で消したファイルは、ごみ箱に入りません。元に戻せません。フォルダごと消す rm -r は特に注意が必要です。消す前に pwd と ls で、いる場所と消すものを確かめてください。
最後の ls -l の 1 行は、左から「読み書きの許可」「持ち主」「大きさ(バイト)」「更新した日時」「名前」です。memo.txt の大きさが 12 バイトなのは、hello ROS 2 の 11 文字と、行の終わりを表す改行 1 文字の分です。
8. フォルダを移動する(cd)
cd には、いくつか決まった書き方があります。~/renshu にいる状態で、次を打ってみます。
pwd
cd .. # 1 つ上のフォルダへ
pwd
cd /opt/ros # 絶対パスで移動する
ls
pwd
cd # 何も付けないとホームに戻る
pwd
| 書き方 | 移動先 |
|---|---|
cd renshu | いまいるフォルダの中の renshu |
cd .. | 1 つ上のフォルダ |
cd ~ または cd | ホームフォルダ |
cd /opt/ros | 絶対パスで書いた場所(どこにいても同じ) |
cd ~/ros2_ws/src | ホームの中の ros2_ws の中の src(#04 で使う) |
cd - | 直前にいたフォルダ |
迷子になったら、cd だけ打ってホームに戻り、そこからやり直すのがいちばん確実です。
9. 打つ量を減らす(Tab 補完と ↑ キー)
ROS 2 のコマンドは長いので、全部を手で打つと打ち間違えます。Tab キーを使うと、途中まで打った名前の続きを端末が補ってくれます。
ホームフォルダで cd ren まで打ち、Enter を押さずに Tab キーを押してみます。
候補が複数あるときは、Tab を 1 回押しても何も起きません。もう 1 回押すと候補の一覧が出ます。ROS 2 のコマンドでも使えます。
ros2 run sakigake_samples # ここで Tab を 2 回
Tab を押しても補完されないときは、そこまでの綴りがどこか違っている合図です。打ち間違いを見つけるのにも役立ちます。
↑ キーを押すと、前に打ったコマンドが順に出てきます。少しだけ変えてもう一度実行したいときに便利です。
10. 動いているプログラムを止める(Ctrl+C)
ROS 2 のプログラムの多くは、止めるまで動き続けます。動いている間はプロンプトが出ないので、その端末には次のコマンドを打てません。
ros2 run sakigake_samples talker
止めるときは、その端末をクリックしてから Ctrl+C を押します。
端末では、Ctrl+C は「コピー」ではなく「止める」の意味になります。コピーと貼り付けは Shift を足します。
| キー | 端末での意味 |
|---|---|
| Ctrl+C | 動いているプログラムを止める/打ちかけのコマンドを取り消す |
| Ctrl+Shift+C | 選んだ文字をコピーする |
| Ctrl+Shift+V | 貼り付ける |
| Ctrl+S | 画面の表示が止まる(プログラムは止まっていない)。Ctrl+Q で戻る |
| Ctrl+L | 画面をきれいにする(clear と同じ) |
記事のコマンドを Windows 側でコピーして端末に貼るときは、noVNC のクリップボードを使います。やり方は #00 の「Windows でコピーした文字を貼り付ける」を見てください。ただ、慣れるまでは手で打ち、Tab 補完を使うほうが早く覚えられます。
11. 1 つの窓を分割する(Terminator)
端末をたくさん開くと、窓が重なってどれがどれか分からなくなります。Terminator は 1 つの窓を分割して、複数の端末を並べられます。
端末を 1 つ開き、窓を大きくしてから、次のように操作します。
- 左の端末で
ros2 run sakigake_samples talkerを実行する - Ctrl+Shift+E を押す。窓が左右に分かれ、右に新しい端末ができる。右で
ros2 run sakigake_samples listenerを実行する - 右の端末をクリックしたまま Ctrl+Shift+O を押す。右が上下に分かれる。下で
ros2 node listを実行する
| キー | 動き |
|---|---|
| Ctrl+Shift+E | 左右に分ける |
| Ctrl+Shift+O | 上下に分ける |
| Ctrl+Shift+W | いま選んでいる端末を閉じる |
| Alt+矢印キー | 隣の端末に移る(マウスでクリックしてもよい) |
| Ctrl+Shift+T | 新しいタブを開く |
キーを押しても分割されないときは、Terminator の窓が選ばれていない(ブラウザや別の窓が選ばれている)ことがほとんどです。一度端末の中をクリックしてから押し直してください。終わったら、それぞれの端末で Ctrl+C を押してから閉じます。
12. エラーの読み方
コマンドが失敗すると、英語でエラーが出ます。全部を読めなくても、最後の行とキーワードを見れば、たいていの原因は分かります。わざと間違えて、よく出るエラーを見ておきましょう。
cd rensyu # 綴りを間違える
cat memo.txt # ホームにいるのに renshu の中のファイルを開こうとする
ros2 rnu sakigake_samples talker # run を打ち間違える
| 出てきた文字 | 意味 | まず確かめること |
|---|---|---|
No such file or directory | その名前のファイルやフォルダがない | 綴り(Tab 補完を使う)と、いまいる場所(pwd) |
invalid choice: 'rnu' | rnu という使い方はない。後ろに正しい候補が並ぶ | 候補の中から正しい綴りを探す |
command not found | そのコマンドが見つからない | 綴り。ROS 2 のコマンドなら、新しく開いた端末で試す |
Permission denied | その場所を変更する許可がない | ホームフォルダの中で作業しているか |
エラーの意味が分からないときは、エラーの文字をそのまま AI に貼り付けて聞くのも有効です。そのときは、直前に打ったコマンドと、pwd の結果も一緒に渡すと、的外れな答えが減ります。
プロンプトが > に変わったとき
"(ダブルクォート)の閉じ忘れなどがあると、Enter を押してもコマンドが終わらず、プロンプトが > に変わります。「続きを打ってください」という意味です。
echo "hello
こうなったら、慌てずに Ctrl+C を押せば取り消せます。
13. ファイルを書きかえる(VSCodium)
プログラムや設定ファイルを書きかえるときは、エディタの VSCodium を使います。端末から、開きたいファイルの名前を付けて起動できます。
cd ~/renshu
codium memo.txt
VSCodium が開いたら、2 行目に second line と書き足します。
Ctrl+S で保存します。
VSCodium を閉じて、端末で中身を確かめます。
cat memo.txt
保存しないと、ファイルは変わりません。#04 からは、コードを書きかえてビルドし、実行する流れを何度も繰り返します。「直したのに動きが変わらない」ときは、まずタブに白い丸が残っていないかを見てください。
14. 環境変数と source
端末には、環境変数という「名前の付いた設定の値」がいくつも入っています。ROS 2 はこれを読んで動き方を決めます。
echo $ROS_DISTRO
printenv | grep ROS
tail -3 ~/.bashrc
echo $名前で、環境変数の値を表示できます|(パイプ)は、左のコマンドの出力を右のコマンドに渡します。grep ROSは「ROS を含む行だけを残す」コマンドです~/.bashrcは、端末を開くたびに自動で読み込まれる設定ファイルです
source ファイル名 は、「そのファイルに書かれた設定を、いま開いている端末に読み込む」コマンドです。新しく開いた端末ですぐに ros2 コマンドが使えるのは、~/.bashrc の中で ROS 2 の設定を source しているからです。
逆に言うと、すでに開いている端末には、あとから変えた設定は入りません。#04 で自分のパッケージをビルドしたあとに source install/setup.bash を打つのは、ビルドしてできたプログラムの場所を、その端末に教えるためです。「さっき作ったはずのものが見つからない」と言われたら、新しい端末を開くか、source をやり直してください。
環境変数を自分で決めることもあります。export 名前=値 と打つと、その端末に新しい環境変数ができます。export を付けるのは、そこから起動するプログラムにも、その値を伝えるためです。そのコマンド 1 回だけに効かせたいときは、コマンドの前に書く書き方もあります。
export ROS_DOMAIN_ID=7 # この端末では、これ以降ずっと 7
ROS_DOMAIN_ID=7 ros2 node list # このコマンドのときだけ 7
どちらも #03 以降で使います。前に書く形は、ほかの端末や、あとで打つコマンドには影響しません。
困ったとき
| 症状 | 原因と対処 |
|---|---|
| 文字を打っても何も入らない | 端末の窓が選ばれていない。端末の中をクリックする |
| 全角の文字が入る、コマンドが見つからない | Windows の日本語入力がオン。半角英数にする |
| プロンプトが出てこない | プログラムが動いている。止めてよければ Ctrl+C。止めたくなければ別の端末を開く |
プロンプトが > になった | " の閉じ忘れなど。Ctrl+C で取り消す |
| 画面が動かなくなった | Ctrl+S を押したかもしれない。Ctrl+Q を押す |
| どこにいるか分からなくなった | pwd で確かめる。cd だけ打つとホームに戻る |
| ファイルを直したのに結果が変わらない | VSCodium で保存していない(タブの白い丸)。Ctrl+S |
| 作ったパッケージが見つからない | その端末で source install/setup.bash をしていない。新しい端末を開く |
早見表
| やりたいこと | コマンド・キー |
|---|---|
| いまいる場所を見る | pwd |
| 中身を見る(詳しく) | ls(ls -l) |
| 移動する/1 つ上へ/ホームへ | cd 場所/cd ../cd |
| フォルダを作る | mkdir 名前 |
| ファイルの中身を表示する | cat ファイル名 |
| コピー/名前変更・移動/削除 | cp 元 先/mv 元 先/rm ファイル名 |
| ファイルを編集する | codium ファイル名(保存は Ctrl+S) |
| 名前の続きを補う/候補を見る | Tab/Tab 2 回 |
| 前に打ったコマンドを出す | ↑ |
| プログラムを止める | Ctrl+C |
| コピー/貼り付け | Ctrl+Shift+C/Ctrl+Shift+V |
| 端末を左右/上下に分ける | Ctrl+Shift+E/Ctrl+Shift+O |
| 使い方を見る | コマンド --help |
練習問題
答えを見る前に、端末で実際に打って確かめてください。
~/renshuの中にlessonというフォルダを作り、その中にa.txtを作ってROSと書き込み、catで中身を確かめるa.txtをb.txtにコピーしてから、a.txtを削除する。lsでb.txtだけが残っていることを確かめる- いま
~/renshu/lessonにいるとします。~/renshu/memo.txtの中身を、移動せずに表示するにはどう打てばよいか /opt/ros/humbleの中にあるフォルダの一覧を、ホームフォルダにいたまま表示する- 端末の分割を使って、左で talker、右で listener を動かし、両方を Ctrl+C で止める
答えの例(1〜4)
# 1
cd ~/renshu
mkdir lesson
cd lesson
echo "ROS" > a.txt
cat a.txt
# 2
cp a.txt b.txt
rm a.txt
ls
# 3(どちらでもよい)
cat ../memo.txt
cat ~/renshu/memo.txt
# 4
cd
ls /opt/ros/humble
練習が終わったら、~/renshu は消してかまいません。cd でホームに戻ってから rm -r renshu を打ちます。(rm -r はフォルダの中身ごと消すので、打つ前に pwd でホームにいることを確かめてください)
次の #03 からは、ここで練習した操作を使って、ROS 2 のノードとトピックを調べていきます。























