ROS 2 実践コース|#02 Linux の端末に慣れる

ROS 2 の操作は、ほとんどを端末(ターミナル)で文字を打って行います。ボタンを押せば済む画面はあまりありません。この回では、授業で困らないように、端末の基本操作を 1 つずつ練習します。Linux を使ったことがなくても大丈夫です。

練習用のフォルダ ~/renshu を作り、その中で試します。失敗しても授業のファイルには影響しないので、気軽に打ってみてください。

始める前に、#00 の手順で start.bat を実行し、ブラウザで講義用のデスクトップを開いておきます。

1. 端末を開く

デスクトップの左上に、アイコンが 4 つ並んでいます。この講座でいちばん使うのは Terminator です。ダブルクリックすると端末が 1 つ開きます。

講義用のデスクトップの左上。Terminator をダブルクリックすると端末が開きます
講義用のデスクトップの左上。Terminator をダブルクリックすると端末が開きます

端末は何個開いてもかまいません。ROS 2 では「1 つの端末で 1 つのプログラムを動かす」ことが多いので、授業では 3〜4 個を並べて使います。

文字を打つ前に、Windows の日本語入力をオフ(半角英数)にしてください。日本語入力がオンのままだと、コマンドが全角で入って動きません。全角のスペースも、目では見分けにくいのにエラーの原因になります。

2. プロンプトを読む

端末を開くと、次のような 1 行が出て、その後ろでカーソルが点滅します。この行をプロンプトと呼びます。「ここにコマンドを打ってください」という合図です。

端末を開いた直後の画面。緑の文字の行がプロンプトで、その右でカーソル(白い四角)が点滅しています
端末を開いた直後の画面。緑の文字の行がプロンプトで、その右でカーソル(白い四角)が点滅しています
プロンプトの読み方。特に大事なのは、いまいるフォルダを表す : と $ の間の部分です
プロンプトの読み方。特に大事なのは、いまいるフォルダを表す :$ の間の部分です

~(チルダ)はホームフォルダを表す記号です。ホームフォルダは、自分のファイルを置く場所で、この環境では /home/ubuntu です。別のフォルダに移動すると、この部分が ~/renshu のように変わります。

コマンドを打ったら Enter を押すと実行されます。Enter を押すまでは、Backspace や ← → キーで打ち直せます。

3. いまいる場所と中身を見る(pwd・ls)

まず、いまどこにいるのか、そこに何があるのかを見ます。1 行ずつ打って、そのつど Enter を押します。

pwd
ls
pwd はいまいるフォルダの場所を、ls はそのフォルダの中身を表示します
pwd はいまいるフォルダの場所を、ls はそのフォルダの中身を表示します
コマンド意味覚え方
pwdいまいるフォルダの場所を表示するprint working directory
lsいまいるフォルダの中身を表示するlist

ls で出てくる名前のうち、青い文字はフォルダ、白い文字はファイルです。

デスクトップの「ubuntu's Home」をダブルクリックすると、同じ場所を絵で見られます。端末の ls と、ファイルの画面は、同じものを別の見せ方で表示しているだけです。

左が端末の ls、右がファイルの画面。並んでいるフォルダは同じです
左が端末の ls、右がファイルの画面。並んでいるフォルダは同じです

ファイルの画面はマウスで操作できて分かりやすいのですが、ROS 2 のプログラムを動かしたり、ビルドしたりするのは端末でしかできません。端末で場所を確かめる習慣をつけておくと、授業で迷いにくくなります。

4. Linux のフォルダの形

Linux のフォルダは、/(ルート)をいちばん上にした木のような形でつながっています。Windows の C:\ にあたるものが / です。

この環境のフォルダの一部。左の木の形と、右の「場所の書き方」を見比べてください
この環境のフォルダの一部。左の木の形と、右の「場所の書き方」を見比べてください

