エンベデッドシステムスペシャリスト 2010年 午後1 問02
天体望遠鏡とPCからなる可搬型パーソナル天体観測システムに関する次の記述を読んで、設問1~3に答えよ。
B社は、屋外で手軽に天体観測を楽しむことができる可搬型パーソナル天体観測システム(以下、観測システムという)を開発することになった。この観測システムは天体望遠鏡とPCとをUSB I/Fで接続し、PC上の観測支援ソフトウェアで天体望遠鏡の向きを制御しながら、PC画面上に天体の動画像を表示する。天体望遠鏡の向きは図1に示す方位角と図2に示す仰角で定まり、天体望遠鏡に搭載されているMPUがモータを制御して、天体望遠鏡を指定方向に向ける。

天体望遠鏡のハードウェア構成要素とその説明を表1に、PCと天体望遠鏡との間で送受信されるメッセージの一部を表2に示す。


観測中のPCの画面イメージ、及び画面の説明を、図3に示す。
観測システムには、初期調整モード及び観測モードの二つのモードがある。各モードの説明文中のⓐ~ⓓは図3のエリア又はボタンを示す。
〔初期調整モード〕
天体望遠鏡が水平に設置され、動作を開始すると、天体望遠鏡は、緯度情報及び経度情報を位置通知メッセージによってPCに送信し、観測システムは初期調整モードになる。
初期調整モードでは、次に示す手順で、方向決めの基準となる天体(以下、基準天体という)を利用し、天体望遠鏡が向いている正しい方位角及び仰角を得る。
① 観測者がⓐを使用して、基準天体を選択する。PCは0.01度の精度で計算した基準天体の方位角及び仰角を、向き制御要求メッセージによって天体望遠鏡に送信する。
② 天体望遠鏡は向き制御要求メッセージを受信すると、方位角センサ及び仰角センサを使用して角度を計測しながら、指定された方位角及び仰角に向きを合わせる。
③ ⓑの中央に基準天体をとらえていない場合、観測者はⓒを使用して、PCから微動要求メッセージを送信し、天体望遠鏡を上下又は左右方向に0.03度ずつ回転させ、基準天体がⓑの中央に位置するように天体望遠鏡の向きを微調整する。
④ 微調整完了後、観測者がⓓを使用して調整完了を指示すると、PCは0.01度の精度でその時刻の基準天体の方向を再計算し、初期調整完了メッセージによって、その方位角及び仰角を天体望遠鏡に送信する。
⑤ 天体望遠鏡は初期調整完了メッセージを受信すると、メッセージに含まれる方位角及び仰角をメモリ上の領域(以下、方向記憶領域という)に記憶し、観測システムは観測モードに移行する。
〔観測モード〕
観測対象の天体(以下、観測天体という)を観測するためのモードである。観測モードでは、次に示す手順で観測天体を追尾する。
① 観測者がⓐを使用して観測天体を選択すると、PCが観測天体の方向を0.01度の精度で計算し、向き制御要求メッセージによって観測天体の方位角及び仰角を天体望遠鏡に送信する。
② 天体望遠鏡は向き制御要求メッセージを受信すると、方向記憶領域の値と、指示された向きデータとの差分を変位量として天体望遠鏡を回転し、方向記憶領域の値を回転後の天体望遠鏡の向きに更新する。
③ 天体望遠鏡が観測天体の方向を向いた後、PCが一定周期で観測天体の方位角及び仰角を、向き制御要求メッセージで天体望遠鏡に送信することによって、観測天体を自動的に追尾する。
天体望遠鏡のタスク一覧を表3に示す。
設問1:観測システムの仕様について、(1)、(2)に答えよ。
設問1(1)
問題文を見る図4に示す初期調整モードのシーケンス図において、a~cに入れる適切なメッセージ名を答えよ。


