平成29年度 午後Ⅰ試験 問1は設問数が多く、計算問題もあり、さらに1つの設問に対して問題文の様々なところを確認して総合的に判断しなければならない構成であった。
平成30年度 午後Ⅰ試験 問1のノリで問題を取り組むと、倍以上の時間を要する感じだ。
与えられている時間が同じなのに、問題の質(多角的に考えないと答えが出せない、計算させるなど)が上がるだけで一気に難しくなる典型的な問題だと感じた。
短時間でこれだけの分量を解きつつ、合格点の60点を突破するためには難しい問題に焦点を当てて受験対策を行うことをお勧めする。
今回の記事は、前回と同様に問題文の読み方、解答を導き出すプロセス、解き方などを解説してみた。
ただ、決定的に違うのはこの記事と前回の記事で文字数や画像数が圧倒的に異なる点だ。
それだけ、問題を解くときにいろいろと確認・注意すべき点がこの問題にはあることをお伝えできればと思う。
設問数と計算問題の有無は難易度に多大な影響を与える
国家試験でも難易度がそんなに変わるのかのぉ?
得意不得意によりますが、計算問題を苦手とする受験者にはかなり影響を与えます
まずは、平成29年度 午後Ⅰ試験 問1を紹介する。
前回の記事では平成30年度 午後Ⅰ試験 問1を紹介したが、まずは設問に関する比較をしてみる。
比較項目 | 平成30年度 | 平成29年度 |
設問数 | 3 | 3 |
小問数 | 6 | 7 |
計算問題の有無 | なし | あり |
計算問題数 | 0 | 3 |
まず、平成30年度と平成29年度の午後Ⅰ試験 問1の設問にフォーカスを当てて比較分析してみた。
上の表を見ていただくと分かる通り、小問数や計算問題の出題数が全然違うのだ。
これは何を意味するか。
それは、選択問題である問2 or 問3に使用する時間が削られていくということである。
前述の通り共通問題はハードウェア寄りのエンジニアもソフトウェア寄りのエンジニアも絶対に解かなければならない必須問題なのだ。
午後Ⅰ試験は90分で2問を解かなければならない。
また、傾向としては共通問題よりも選択問題の方が難易度が高い。
よって、共通問題を40分程度で終了させ、残り50分程度を選択問題に充てるという作戦が一般的と考えている。
その短時間で済ませたい問題が難易度高めだとどうなるか。
時間が削られ、精神的に焦りが生じ、ケアレスミスや問題の読み間違えが発生し、選択問題の解答の質が大幅に低下する。
問題文の複雑さはさらに焦りを生じさせる
平成30年度は設問は問題文から抜き出すのが多かったから何とかなるのではないかのぉ?
この問題はまさに抜き出し系の設問がほぼなく結構読み解かないと解答できない内容でした
ということで、まずは設問1を見ていこう!
(1)はいきなり計算問題。
問題文で関係する場所は以下2か所。
表5の表示&LAN通信タスクの1点目に「情報サーバから1画面分の表示データを取得する。・・・」という記述がある。
そして、1画面は500,000画素で1画素あたり16ビット。
よって、情報サーバから取得する表示データ量は、500,000画素×16ビット=8,000,000ビットとなる。
ここで設問を改めて確認するとひっかけ部分がある。
赤枠1つ目は「40Mビット/秒」、赤枠2つ目は「80Mバイト/秒」と単位が違うのだ。
この単位を揃えないと正しい答えは導き出せない。
ここではバイトに換算して計算してみる。
情報サーバから取得する表示データ量=8,000,000ビット÷8ビット/バイト=1Mバイト
LAN転送時間=1Mバイト÷(40Mビット/秒÷8ビット/バイト)=1Mバイト÷5Mバイト/秒=0.2秒
バッファ転送時間=1Mバイト÷80Mバイト/秒=0.0125秒
設問は「何ミリ秒か」と問われている。
よって、(0.2秒+0.0125秒)×1,000=0.2125秒×1,000=212.5ミリ秒となる。
この小問は、いきなり俯瞰的に問題文を読んで表5→表2から計算に必要な数字を広い、問題文の単位を誤らないように注意して計算する必要がある。
このような要素が平成30年度 問1には存在しない点が難易度を上げている要素の一つと考える。
次に(2)である。
関係する箇所は以下の通り。
図2の正面が0度ではなく180度に設定しているのはなぜ?という趣旨の設問である。
これは、2段落目の赤枠部分に「モータの可動範囲は0~360度で、1回転を超えない。」と記述がある。
つまり、0度を正面に設定してしまうとロボットの体が左に回転できても右に回転することができなくなってしまう。
だから、正面を180度に設定して左右に回転できるように工夫しているのである。
これを35字でまとめる必要があるが、解答に必要な要素としては「ロボットの体が右に回転できない」ことを指摘することと考えている。
次は設問2を見てみよう。
(1)はさらに(a)と(b)に小問が分かれる。
(a)は、200度の位置で停止させる理想的なPWM信号のデューティー比を既約分数で答えよという呪文のような問題である。
ヒントになるのはこちら。
赤枠の部分を見てもらうと、デューティ比と停止位置が例示されている。
例えば、表3のデューティ比1/3の場合、停止位置は120度と記載がある。
設問では200度の停止位置の場合のデューティ比はと聞かれているため、200度/360度となる。
これを約分すると「5/9」という解答が導ける。
※私は数学や物理をほとんどやってこなかったため、こういう用語自体が分からず苦労している、、、
次に(b)である。
個人的にはここが最も難しかった。
まずは設問を見てみよう。
求められている内容は周期、Highの幅、誤差の3つ。
聞かれていることを短時間で正確に把握する訓練も過去問演習の中で行おう。
この内容に解答するために使用する箇所がこちら。
表1のサーボコントローラは「1ミリ秒周期の・・・」という内容、そして表2のタイマの箇条書き2点目に「240kHzのクロックでカウントアップする・・・」という記載がある。
周期はこれらの2つの数字を使用して、240kHz(240,000Hz)×(1÷1,000)=「240」カウントと求めることが出来る。
次にHighの値を求める。
240カウントで1回転(360度)となる。
これを200度の位置で停止するためにはカウント数をどうするかという話である。
これを求めると、200度(停止位置)×240カウント÷360度=133.333…となる。
設問では整数で求めよとあるため、「133」が解答となる。
最後に誤差である。
Highの値を算出した時に、小数点以下に「.3333…」が発生している。
この部分が誤差になる。
この求め方は、0.33を分数に直して計算すると求めやすくなる。
つまり、1/3×360度÷240カウント=「0.5」度となる。
次に(2)を見てみよう。
設問には150度の位置で停止するようにしたが、20ミリ秒ごとに1ずつ減算した値をHighの幅の設定値に設定した理由をロボットの動作の観点から答えよというもの。
ヒントがかなり少ないが、ちゃんと問題文に記載がある。
なにも制御しないと1回転(360度)するのに0.3秒で完了してしまうということだ。
体の正面が180度に設定され、そこから150度の位置(-30度)まで動かすと考えると、0.3秒よりも相当短い時間で回転動作が完了する。
実際に、観光ロボットが自分の方向を検知してものすごいスピードで振り向かれたらどう思うか?
という観点に立つ必要がある。
設問の最後に「ロボットの動作の観点から」という条件が付いているのは、きっとこのことに感づいて欲しいという理由だと思った。
私の解答は「ロボットの体を人の方向に向けるときにゆっくりと回転させるように制御したいから」とした。
IPAの解答例は「体の回転を開始してから停止位置になるまでの時間を長くしたいから」となっているが、趣旨は同じではないかと思っている。
最後に設問3に移ろう。
まずは(1)からだ。
空欄a~eの穴埋め問題である。
まずは問題文から関係する箇所を見てみよう。
空欄a~eは人検出タスクとメインタスクに存在する。
まずは人検出タスクの空欄aを見てみると、人検出できた場合に何かのデータを取得してメインタスクに通知している。
何のデータを取得しているかを問題文から見つける必要がある。
これも結構難しいが、ヒントはこちらに書いてある。
問題文の最初に登場する表1の超音波センサの2点目に、「人を検出した場合、最も近い位置にいる人の方向を出力する。」という記載がある。
出力するということは、超音波センサが制御部にデータを渡すという意味になる。
よって、赤枠部分のうちの「最も近い位置にいる人の方向」が人検出タスクの空欄aの取得データになる。
次に空欄bを見てみる。
こちらは実はメインタスクにヒントが隠されていることに気付けるかが肝だ。
上記赤枠部分を見てもらうと、人検出中の戻るボタンを押下した場合の振る舞いが記載されている。
一方で人検出中に戻るボタン以外のボタンを押下非多妻の記述がない。
そこで、問題文に戻ろう。
すると、以下にヒントが記載されている。
赤枠部分を確認すると、①で人検出した後に②で「メニューのボタンがタッチされると・・・」という記述が見つかる。
空欄bは人検出中にメニューボタンが押された場合のことを記載すればよいことが分かる。
ただし、ここで注意が必要だ。
表5の⑥の戻るボタンを押された場合の記述が、「タッチされた座標が”戻る”ボタンの座標であった」という少し難しい表現で記載されている。
この記述に合わせる必要があるため、解答としては「タッチされた座標が”メニュー”ボタンの座標であった」という内容になる。
次は空欄cとdである。
ここも先ほど見た問題文の③がヒントになる。
赤枠部分の最後に「情報サーバからメニュー及びメニューのボタンの情報を取得して、メニュー及びメニューのボタンをLCDに表示する。」という記述がある。
次にどのタスクがメニューのボタンをLCDに表示しているのかを探すために表5に戻ってみよう。
すると、表示&LAN通信タスクの2つ目の箇条書きに、「・・・各ボタンの座標とそのボタンの種別)がある場合は、データを取得してメインタスクに通知する。」という記述がある。
更に、メインタスクの空欄dでとあるタスクに通知した後、「表示&LAN通信タスクからの通知を待つ。」という記述まである。
つまり、メインタスクがいったんメニュー及びメニューボタンを表示するために表示&LAN通信タスクに通知を行う。
そして、表示&LAN通信タスクが無事にメニュー及びメニューボタンを表示できたらその結果をメインタスクに戻しているのだ。
よって、空欄cには「メニュー及びメニューのボタンを表示する」、空欄dには「表示&LAN通知」が解答となる。
最後の空欄eである。
最後はロボットが人を検出することができなくなった状態の時の処理内容である。
ヒントは問題文にしっかりと書いてある。
ロボットの機能の④に人がロボットから1.5メートルよりも離れると、「体をロボット台座の正面に向け・・・」という記述がある。
よって、空欄eは「体をロボット台座の正面に向ける」という解答になる。
そして、ようやく最後の小問(2)だ。
こちらは表5を中心に確認していくこととなる。
人検出タスクとメインタスクの処理概要に「人を検出できなかった場合・・・」的な内容の処理が記載されている。
この2つのタスクは人を検出するために動き続けなければならないことが書かれている。
よって、「人検出タスク」と「メインタスク」が解答となる。
まとめ
エンベデッドシステムスペシャリスト試験の午後試験は、ソフトウェア系とハードウェア系で問題文がそれぞれ用意されている。
そして、午後Ⅰ試験については平成31年度まで問1は共通問題として必須問題の扱いだった。
この共通問題はハードウェア寄りのエンジニア、ソフトウェア寄りのエンジニアを問わず必ず選択しなければらない問題なのだ。
前回は平成30年度の共通問題を紹介したが、今回は時間的にも難易度的にも厳しいと思う平成29年度 問1を紹介してみた。
この試験を難しくしている要素の1つとして、「年度毎に設問数、計算問題数、問題の複雑さが均一ではない」からではないかと考えている。
コメント