エンベデッドシステムスペシャリスト 2017年 午後1 問01
観光案内用ロボットに関する次の記述を読んで、設問1~3に答えよ。
A社は、観光案内所の窓口、宿泊施設、駅などに設置して周辺地域の観光案内情報を提供する観光案内用ロボット(以下、ロボットという)を開発している。ロボットのシステム構成を図1に、ロボットの主な構成要素を表1に、制御部の主な構成要素を表2に示す。情報サーバには、周辺地域の観光案内情報などが格納されている。



〔ロボットの機能〕
ロボットは、次の機能を備える。
① 人がロボットの1.5メートル以内に近づくと、人がいる方向にロボット本体(以下、体という)を向け、“いらっしゃいませ。ご希望のメニューを選択してください。”という音声を出力する。情報サーバから観光案内のメニュー(以下、メニューという)及びメニューのボタンの情報を取得して、メニュー及びメニューのボタンをLCDに表示する。1.5メートル以内では、人が移動すると、人がいる方向に体を向ける。
② メニューのボタンがタッチされると、情報サーバから必要な情報を取得し、LCDに表示する。情報サーバから音声出力するテキスト(以下、音声のテキストという)を受け取った場合は、その音声を出力する。
③ メニューのボタンがタッチされた後の各画面では、画面の最下部に“戻る”ボタンを表示する。このとき他のボタンは表示しない。“戻る”ボタンがタッチされると、情報サーバからメニュー及びメニューのボタンの情報を取得して、メニュー及びメニューのボタンをLCDに表示する。
④ 人がロボットから1.5メートルよりも離れると、それまでの動作を中止して、体をロボット台座の正面に向け、LCDの表示を“いらっしゃいませ”という表示に切り替える。
〔サーボモータとサーボコントローラの動作〕
(1) サーボコントローラに、デューティ比が一定のPWM信号を連続して入力すると、サーボモータ(以下、モータという)は、そのデューティ比で示される角度まで0.3秒で1回転する角速度で回転し、その位置(以下、停止位置という)を保持する。
(2) モータの可動範囲は0~360度で、1回転を超えない。
(3) サーボコントローラに入力するデューティ比を0の状態から変化させた場合のモータの動作と停止位置を表3に、デューティ比を1の状態から変化させた場合のモータの動作と停止位置を表4に示す。


〔体の回転範囲とモータの停止位置の関係〕
(1) 体は、モータの軸に直結されており、体がロボット台座の正面を向く位置をモータの180度の位置にしてある。
(2) 体の回転範囲を、図2に示す。体は、図2で示す回転範囲以外に回転できない。