フォルダやファイルの場所を文字で書いたものをパスと呼びます。パスには 2 種類あります。

  • 絶対パス/ から始めて全部書く。どこにいても同じ場所を指す(例:/home/ubuntu/renshu/memo.txt
  • 相対パス:いまいるフォルダからの道順を書く。いる場所が変わると指す場所も変わる(例:ホームにいるときの renshu/memo.txt

Windows に慣れている人が間違えやすい点を挙げておきます。

WindowsLinux
いちばん上C:\/
区切りの記号\(円マーク・バックスラッシュ)/(スラッシュ)
大文字と小文字区別しない区別するMemo.txtmemo.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 の中身を表示する
上のコマンドを順に打ったところ。cd renshu のあと、プロンプトが ~/renshu に変わっています
上のコマンドを順に打ったところ。cd renshu のあと、プロンプトが ~/renshu に変わっています
コマンド意味
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 コマンドに runturtlesimturtlesim_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                    # 詳しい情報つきで表示する
ls を挟みながら、ファイルが増える・名前が変わる・消える様子を確かめています
ls を挟みながら、ファイルが増える・名前が変わる・消える様子を確かめています
コマンド意味
cp 元 先コピーする(copy)
mv 元 先名前を変える。先にフォルダを書くと、そのフォルダへ移動する(move)
rm ファイル名削除する(remove)

rm で消したファイルは、ごみ箱に入りません。元に戻せません。フォルダごと消す rm -r は特に注意が必要です。消す前に pwdls で、いる場所と消すものを確かめてください。

最後の 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
移動するたびに、プロンプトの : と $ の間が変わります。/opt/ros には ROS 2 の本体(humble)が入っています
移動するたびに、プロンプトの :$ の間が変わります。/opt/ros には ROS 2 の本体(humble)が入っています
書き方移動先
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 キーを押してみます。

cd ren まで打ったところ
cd ren まで打ったところ
Tab キーを押すと、renshu/ まで自動で入ります
Tab キーを押すと、renshu/ まで自動で入ります

候補が複数あるときは、Tab を 1 回押しても何も起きません。もう 1 回押すと候補の一覧が出ます。ROS 2 のコマンドでも使えます。

ros2 run sakigake_samples     # ここで Tab を 2 回
sakigake_samples に入っている実行ファイルの一覧が出ました。続けて ta と打って Tab を押せば talker になります
sakigake_samples に入っている実行ファイルの一覧が出ました。続けて ta と打って Tab を押せば talker になります

Tab を押しても補完されないときは、そこまでの綴りがどこか違っている合図です。打ち間違いを見つけるのにも役立ちます。

↑ キーを押すと、前に打ったコマンドが順に出てきます。少しだけ変えてもう一度実行したいときに便利です。

↑ キーを 2 回押して、2 つ前に打った ls -l を呼び出したところ。Enter を押せばもう一度実行されます
↑ キーを 2 回押して、2 つ前に打った ls -l を呼び出したところ。Enter を押せばもう一度実行されます

10. 動いているプログラムを止める(Ctrl+C)

ROS 2 のプログラムの多くは、止めるまで動き続けます。動いている間はプロンプトが出ないので、その端末には次のコマンドを打てません。

ros2 run sakigake_samples talker
talker が 1 秒ごとに送信を続けています。プロンプトは出ていません
talker が 1 秒ごとに送信を続けています。プロンプトは出ていません

止めるときは、その端末をクリックしてから Ctrl+C を押します。

Ctrl+C を押すと ^C と表示されてプログラムが止まり、プロンプトが戻ってきます
Ctrl+C を押すと ^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 つ開き、窓を大きくしてから、次のように操作します。

  1. 左の端末で ros2 run sakigake_samples talker を実行する
  2. Ctrl+Shift+E を押す。窓が左右に分かれ、右に新しい端末ができる。右で ros2 run sakigake_samples listener を実行する
  3. 右の端末をクリックしたまま Ctrl+Shift+O を押す。右が上下に分かれる。下で ros2 node list を実行する
1 つの窓に 3 つの端末。左で talker、右上で listener、右下で ros2 node list を実行しています
1 つの窓に 3 つの端末。左で talker、右上で listener、右下で 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 を打ち間違える
3 つとも失敗しています。どれも、どこが違うのかがエラーの中に書かれています
3 つとも失敗しています。どれも、どこが違うのかがエラーの中に書かれています
出てきた文字意味まず確かめること
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 を押せば取り消せます。

Ctrl+C で取り消すと、いつものプロンプトに戻ります
Ctrl+C で取り消すと、いつものプロンプトに戻ります

13. ファイルを書きかえる(VSCodium)

プログラムや設定ファイルを書きかえるときは、エディタの VSCodium を使います。端末から、開きたいファイルの名前を付けて起動できます。

cd ~/renshu
codium memo.txt

VSCodium が開いたら、2 行目に second line と書き足します。

書き足した直後。タブの memo.txt の横に白い丸(●)が付いています。これは「まだ保存していない」という印です
書き足した直後。タブの memo.txt の横に白い丸(●)が付いています。これは「まだ保存していない」という印です

Ctrl+S で保存します。

保存すると、タブの白い丸が消えて × に変わります
保存すると、タブの白い丸が消えて × に変わります

VSCodium を閉じて、端末で中身を確かめます。

cat memo.txt
書き足した second line が入っています
書き足した second line が入っています

保存しないと、ファイルは変わりません。#04 からは、コードを書きかえてビルドし、実行する流れを何度も繰り返します。「直したのに動きが変わらない」ときは、まずタブに白い丸が残っていないかを見てください。

14. 環境変数と source

端末には、環境変数という「名前の付いた設定の値」がいくつも入っています。ROS 2 はこれを読んで動き方を決めます。

echo $ROS_DISTRO
printenv | grep ROS
tail -3 ~/.bashrc
ROS_DISTRO は humble。~/.bashrc の最後の 3 行で、ROS 2 の設定を読み込んでいます
ROS_DISTROhumble~/.bashrc の最後の 3 行で、ROS 2 の設定を読み込んでいます
  • 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
中身を見る(詳しく)lsls -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

練習問題

答えを見る前に、端末で実際に打って確かめてください。

  1. ~/renshu の中に lesson というフォルダを作り、その中に a.txt を作って ROS と書き込み、cat で中身を確かめる
  2. a.txtb.txt にコピーしてから、a.txt を削除する。lsb.txt だけが残っていることを確かめる
  3. いま ~/renshu/lesson にいるとします。~/renshu/memo.txt の中身を、移動せずに表示するにはどう打てばよいか
  4. /opt/ros/humble の中にあるフォルダの一覧を、ホームフォルダにいたまま表示する
  5. 端末の分割を使って、左で 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 のノードとトピックを調べていきます。

トップへ戻る