本記事について
ETロボコンとは
組込みソフトウェアプログラミング教育を目的としたロボコンのことである。
実際の競技と、ソフトウェアの内容を説明するモデルの完成度によって競われる。
本記事を書こうと思った理由
筆者の偏見が混じっているかもしれないが、ETロボコンはWindowsで開発している人が多い。
そのためか、Macでリモートスタートをするための直接的な記事が少なく、大変苦労したので、書くことにした。
リモートスタートと調べると、minicomとかTera Termといったツールをインストールしましょうと出てくるが、リモートスタート自体はscreenコマンドを使えば想像以上に簡単にできるよということを伝えたい。
あんまりしっかり書き過ぎると勉強にならないかもしれないので、説明はあまり詳しくしないで行う。
開発環境
ハード:MacOS High Sierra
言語:C++
走行体は2018年度版のものを用いた。
screenコマンド
このscreenコマンドが今回のミソ。ちょっと説明。
自分の理解としては、screenコマンドは多くの端末との画面を共有することができるコマンドである。
ほかのMacユーザーがどうやってリモートスタートを実現しているのかは知らないが、筆者はこれを利用しようと考えた。
今回のリモートスタートは、screenコマンドで走行体とパソコンのウィンドウを共有することで実現する。
リモートスタートしてみよう
走行体とパソコンをBluetooth接続
いわゆる初期設定。
EV3wayの公式ページを参考に行った。
URL->https://afrel.co.jp/archives/15586
公式は正義ということを実感した。
プログラムの準備
これは公式に技術教育などで配布されたサンプルプログラムを利用しよう。
動くことがわかってしまえば、サンプルを真似るなり理解して再構成するなり、できるはず。
端末名を調べる
ls /dev/tty.*
端末を接続する前と接続した後の上記コマンドの実行結果を比較して端末名を取得する。
うちの場合の端末名は以下のようになっている。
/dev/tty.MindstormEV3-SerialPort
端末名がわかったところで接続に移ろう。
端末と接続する
接続手順は間違えてはいけない。繋がらなくなってしまう。
一般性があるのかはわからないが、自走行体の接続手順を以下に記す。
1走行体を起動する。
2パソコンと走行体をBluetooth環境設定から接続。
3appを起動する。
4screen "端末名"
をターミナルに入力。
5キャリブレーションなどを行って、走行体をスタート位置に設置する。
6パソコンでキーを入力する。ー>スタート
screen "端末名" を実行すると画面がまっさらになるが問題はない。
screenはウィンドウを共有するので、returnキーを押さなくてもキーを押すだけで走行体へデータが送られるということに注意。つまり、キーを押したらすぐにスタートする。
どうだろう。簡単ではないだろうか。
データも取得できる、、、はずできます!
Bluetoothポインタにファイル出力をすることによって、データをターミナルに出力することも可能だ。
筆者は以下のようにscreenの設定ファイルである「.screenrc」に以下の記述を加えることにより、ログを取得している。
deflog on
logfile "/保存先のパス/ログファイル名.log"
deflog onはデフォルトでログを毎回とるようになる設定を、
logfileはログファイルの保存場所と保存名の指定をしている。
たぶん、screen本来の使い方と違うけど笑
が、しかし、現状、筆者はデータを取得できていない。
ターミナルの出力履歴が残らないのだ。
一応その辺りもscreenの設定ファイルから履歴を増やしてみたり、ターミナルのlogファイル出力に挑戦して見たりしたが、挫折した。
ダメだった理由は
走行体の電源をブチ切りしてるのがダメなのかなとか、
fclose("ファイルポインタ");
していないからかなとか、
そんなことを思っている。
もし、解決方法知ってるよ! という方は参考になるホームページとかあったら教えて欲しいです(切実)。
参考文献
走行体との接続手順について
https://afrel.co.jp/archives/15586
screenについて
GNUという会社が作ったらしいので、一緒にscreenと調べれば、いろいろ参考になると思う。
端末名と接続方法ー>https://qiita.com/kobaboy/items/2e15805cf485de3ddf79
screenとはー>https://ja.wikipedia.org/wiki/GNU_Screen
など