〔制御部のソフトウェア〕
ロボットの制御部には、リアルタイムOSを使用している。制御部のタスクの処理概要を表5に示す。
設問1:ロボットのシステムの仕様について、(1)、(2)に答えよ。
設問1(1)
問題文を見るLCDの表示データを情報サーバから取得する場合、情報サーバがデータ転送を開始してから、LANコントローラが表示バッファへの書込みを完了するまでの時間は何ミリ秒か。答えは小数第2位を四捨五入して、小数第1位まで求めよ。ここで、表示データをLANで転送する際の実効転送速度を40Mビット/秒、LANコントローラから表示バッファへの実効転送速度を80Mバイト/秒とし、1M=とする。また、表示データは圧縮されていないものとし、ソフトウェアの処理時間及び情報サーバ内の処理時間は無視できるものとする。
模範解答
212.5
解説
解答の導き方
表示データの転送時間と、LANコントローラが表示バッファへ書き込む時間をそれぞれ求め、最後に合計します。
まず、表2には「1画素が16ビットで、1画面が500,000画素」とあります。したがって、1画面分の表示データ量は、
です。バイトに直すと、1バイトは8ビットなので、
となります。
次に、情報サーバからロボットへのLAN転送にかかる時間を求めます。実効転送速度は40Mビット/秒で、問題文ではと指定されています。そのため、
です。
続いて、LANコントローラから表示バッファへの書込み時間を求めます。転送するデータ量は1,000,000バイト、実効転送速度は80Mバイト/秒なので、
です。
表5では、表示データを取得した後に、LANコントローラへ表示バッファへの書込みを指示するとされています。したがって、ここではLAN転送時間と書込み時間を順に足します。
誤りやすいポイント
- 画素数に画素当たりのビット数を掛けて、まず画面全体のデータ量を求めます。
- LANの転送速度はビット/秒、表示バッファへの書込み速度はバイト/秒です。単位をそろえずに計算すると誤りになります。
- 1バイトは8ビットです。LAN転送時間を求める際は、データ量をビットで扱います。
- データ取得後に表示バッファへ書き込む処理なので、両方の時間を加算します。
- 問題文の指定どおり、Mはとして計算します。
FAQ
Q: 表示データ量をバイトに直したのに、LAN転送時間はなぜビットで計算するのですか?
A: LANの転送速度がビット/秒で示されているためです。データ量もビットにそろえてから計算します。
A: LANの転送速度がビット/秒で示されているためです。データ量もビットにそろえてから計算します。
Q: LAN転送時間と書込み時間は、なぜ加算するのですか?
A: 表5では、表示データを取得した後に、LANコントローラへ表示バッファへの書込みを指示します。問題の条件では、この順番にかかる時間を合計します。
A: 表5では、表示データを取得した後に、LANコントローラへ表示バッファへの書込みを指示します。問題の条件では、この順番にかかる時間を合計します。
Q: Mを1,024の累乗として計算してもよいですか?
A: いいえ。問題文にとあるため、Mはとして扱います。
A: いいえ。問題文にとあるため、Mはとして扱います。
関連キーワード: データ転送速度、転送時間、単位換算、メモリ書込み、逐次処理
設問1(2)
問題文を見る体の正面をモータの0度の位置に設定していない。その理由を35字以内で述べよ。
模範解答
体の正面を0度にすると、体が正面から右方向に回らないから
解説
解答の導き方
-
体はモータの軸に直結されており、「体がロボット台座の正面を向く位置をモータの180度の位置にしてある」とあります。図2では、正面から左右にそれぞれ60度の回転範囲が示されています。つまり、正面をモータの180度に置くことで、左右両方向に回転できる範囲を確保しています。
-
ここで、図2は正面を図の下側に向けた上面図なので、体から見た右側の停止位置が120度(図の左側)、左側の停止位置が240度(図の右側)です。つまり、体を右へ向けるほどモータの停止位置は小さくなり、左へ向けるほど大きくなります。
-
一方、モータの可動範囲は0~360度で、1回転を超えません。正面をモータの0度に置くと、体を右方向へ向けるために必要な停止位置は0度より小さい側になり、モータをそこまで動かせません。
したがって、正面を0度に設定すると、体が正面から右方向に回らないため、正面を180度に設定しています。
誤りやすいポイント
- モータの可動範囲が0~360度だから、正面をどの角度に置いても同じように左右へ回転できると考えることです。角度の端に正面を置くと、端を越える方向には動けません。
- 図2の左右をそのまま体の左右と読んでしまうことです。図2は正面を下に向けて描かれているので、体から見た右側は図の左側(120度)です。
- 体の回転範囲とモータの可動範囲を混同することです。体は図2に示された範囲内でしか回転できません。
- モータが360度の位置からさらに回転できると考えることです。問題文では、1回転を超えないとされています。
FAQ
Q: 正面を180度に置く利点は何ですか?
A: モータの可動範囲の中ほどに正面を置くことで、正面から左右両方向へ回転する余地を確保できます。
A: モータの可動範囲の中ほどに正面を置くことで、正面から左右両方向へ回転する余地を確保できます。
Q: モータを360度の位置に置けば、0度の場合と違いはありますか?
A: 360度も可動範囲の端です。端を越える方向には動けないので、正面を端に置くと一方向への回転ができなくなります。
A: 360度も可動範囲の端です。端を越える方向には動けないので、正面を端に置くと一方向への回転ができなくなります。
Q: 体はモータの可動範囲いっぱいまで回転できますか?
A: いいえ。体の回転範囲は図2に示された範囲に限られます。
A: いいえ。体の回転範囲は図2に示された範囲に限られます。
関連キーワード: サーボモータ、可動範囲、停止位置、角度制御、PWM信号
設問2:モータの制御について、(1)、(2)に答えよ。
設問2(1)
問題文を見るタイマを使用した体の停止位置の制御について、(a)、(b)に答えよ。
(a) 体をモータの200度の位置で停止させる場合、理想的なPWM信号のデューティ比は幾らか。既約分数で答えよ。
(b) タイマを使用して、体をモータの200度の位置に最も近い停止位置で停止させるPWM信号を出力するタイマの設定値(周期、Highの幅)を、10進数で答えよ。また、そのときの誤差は、何度になるか。誤差の答えは、小数第3位を四捨五入して、小数第2位まで求めよ。
模範解答
(a):5/9
(b):周期:240
Highの幅:133
誤差:0.50
解説
解答の導き方
(a) 理想的なデューティ比
したがって、モータの200度の位置に対応する理想的なデューティ比は、
です。とに共通の約数はないため、既約分数はです。
(b) タイマの設定値と誤差
表1には、サーボコントローラが「1ミリ秒周期」のPWM信号で位置決め制御を行うとあります。また、表2のタイマは240 kHzのクロックで動作します。したがって、1ミリ秒の間に進むタイマのカウント数は、
となり、周期の設定値は240です。
理想的なデューティ比を実現するために必要なHighの幅は、
です。タイマの設定値は整数なので、最も近い133をHighの幅に設定します。134にすると理想値からの差がより大きくなるため、133が最も近い設定値です。
このときのデューティ比はです。表3・表4の対応に基づく停止位置は、
となります。目標の200度との差は度なので、誤差は0.50度です。
誤りやすいポイント
- 停止位置の角度とデューティ比は比例します。200度をそのままデューティ比とせず、1回転の360度に対する割合を求めます。
- 周期の設定値は、タイマのクロック周波数とPWM信号の周期から求めます。Highの幅の設定値とは別に計算します。
- Highの幅は整数で設定するため、理想値の133.333…をそのまま設定することはできません。最も近い整数の133を選びます。
- 誤差は、設定後の停止位置と目標の200度との差です。デューティ比の差をそのまま角度の誤差として扱わないようにします。
FAQ
Q: Highの幅を134に設定すると、なぜ最も近い停止位置にならないのですか?
A: Highの幅を134にすると、停止位置は度となり、目標との差は1度です。133に設定した場合の差は0.5度なので、133の方が近くなります。
A: Highの幅を134にすると、停止位置は度となり、目標との差は1度です。133に設定した場合の差は0.5度なので、133の方が近くなります。
Q: 10ビットタイマであることは、今回の設定に影響しますか?
A: 10ビットで設定できる範囲に、周期の設定値240とHighの幅の設定値133が入るため、今回の設定を制限しません。
A: 10ビットで設定できる範囲に、周期の設定値240とHighの幅の設定値133が入るため、今回の設定を制限しません。
Q: 誤差が生じるのはなぜですか?
A: 理想的なHighの幅は整数にならず、タイマでは整数の設定値しか使えないためです。そのため、理想の停止位置に最も近い値を選んでも、わずかな角度差が生じます。
A: 理想的なHighの幅は整数にならず、タイマでは整数の設定値しか使えないためです。そのため、理想の停止位置に最も近い値を選んでも、わずかな角度差が生じます。
関連キーワード: PWM、デューティ比、タイマ、量子化、角度制御
設問2(2)
問題文を見る体の回転を次のように制御している。例えば、体を正面の位置からモータの150度の位置に最も近い位置まで回転させるときに、正面の位置を示すデューティ比のHighの幅の設定値から、20ミリ秒ごとに、1ずつ減算した値をHighの幅の設定値に設定して、停止位置がモータの150度の位置に最も近いデューティ比になるように制御している。その理由を、ロボットの動作の観点から、40字以内で述べよ。
模範解答
体の回転を開始してから停止位置になるまでの時間を長くしたいから
解説
解答の導き方
まず、PWM信号のデューティ比は、モータの停止位置を決めます。本文には、一定のデューティ比のPWM信号を入力すると、モータはそのデューティ比で示される角度まで回転して停止するとあります。したがって、目標位置を一度に設定すれば、モータはその位置に向かって回転します。
一方、例では、正面の位置を示すHighの幅の設定値から、20ミリ秒ごとに1ずつ減らしています。つまり、停止位置の目標を一度に150度へ変えるのではなく、少しずつ変化させています。モータは、その変化する目標位置に向かって回転するため、回転を始めてから最終的な停止位置に達するまでの時間を長くできます。
したがって、この制御の理由は、体が回転を始めてから停止するまでに時間をかけるためです。
誤りやすいポイント
- Highの幅を少しずつ変える目的を、「停止位置の精度を高めるため」とだけ考えないようにします。ここで問われているのは、体の回転にかける時間です。
- 20ミリ秒は、Highの幅の設定値を更新する間隔です。モータの回転速度そのものを表す値ではありません。
- Highの幅を少しずつ変えても、モータ自体の角速度が変わるわけではありません。停止位置の目標を段階的に変えることで、全体の回転に時間をかけます。
- 本文では、体が正面を向く位置はモータの180度の位置です。そのため、モータの150度の位置は、正面から150度回転した位置ではありません。
FAQ
Q: 20ミリ秒ごとに設定値を変えると、モータも20ミリ秒ごとに停止するのですか?
A: いいえ。20ミリ秒は設定値を更新する間隔です。モータをその都度停止させるという意味ではありません。
A: いいえ。20ミリ秒は設定値を更新する間隔です。モータをその都度停止させるという意味ではありません。
Q: Highの幅を一度に目標値へ変える場合との違いは何ですか?
A: 一度に変える場合は目標位置がすぐに切り替わります。少しずつ変える場合は目標位置が段階的に移るため、最終位置に達するまでの回転に時間をかけられます。
A: 一度に変える場合は目標位置がすぐに切り替わります。少しずつ変える場合は目標位置が段階的に移るため、最終位置に達するまでの回転に時間をかけられます。
Q: この方法でモータの角速度自体を遅くしているのですか?
A: いいえ。モータの角速度を変えるのではなく、目標位置を段階的に変えています。
A: いいえ。モータの角速度を変えるのではなく、目標位置を段階的に変えています。
関連キーワード: PWM信号、デューティ比、サーボモータ、位置制御、角速度
設問3:ロボットの制御部のソフトウェアについて、(1)、(2)に答えよ。
設問3(1)
問題文を見る模範解答
a:最も近い人がいる方向
b:タッチされた座標がメニューのボタンの座標であった
c:メニュー及びメニューのボタンを表示する
d:表示&LAN通信
e:体をロボット台座の正面に向ける
解説
解答の導き方
表5の空欄は、各タスクが受け取る情報と、メインタスクがその情報を受けて次に行う処理を対応させると判断できます。
-
[a]は人検出タスクがメインタスクに通知する情報です。
表1には、超音波センサは人を検出した場合に「最も近い位置にいる人の方向を出力する」とあります。表5でも、人を検出できた場合にデータを取得してメインタスクへ通知するので、通知するのは最も近い人がいる方向です。 -
[b]はタッチ座標がメニューのボタンに一致するかどうかを表します。
タッチパネルタスクは、タッチされた座標をメインタスクに通知します。その座標がメニューのボタンの位置であれば、メインタスクはボタンの種別を判定し、対応する指示を表示&LAN通信タスクに通知します。したがって、[b]には「タッチされた座標がメニューのボタンの座標であった」という条件が入ります。 -
[c]と[d]は、“戻る”ボタンがタッチされた後の処理です。
ロボットの機能③では、“戻る”ボタンがタッチされると、情報サーバからメニューとボタンの情報を取得して表示します。表5では、情報サーバからデータを取得し、表示バッファへの書込みを指示するのは表示&LAN通信タスクです。そのため、メインタスクはメニューとメニューのボタンを表示する指示を、このタスクに通知します。 -
[e]は人を検出できなくなったときに行う体の動作です。
ロボットの機能④では、人が1.5メートルよりも離れると、それまでの動作を中止し、体をロボット台座の正面に向けます。表5では、体の動作指示をモータ制御タスクに通知するため、未検出になった場合の指示は、体をロボット台座の正面に向けるものです。
誤りやすいポイント
- [a]を人の検出結果だけと考えないようにします。人を検出した場合には、最も近い人がいる方向もメインタスクに通知します。
- [b]を「タッチされた座標がボタンの座標であった」と広く捉えすぎないようにします。“戻る”ボタンの処理は、表5で別の条件として扱われています。
- [c]は画面に表示する内容、[d]はその指示を受けるタスク名です。体を動かす処理ではないため、モータ制御タスクではありません。
- [e]では、人がいた方向ではなく、未検出になったときの動作として体を正面に戻します。
FAQ
Q: なぜ[a]は「最も近い人がいる方向」なのですか。
A: 超音波センサは、人を検出した場合に最も近い位置にいる人の方向を出力すると説明されており、人検出タスクはそのデータをメインタスクに通知するためです。
A: 超音波センサは、人を検出した場合に最も近い位置にいる人の方向を出力すると説明されており、人検出タスクはそのデータをメインタスクに通知するためです。
Q: メニューのボタンと“戻る”ボタンを分けて考えるのはなぜですか。
A: 表5では、メニューのボタンをタッチした場合の処理と、“戻る”ボタンをタッチした場合の処理が別々に記載されています。“戻る”ボタンではメニューを再表示する指示を出します。
A: 表5では、メニューのボタンをタッチした場合の処理と、“戻る”ボタンをタッチした場合の処理が別々に記載されています。“戻る”ボタンではメニューを再表示する指示を出します。
Q: 人を検出できなくなったとき、なぜ体を正面に向けるのですか。
A: ロボットの機能④で、人が1.5メートルよりも離れた場合に体をロボット台座の正面に向けると定められているためです。
A: ロボットの機能④で、人が1.5メートルよりも離れた場合に体をロボット台座の正面に向けると定められているためです。
関連キーワード: リアルタイムOS、タスク間通知、状態遷移、座標判定、センサ入力
設問3(2)
問題文を見る人を検出している状態から人を検出していない状態になり、体をロボット台座の正面に向ける動作が終了し、及び“いらっしゃいませ”という表示が完了した。その後、人を検出していない状態が続いている場合に動作するタスクを表5中のタスク名で全て答えよ。
模範解答
メインタスク、人検出タスク
解説
解答の導き方
問われているのは、人が検出されなくなった後、体を正面に向ける動作と“いらっしゃいませ”の表示が終わり、未検出の状態が続いている間に処理を行うタスクです。
まず、表5の「人検出」は「0.5秒ごとに起動」し、検出できなかった場合は未検出であることをメインタスクに通知します。人がいない状態が続く間も、人検出タスクはセンサを確認し、未検出を通知し続けます。
次に、表5の「メイン」には、「人を検出していない状態で、未検出の通知を受けた場合は、人を検出していない状態を継続する」とあります。したがって、未検出の通知を受けて状態を維持するメインタスクも処理を行います。
一方、体を正面に向ける指示は既に処理が終わっており、次の指示がなければモータ制御タスクは新たな制御を行いません。また、“いらっしゃいませ”の表示が完了した後、表示&LAN通信タスクにも新たな指示はありません。よって、未検出の状態が続く間に動作するのは、表5のタスク名でいう「メイン」と「人検出」です。
誤りやすいポイント
- 人の未検出を一度通知したら、人検出タスクも停止すると考えないようにします。「人検出」は0.5秒ごとに起動するため、未検出状態でも確認を続けます。
- 体を正面に向ける動作が完了した後も、モータ制御タスクが動作し続けるとは限りません。新たな指示がなければ、追加のモータ制御はありません。
- 表示が完了した表示&LAN通信タスクと、未検出の通知を受けて状態を維持するメインタスクを混同しないようにします。
FAQ
Q: 人がいない状態でも、人検出タスクは動作するのですか?
A: はい。表5では0.5秒ごとに起動するとされているため、人が検出されない状態でもセンサの確認を続けます。
A: はい。表5では0.5秒ごとに起動するとされているため、人が検出されない状態でもセンサの確認を続けます。
Q: 未検出の通知を受けたメインタスクは、何をするのですか?
A: 人を検出していない状態を継続します。そのため、未検出の通知を受けて状態を維持する処理が続きます。
A: 人を検出していない状態を継続します。そのため、未検出の通知を受けて状態を維持する処理が続きます。
Q: モータ制御タスクや表示&LAN通信タスクを含めないのはなぜですか?
A: 問題の条件では、体を正面に向ける動作と表示がすでに完了しています。その後に新たな指示がないため、これらのタスクが引き続き処理を行うとは判断しません。
A: 問題の条件では、体を正面に向ける動作と表示がすでに完了しています。その後に新たな指示がないため、これらのタスクが引き続き処理を行うとは判断しません。
関連キーワード: リアルタイムOS、タスク、周期起動、イベント通知、状態遷移