模範解答
a:位置通知
b:向き制御要求
c:初期調整完了
解説
解答の導き方
図4では、メッセージの順序と送信方向を、初期調整モードの手順に対応させて考えます。
-
最初の矢印 a は、天体望遠鏡からPCへ向かっています。本文には、動作を開始すると天体望遠鏡が緯度情報及び経度情報をPCに送信し、「位置通知メッセージによって」通知するとあります。したがって、a は「位置通知」です。この通知の後に、観測システムは初期調整モードになります。
-
次の矢印 b は、PCから天体望遠鏡へ向かっています。初期調整モードでは、観測者が基準天体を選択すると、PCがその方位角及び仰角を計算して天体望遠鏡に送信します。本文では、このとき使うメッセージを「向き制御要求メッセージ」としています。したがって、b は「向き制御要求」です。その後、基準天体が視野の中央に入るまで「微動要求」が繰り返されます。
-
最後の矢印 c もPCから天体望遠鏡へ向かっています。微調整の後、観測者が調整完了を指示すると、PCは基準天体の方向を再計算し、その方位角及び仰角を天体望遠鏡に送信します。このメッセージは「初期調整完了メッセージ」なので、c は「初期調整完了」です。受信後、天体望遠鏡はその方向を方向記憶領域に記憶し、観測モードへ移行します。
誤りやすいポイント
- a は天体望遠鏡からPCへの通知です。初期調整でPCから送られるメッセージと取り違えないようにします。
- b と c はどちらもPCから天体望遠鏡へ送られますが、送信するタイミングが異なります。基準天体を選んだ段階が「向き制御要求」、微調整を終えて調整完了を指示した段階が「初期調整完了」です。
- 「微動要求」は基準天体を視野の中央に合わせるために繰り返すメッセージです。図4では、b と c の間に示されています。
FAQ
Q: 「向き制御要求」と「初期調整完了」は、どちらも方位角及び仰角を送るのに、なぜ別のメッセージなのですか?
A: 「向き制御要求」は基準天体の方向へ望遠鏡を向けるために送ります。一方、「初期調整完了」は微調整後の方向を確定し、天体望遠鏡に記憶させるために送ります。
A: 「向き制御要求」は基準天体の方向へ望遠鏡を向けるために送ります。一方、「初期調整完了」は微調整後の方向を確定し、天体望遠鏡に記憶させるために送ります。
Q: a が初期調整モードを示す括弧の外にあるのはなぜですか?
A: a は、初期調整モードになる前に設置位置を通知するメッセージだからです。初期調整モード内の処理は、その後の基準天体の指定から始まります。
A: a は、初期調整モードになる前に設置位置を通知するメッセージだからです。初期調整モード内の処理は、その後の基準天体の指定から始まります。
Q: 「微動要求」は、基準天体を選択した直後に必ず送られるのですか?
A: 必ず送られるわけではありません。基準天体が視野の中央にない場合に、中央に合わせるために送ります。
A: 必ず送られるわけではありません。基準天体が視野の中央にない場合に、中央に合わせるために送ります。
関連キーワード: シーケンス図、メッセージ、状態遷移、位置情報、初期調整
設問1(2)
問題文を見る次の記述中のd~gに入れる適切な数値を求めよ。答えは小数第3位を四捨五入して、小数第2位まで求めよ。
観測モードにおいて、方向記憶領域の方位角が86.77度、仰角が12.43度とする。PCから、方位角121.31度、仰角35.82度の向き制御要求を受けた場合、天体望遠鏡の最小回転角度が0.03度なので、指示された角度に最も近い角度に回転する。すなわち、天体望遠鏡は方位角を時計回りにd度、仰角を上方向へe度回転した後、方位角f度、仰角g度を方向記憶領域の値とする。
模範解答
d:34.53
e:23.40
f:121.30
g:35.83
解説
解答の導き方
観測モードでは、方向記憶領域に記憶された向きから、PCが指示した向きまで天体望遠鏡を回転させます。また、本文には「方向記憶領域の値を回転後の天体望遠鏡の向きに更新する」とあります。したがって、まず指示角度との差を求め、次に実際に回転できる角度に合わせて、回転後の値を求めます。
本文には「天体望遠鏡の最小回転角度が0.03度なので、指示された角度に最も近い角度に回転する」とあります。つまり、回転量は度の整数倍です。
-
方位角
指示角度までの差は、度です。なので、パルス数は整数であることから、近い候補は回と回です。回転量はそれぞれ度、度であり、度に近いのは度です。したがって、方位角は時計回りに度回転し、回転後の方向記憶領域の値は度になります。 -
仰角
指示角度までの差は、度です。なので、近い候補は回と回です。回転量はそれぞれ度、度であり、度に近いのは度です。したがって、仰角は上方向へ度回転し、回転後の方向記憶領域の値は度になります。
誤りやすいポイント
- 指示角度との差をそのまま回転量にしないようにします。度や度は、度の整数倍ではありません。
- 指示された方位角・仰角を、そのまま方向記憶領域の値にしないようにします。モータの回転刻みによって指示角度と実際の到達角度に差が生じるため、実際の回転後の角度を記憶します。
- 回転量は、差を小数第2位に丸めるのではなく、度の整数倍のうち指示角度との差が最小になるものを選びます。
FAQ
Q: なぜ方位角の回転量を度にできないのですか?
A: モータは度単位で回転するためです。度はその整数倍ではなく、近い回転量の度が選ばれます。
A: モータは度単位で回転するためです。度はその整数倍ではなく、近い回転量の度が選ばれます。
Q: なぜ方向記憶領域の方位角は度ではなく度なのですか?
A: 回転後の実際の向きを記憶するためです。指定された度に最も近い、到達可能な方位角が度です。
A: 回転後の実際の向きを記憶するためです。指定された度に最も近い、到達可能な方位角が度です。
Q: 方位角と仰角の回転方向は、どう判断しますか?
A: どちらも指示角度が現在の角度より大きいため、問題文で示された方向に従い、方位角は時計回り、仰角は上方向に回転します。
A: どちらも指示角度が現在の角度より大きいため、問題文で示された方向に従い、方位角は時計回り、仰角は上方向に回転します。
関連キーワード: ステッピングモータ、角度分解能、量子化、差分制御、丸め処理
設問2:天体望遠鏡のソフトウェア設計について、(1)、(2)に答えよ。
設問2(1)
問題文を見る図5に示す天体望遠鏡のタスク構成図中のh~kに入れる適切なタスク名を答えよ。


