ロボティクス入門ゼミ 教材 2017-10-13
EV3が起動したら、まず以下の設定をする。
[Wireless and Networks] -> [Wifi] を選択し、 [Powered]にチェックを入れ[Start Scan]でネットワークを調べる。
信州大学では[ASAHI-PUBLIC]を選んで接続する。 無線LAN(ASAHI-PUBLIC)に接続できれば、上のほうにIPアドレスが表示される。 自宅や他の環境で作業する場合には、 そこでの無線LANを選ぶ(無線LANのパスキーの設定も行う)。
使用しているOSである ev3dev のデフォルトのユーザ名とパスワードは以下の通り。
ユーザー名: robot
パスワード: maker
パソコンの端末ソフトから sshでEV3にログインする。 例えばEV3のIPアドレスが 10.61.1.123 の場合、
ssh robot@10.61.1.123
と入力すると、
robot@10.61.1.123's password:
とパスワードを聞かれるので、maker と入力する。 ただし、入力したパスワードは表示されない。
ログインに成功すると、以下のような画面が表示される。
_____ _ _____ _|___ / __| | _____ __ / _ \ \ / / |_ \ / _` |/ _ \ \ / / | __/\ V / ___) | (_| | __/\ V / \___| \_/ |____/ \__,_|\___| \_/ Debian jessie on LEGO MINDSTORMS EV3! The programs included with the Debian GNU/Linux system are free software; the exact distribution terms for each program are described in the individual files in /usr/share/doc/*/copyright. Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent permitted by applicable law. Last login: Wed Sep 6 09:24:58 2017 from 10.61.1.118 robot@ev3dev:~$
最後に表示されている、
robot@ev3dev:~$
はプロンプトと呼ばれ、シェルの入力(命令)待ちの状態を表す。 以下の例ではプロンプトを表示しているが、もちろんプロンプトを入力する必要はない。
以下ではマウスを使わずに、キーボードだけを使用して、いろいろな命令を実行してみる。
現在の時刻を表示する。
robot@ev3dev:~$ date
エンターキーを押すと
Fri Oct 13 04:44:15 UTC 2017
のように時刻が表示される。
現在作業しているフォルダ名(ディレクトリ名)を表示する。
robot@ev3dev:~$ pwd
(pwd は print working directory に由来)
エンターキーを押して
/home/robot
が表示されればOK。
現在の作業ディレクトリにあるファイルやディレクトリを表示する。
robot@ev3dev:~$ ls
(ls は list に由来)
新規にディレクトリ(フォルダ)を作る。
robot@ev3dev:~$ mkdir work
(mkdir は make directory に由来)
これでworkという名前のディレクトリが作成される。実際に確認してみる。
robot@ev3dev:~$ ls
作業ディレクトリ work に移動する。
robot@ev3dev:~$ cd work
(cd は change directory に由来)
移動できたかどうか pwd で確認する。
robot@ev3dev:~/work$ pwd
ちなみに作業ディレクトリがプロンプトの一部として表示されるように設定されている。
ファイルの一覧を見る
robot@ev3dev:~/work$ ls
中身はまだない。
新たにファイルを作ってみる。
robot@ev3dev:~/work$ touch foo
foo という名前のファイルができたかどうか確認してみる。
robot@ev3dev:~/work$ ls
foo の中身を確認。
robot@ev3dev:~/work$ cat foo
foo の中身はまだ空なので何も表示されない。
foo に何か書き込んでみる。
robot@ev3dev:~/work$ echo aaa > foo
再度中身を確認する。ちなみに > foo がないと、aaa という文字列を 単に画面に表示するだけ。
robot@ev3dev:~/work$ cat foo
書き込んだaaaが表示されればOK。
さらに書き込んでみる。
robot@ev3dev:~/work$ echo bbb > foo
中身を確認
robot@ev3dev:~/work$ cat foo
bbb は書き込まれているが先程書き込んだ aaa は消えている。
もとの内容を消さずに、追加で書き込む。
robot@ev3dev:~/work$ echo ccc >> foo
中身を確認。今度は以前書き込んだ文字列 bbb が上書きされていない。
robot@ev3dev:~/work$ cat foo
ファイルをコピーする。
robot@ev3dev:~/work$ cp foo bar
(cp は copy に由来)
bar というファイルが生成されたかどうか確認する。
robot@ev3dev:~/work$ ls
bar の中身も確認する。
robot@ev3dev:~/work$ cat foo
ファイルを削除する。
robot@ev3dev:~/work$ rm foo
(rm は remove に由来)
削除できたかどうか確認する。
robot@ev3dev:~/work$ ls
一つ上の作業ディレクトリに移動。
robot@ev3dev:~/work$ cd ..
一つ上のディレクトリを .. で表すことに注意する。
作業ディレクトリを確認。
robot@ev3dev:~$ pwd
作業ディレクトリにあるファイルとディレクトリを確認。
robot@ev3dev:~$ ls
workというディレクトリを削除する。
robot@ev3dev:~$ rmdir work
(rmdir は remove directory に由来)
workの中が空でないと削除できない。
workの中のbarというファイルも削除する。
robot@ev3dev:~$ rm work/bar
work/bar は、現在作業しているディレクトリの下にある work というディレクトリの下にある bar というファイルを表すことに注意。
再度ディレクトリを削除してみる。
robot@ev3dev:~$ rmdir work
削除できたかどうか確認。
robot@ev3dev:~$ ls
ログアウトする。
robot@ev3dev:~$ exit
再度ログインする。
ssh robot@10.61.1.123
python で動かす前に、シェルから直接動かしてみる。
まず、モータの「ディレクトリ」に移動する。 Linuxではモータやセンサ、それらの設定や値などは 「ディレクトリ」や「ファイル」として表されている。
robot@ev3dev:~$ cd /sys/class/tacho-motor/motor0/
ls で中身をみる。
robot@ev3dev:/sys/class/tacho-motor/motor0$ ls
次のようなファイル一覧が表示されるはず。
address duty_cycle_sp ramp_down_sp stop_actions command hold_pid ramp_up_sp subsystem commands max_speed speed time_sp count_per_rot polarity speed_pid uevent device position speed_sp driver_name position_sp state duty_cycle power stop_action
ここで末尾に _sp がついたファイル名は書き込み可能で ユーザが値を指定することができる (sp は set point の意味)。 _sp 付きのファイルに対応した _sp なしのファイルは、 現在の値を表し、読み込み可能だが書き込みはできない。
例えば、speed_sp に値を書き込んでみる。
その前に speed_sp の現在の値(中身)を確認。
robot@ev3dev:/sys/class/tacho-motor/motor0$ cat speed_sp
デフォルトでは 0 のはず。
値を書き込む (0〜1560)
robot@ev3dev:/sys/class/tacho-motor/motor0$ echo 500 > speed_sp
値が変わったどうか確認。
robot@ev3dev:/sys/class/tacho-motor/motor0$ cat speed_sp
モータ関連でどのようなコマンドがあるのか調べる。 それらは commands というファイルに記述されているので、 ファイルの中身を表示してみる。 複数形の commands というファイル名になっていることに注意。
robot@ev3dev:/sys/class/tacho-motor/motor0$ cat commands
次のようなコマンドがあるのがわかる。
run-forever run-to-abs-pos run-to-rel-pos run-timed run-direct stop reset
ではモータを回してみる。 命令を実行するには、command というフィアルに 上のコマンドのどれかを書き込む。 ファイル名が単数形になっていることに注意。
robot@ev3dev:/sys/class/tacho-motor/motor0$ echo run-forever > command
これでモータが回ればOK。
モータを止める。
robot@ev3dev:/sys/class/tacho-motor/motor0$ echo stop > command
モータのアドレスを確認。
robot@ev3dev:/sys/class/tacho-motor/motor0$ cat address
EV3本体の端子Aに接続したモータの場合には、outA のような結果が得られればOK。
回転させる時間を指定する。
robot@ev3dev:/sys/class/tacho-motor/motor0$ echo 3000 > time_sp
上で指定した時間だけモータを回転させる。
robot@ev3dev:/sys/class/tacho-motor/motor0$ echo run-timed > command
ブレーキモードを調べる。
robot@ev3dev:/sys/class/tacho-motor/motor0$ cat stop_actions
指定できるのは coast brake hold の3種類。
現在のモードを表示する。
robot@ev3dev:/sys/class/tacho-motor/motor0$ cat stop_action
デフォルトでは coast になっている。 これを brake に変更する。
robot@ev3dev:/sys/class/tacho-motor/motor0$ echo brake > stop_action
実際に有効になっているかどうか確認。
robot@ev3dev:/sys/class/tacho-motor/motor0$ echo run-timed > command