模範解答
h:モード管理
i:初期調整モード
j:観測モード
k:向き制御
解説
解答の導き方
図5の各枠がどのタスクかは、表3の機能概要と、図5でどのタスクとつながっているかを照らし合わせて判断します。
まずhです。図5では、hは「GPS」と「USB通信」の間にあり、右側のiとjの両方へ線が伸びています。表3の「モード管理」には、PCから向き制御要求や微動要求を受信すると「モードに対応したタスクに振り分ける」とあります。USB通信から受けた要求を二つのモードのタスクへ振り分ける位置に当たるので、hには「モード管理」が入ります。
次にiとjです。この二つは初期調整モードと観測モードのタスクで、手掛かりは「センサ」とのつながりです。初期調整モードの手順②では、天体望遠鏡は「方位角センサ及び仰角センサを使用して角度を計測しながら」向きを合わせます。一方、観測モードの手順②では、「方向記憶領域の値と、指示された向きデータとの差分を変位量として」回転するので、センサで測る必要がありません。図5でセンサにつながっているのは上段のiだけなので、iが「初期調整モード」、センサにつながらない下段のjが「観測モード」です。
最後にkです。kにはiとjの両方から線が伸びています。表3の「向き制御」は、向き制御要求を受信すると方位角モータと仰角モータを制御して天体望遠鏡を回転させるタスクで、どちらのモードでも望遠鏡を回転させるときに使います。よって、kには「向き制御」が入ります。
誤りやすいポイント
- 向き制御につながっていることを根拠に、jを観測モードと決めてしまうことです。iとjはどちらも向き制御につながっているので、区別の手掛かりにはなりません。
- 初期調整モードと観測モードの違いを見落とすことです。初期調整モードはセンサで角度を測りながら向きを合わせ、観測モードは方向記憶領域の値との差分で回転させます。
- kを「センサ」と取り違えることです。センサは現在の向きを測定するタスクで、モータを動かして回転させるのは向き制御タスクです。
FAQ
Q: 観測モードではセンサを使わないのですか?
A: 本文の観測モードの手順では、方向記憶領域の値と指示された向きとの差分を変位量として回転させ、回転後に方向記憶領域の値を更新します。センサで角度を測る手順は書かれていません。
A: 本文の観測モードの手順では、方向記憶領域の値と指示された向きとの差分を変位量として回転させ、回転後に方向記憶領域の値を更新します。センサで角度を測る手順は書かれていません。
Q: 初期調整モードと観測モードの両方が向き制御につながるのはなぜですか?
A: どちらのモードでも天体望遠鏡を回転させる必要があるためです。初期調整モードでは基準天体に向け、観測モードでは観測天体に向けて追尾します。
A: どちらのモードでも天体望遠鏡を回転させる必要があるためです。初期調整モードでは基準天体に向け、観測モードでは観測天体に向けて追尾します。
Q: モード管理タスクは、モータを直接動かしますか?
A: いいえ。表3では、モード管理タスクは要求をモードに対応したタスクへ振り分けます。モータの制御は向き制御タスクの役割です。
A: いいえ。表3では、モード管理タスクは要求をモードに対応したタスクへ振り分けます。モータの制御は向き制御タスクの役割です。
関連キーワード: タスク構成、タスク間通信、状態管理、センサ制御、モータ制御
設問2(2)
問題文を見る向き制御タスクの設計に関する次の記述中のl~nに入れる適切な字句、又は数値を答えよ。nは小数第2位を四捨五入して、小数第1位まで求めよ。ここで、方位角モータ、仰角モータは駆動パルスを同時に出力し、同時に回転できるものとする。
向き制御タスクが向き制御要求を受けると、方位角モータ、仰角モータに出力するパルス数及びlを1ミリ秒ごとに実行されるタイマ割込みハンドラに設定する。タイマ割込みハンドラは、各モータに毎秒200パルス出力するために、m回の割込みごとに、各モータに1パルス出力し、これを必要回数繰り返す。方位角を32.43度、仰角を15.33度変位させる向き制御要求を受信した場合、この方法で天体望遠鏡の向きの変更を完了するまでに最短でn秒かかることになる。
模範解答
l:回転方向
m:5
n:5.4
解説
解答の導き方
この設問では、向き制御タスクがモータを動かすために設定する情報と、指定された角度だけ回転するのに必要な時間を求めます。
まず、方位角モータと仰角モータは、駆動パルスを出力することで回転します。ただし、同じパルス数でも回転方向によって天体望遠鏡の向きは異なります。そのため、タイマ割込みハンドラには、モータごとのパルス数だけでなく、どちら向きに回転させるかも設定する必要があります。したがって、lは「回転方向」です。
次に、タイマ割込みハンドラの実行間隔とパルス出力間隔を考えます。問題文では、ハンドラは1ミリ秒ごとに実行され、モータには毎秒200パルスを出力します。1秒間にはタイマ割込みが1,000回発生するため、200パルスを出力するには、割込み5回ごとに1パルスを出力します。よって、mは5です。
最後に、指定角度を回転するのに必要なパルス数を求めます。表1では、1パルスで0.03度回転するとされています。
方位角モータに必要なパルス数は、
です。仰角モータに必要なパルス数は、
です。
方位角モータと仰角モータは同時に回転できるため、両方の所要時間を足すのではなく、パルス数が多い方の完了時間を考えます。最も多くパルスが必要なのは方位角モータで、1パルスごとに5回のタイマ割込み、すなわち5ミリ秒かかります。したがって、完了までの時間は、
です。小数第2位を四捨五入して小数第1位まで求めると、nは5.4秒です。
誤りやすいポイント
- パルス数だけでなく、モータをどちら向きに回転させるかも制御に必要です。
- 1ミリ秒ごとの割込み回数と、モータへパルスを出力する回数は同じではありません。200パルス毎秒にするには、割込み5回ごとに1パルスを出力します。
- モータは同時に回転するため、方位角モータと仰角モータの所要時間を足しません。必要パルス数が多い方の完了時間が全体の所要時間です。
FAQ
Q: 1パルスの出力にかかる時間は、なぜ5ミリ秒なのですか?
A: タイマ割込みは1ミリ秒ごとに実行され、5回の割込みごとに1パルスを出力するためです。
A: タイマ割込みは1ミリ秒ごとに実行され、5回の割込みごとに1パルスを出力するためです。
Q: 方位角モータと仰角モータのパルス数を合計しないのはなぜですか?
A: 問題文では両モータが同時に駆動できるためです。完了時間は、必要パルス数の多い方のモータを基準にします。
A: 問題文では両モータが同時に駆動できるためです。完了時間は、必要パルス数の多い方のモータを基準にします。
Q: 回転方向は、どの情報から決めますか?
A: 現在の向きと指示された向きとの差分から、方位角モータと仰角モータそれぞれの回転方向を決めます。
A: 現在の向きと指示された向きとの差分から、方位角モータと仰角モータそれぞれの回転方向を決めます。
関連キーワード: タイマ割込み、ステッピングモータ、駆動パルス、回転方向、並列制御
設問3:観測モードにおいて、振動などによって天体望遠鏡の向きが変わり、向き制御が正常に行えなくなったことを検出するために、向き異常検出タスクを天体望遠鏡に追加する。
・向き異常検出タスクは、観測システムが観測モードになると起動される。向き異常を検出すると、モード管理タスクに向き異常検出通知を送信した後、停止する。
・モード管理タスクは向き異常検出通知を受信すると、PCに向き異常検出メッセージを送信し、天体望遠鏡は初期調整モードに移行する。
・向き異常の判定は、方向記憶領域の値とセンサタスクから受信した向きデータとを1秒ごとに比較し、その差が定められたしきい値以内かどうかで決定する。
・観測モードタスクが天体望遠鏡の向きを制御する際は、(ア)向き異常検出タスクに異常検出停止要求を送信して向き異常検出処理を停止し、向きの制御が完了したら異常検出開始要求を送信して再開する。
設問3(1)
問題文を見る下線(ア)の処理を行うのは、向き異常を誤検出してしまうことを防止するためであるが、向き異常検出処理を停止しない場合、なぜ向き異常を誤検出してしまうのか。55字以内で述べよ。
模範解答
モータ回転中は、方向記憶領域の値が更新されないので、センサからの読出し値との間にずれが生じるから
解説
解答の導き方
-
向き異常検出タスクは、方向記憶領域の値とセンサから受け取った向きデータを「1秒ごとに比較」します。つまり、記憶された向きと実際にセンサが測定した向きが異なると、向き異常と判定される可能性があります。
-
一方、観測モードでは、天体望遠鏡を回転させた後に「方向記憶領域の値を更新する」手順になっています。そのため、モータが回転している途中は、センサの値が変化しても、方向記憶領域には回転前の値が残っています。
-
この間に異常検出処理が動くと、正常なモータ回転によって生じた一時的な差を、向き異常による差と区別できません。差が判定のしきい値を超えれば、異常ではないのに向き異常として検出してしまいます。そこで、向きの制御中は異常検出処理を停止し、制御後に再開します。
誤りやすいポイント
- モータの回転中にセンサの値が変わること自体を、異常の証拠と考えてしまうこと。正常な向き制御でもセンサの値は変化します。
- 方向記憶領域の値も、モータの回転と同時に逐次更新されると考えてしまうこと。本文では、更新は制御後とされています。
- 異常検出処理を停止する理由を、センサの測定精度の問題と捉えること。問題となるのは、回転中のセンサ値と更新前の記憶値との一時的なずれです。
FAQ
Q: 向き制御が終わった後も、異常検出処理を停止したままにする必要がありますか?
A: いいえ。向き制御が完了して方向記憶領域が更新された後は、センサ値との比較を再開します。
A: いいえ。向き制御が完了して方向記憶領域が更新された後は、センサ値との比較を再開します。
Q: モータが動いているときは、必ず向き異常と判定されますか?
A: 必ずではありません。ただし、回転中に生じる差が判定のしきい値を超えると、正常な制御中でも誤検出につながります。
A: 必ずではありません。ただし、回転中に生じる差が判定のしきい値を超えると、正常な制御中でも誤検出につながります。
Q: 異常検出タスクは、何と何を比較しますか?
A: 方向記憶領域の値と、センサタスクから受信した向きデータです。
A: 方向記憶領域の値と、センサタスクから受信した向きデータです。
関連キーワード: センサフィードバック、状態管理、データ整合性、タスク同期、誤検出
設問3(2)
問題文を見る向き異常検出タスクが停止状態にあるとき、観測モードタスクが異常検出停止要求を送信する場合がある。それはどのような条件で発生するか。60字以内で述べよ。
模範解答
向き異常検出タスクが、向き異常検出通知を送信するのと同時に、観測モードタスクが向き制御要求を受信した場合
解説
解答の導き方
向き異常検出タスクは、異常を検出すると「モード管理タスクに向き異常検出通知を送信した後、停止する」とあります。つまり、通知を送った直後には、タスクがすでに停止状態になっている可能性があります。
一方、観測モードタスクは、天体望遠鏡の向きを制御するとき、誤検出を避けるために向き異常検出タスクへ異常検出停止要求を送ります。向き異常検出通知を受けたモード管理タスクが初期調整モードへ切り替える処理と、観測モードタスクが向き制御要求を処理するタイミングが重なると、異常検出タスクが停止した後でも、観測モードタスクが停止要求を送ることがあります。
したがって、向き異常検出タスクが向き異常検出通知を送信するタイミングと、観測モードタスクが向き制御要求を受信するタイミングが重なる場合が該当します。
誤りやすいポイント
- 向き異常検出タスクが停止した後は、観測モードタスクから停止要求が送られないと思い込むことです。別々のタスクが並行して動作するため、要求を送る処理とタスクの停止が重なる場合があります。
- 向き異常検出通知を受信した瞬間に、観測モードタスクも必ず停止すると考えることです。モード管理タスクによるモード変更と、観測モードタスクによる要求処理には、処理のタイミング差が生じます。
- 異常検出停止要求を送る目的と、停止状態でも要求が送られる条件を混同することです。前者は向き制御中の誤検出防止、後者はタスク間の処理タイミングの重なりに関する問いです。
FAQ
Q: なぜ向き制御中に異常検出処理を止めるのですか?
A: 制御によって望遠鏡の向きが変化している間にセンサの値と方向記憶領域の値を比較すると、正常な制御による差を異常と判定するおそれがあるためです。
A: 制御によって望遠鏡の向きが変化している間にセンサの値と方向記憶領域の値を比較すると、正常な制御による差を異常と判定するおそれがあるためです。
Q: 異常検出タスクが停止していても、観測モードタスクが停止要求を送るのはなぜですか?
A: 観測モードタスクは向き制御要求を受信すると停止要求を送る手順になっているためです。異常検出通知を送ったタスクの停止と、向き制御要求の受信がほぼ同時に起きると、停止済みのタスクに停止要求が送られる場合があります。
A: 観測モードタスクは向き制御要求を受信すると停止要求を送る手順になっているためです。異常検出通知を送ったタスクの停止と、向き制御要求の受信がほぼ同時に起きると、停止済みのタスクに停止要求が送られる場合があります。
Q: この問題では、モード変更よりもタスク間のタイミングが重要なのですか?
A: はい。通知を受けてモード管理タスクがモードを変更する処理と、観測モードタスクが向き制御要求を処理するタイミングが重なることがポイントです。
A: はい。通知を受けてモード管理タスクがモードを変更する処理と、観測モードタスクが向き制御要求を処理するタイミングが重なることがポイントです。
関連キーワード: タスク間通信、並行処理、状態遷移、競合状態



