応用情報技術者 2023年 秋期 午後 問07
トマトの自動収穫を行うロボットに関する次の記述を読んで、設問に答えよ。
G社は、温室で栽培されているトマトの自動収穫を行うロボット(以下、収穫ロボットという)を開発している。収穫ロボットの外観を図1に、収穫ロボットのシステム構成を図2に、収穫ロボットの主な構成要素を表1に、収穫ロボットの状態遷移の一部を図3に示す。




〔収穫ロボットの動作概要〕
収穫ロボットの動作概要を次に示す。
・収穫ロボットは、管理者スマホから管理サーバを介して収穫開始の指示を受けると、状態を待機状態から開始/終了状態に遷移させ、あらかじめ管理サーバから設定された経路(待機位置→収穫開始位置→収穫終了位置→待機位置)に沿って温室内を50cm/秒の速度で移動を開始する。
・待機位置から収穫開始位置まで移動すると、状態を検出中状態に遷移させ、認識用カメラで撮影したトマトの画像の解析を行いながら移動を続ける。収穫に適したトマトを検出すると、移動を停止して状態を収穫中状態に遷移させ、収穫を行う。
・認識ユニットの解析結果から、ハンドを収穫対象のトマトに近づけ、近接カメラで撮影した画像でハンドの位置を補正して収穫を行う。
・ハンドには圧力センサーが取り付けられており、トマトを傷つけないように把持できる。トマトを把持した後、ハンドの先端にあるカッターでトマトの柄の部分を切断して収穫する。
・トマトを柄から切り離して把持できた場合、収穫成功と判断し、状態を積載中状態に遷移させ、収穫したトマトを近接カメラで撮影した画像から判定した収穫トレーの空き領域に載せる。
・トマトを収穫トレーに載せた後、更に収穫に適したトマトが残っており、かつ、収穫トレーに空き領域が残っていれば、状態を積載中状態から収穫中状態に遷移させ、検出している全てのトマトを収穫するか収穫トレーの空き領域がなくなるまで収穫動作を繰り返す。
・トマトを柄から切り離すことができなかった場合や切り離した後にハンドから落とした場合などは収穫失敗と判断し、収穫中状態のまま、検出している次のトマトの収穫を行う。
・検出している全てのトマトに対して収穫動作を終えると、収穫を終えたときの状態と収穫ロボットの経路上の位置、収穫トレーの空き領域の状況から次の状態遷移先と動作を決定する。
・収穫終了位置で、収穫に適したトマトを検出していない場合は、収穫を終了し、待機位置へ移動する。
・収穫ロボットは動作状況や収穫状況などの情報を定期的に管理サーバに送信する。
・管理者は管理者スマホを使用して管理サーバに保管されている情報を参照することができる。
・収穫ロボットが移動中に、台車の先頭に取り付けられた超音波センサーが、進路上1m以内の距離にある障害物を検知すると移動を停止し、状態を異常状態に遷移させ、管理サーバを介して管理者スマホに警告メッセージを送信する。
〔アームの関節部について〕
アームには、軸1、軸2、軸3の三つの回転軸があり、それぞれの回転軸にはサーボモーターが使用されている。サーボモーターはPWM方式で、入力する制御パルスのデューティ比によって回転する角度を制御する。
サーボモーターの仕様を表2に、各サーボモーターの制御角とアームの可動範囲を図4に示す。サーボモーターは、制御パルス幅1.0ミリ秒の場合、制御角が-90度(反時計回りに90度)に、制御パルス幅11.0ミリ秒の場合、制御角が90度(時計回りに90度)になるように回転する。


〔制御部のソフトウェア構成について〕
収穫ロボットの制御部では、リアルタイムOSを使用する。制御部の主なタスクの処理概要を表3に示す。

設問1:収穫ロボットの状態遷移について答えよ。
(1)収穫終了位置まで移動したときに開始/終了状態への状態遷移が発生するのはどのような場合か。25字以内で答えよ。
模範解答
収穫に適したトマトを検出していない場合
解説
解答の論理構成
- まず設問は「収穫終了位置まで移動したとき」に注目しています。
- 【問題文】には該当する条件が次のように明示されています。
「収穫終了位置で、収穫に適したトマトを検出していない場合は、収穫を終了し、待機位置へ移動する。」
- ここで「収穫を終了し」という表現は、図3の状態遷移でいう「開始/終了」状態へ戻ることを意味します。
- したがって、収穫終了位置に到達しても “収穫に適したトマト” が 存在しない と判断されたときにのみ、検出中や収穫中を経由せずに「開始/終了」状態へ遷移します。
この流れより、模範解答で示された
「収穫に適したトマトを検出していない場合」
が正答となります。
「収穫に適したトマトを検出していない場合」
が正答となります。
誤りやすいポイント
- 「収穫トレーが満杯になったら終了」と勘違いする。実際はトレーが満杯でも検出済みトマトがあれば積載中→収穫中のループが続く場合がある。
- 「異常状態から回復した直後」など別の場面で開始/終了へ遷移すると誤解する。異常状態の復帰先は図3に示されるように検出中であり、開始/終了ではない。
- 「収穫失敗が続いたら終了」と読み違える。失敗時は収穫中のまま次のトマトを処理する。
FAQ
Q: 収穫終了位置でトマトを検出したがトレーに空きがない場合はどうなりますか?
A: トレーが満杯でも検出済みのトマトがある限り収穫中へ遷移し、何も収穫できないと判断した時点で次の動作が決まります。
A: トレーが満杯でも検出済みのトマトがある限り収穫中へ遷移し、何も収穫できないと判断した時点で次の動作が決まります。
Q: 超音波センサーが障害物を検知した場合、開始/終了状態には戻りますか?
A: いいえ。「進路上1m以内の距離にある障害物を検知すると…状態を異常状態に遷移」し、管理者による対応後に検出中へ復帰します。
A: いいえ。「進路上1m以内の距離にある障害物を検知すると…状態を異常状態に遷移」し、管理者による対応後に検出中へ復帰します。
Q: 管理者スマホから強制的に作業を止めた場合も開始/終了状態ですか?
A: 管理者指示で停止した場合は制御部が状態を管理するため、開始/終了か待機かなど指示内容に応じて遷移先が決まります。
A: 管理者指示で停止した場合は制御部が状態を管理するため、開始/終了か待機かなど指示内容に応じて遷移先が決まります。
関連キーワード: 状態遷移、有限状態機械、センサー制御、ロボットアーム
設問1:収穫ロボットの状態遷移について答えよ。
(2)収穫終了位置で、収穫に適した2個のトマトを検出した。2個目のトマトの把持に失敗したとき、1個目のトマトの収穫を開始した時点から2個目のトマトの把持に失敗して次の動作に移るまでの状態遷移として、適切なものを解答群の中から選び記号で答えよ。
解答群
ア:収穫中状態→積載中状態→開始/終了状態
イ:収穫中状態→積載中状態→収穫中状態→開始/終了状態
ウ:収穫中状態→積載中状態→収穫中状態→積載中状態→開始/終了状態
エ:収穫中状態→積載中状態→収穫中状態積載中状態→収穫中状態→開始/終了状態
模範解答
イ
解説
解答の論理構成
-
収穫動作が成功したとき
- 問題文には「トマトを柄から切り離して把持できた場合、収穫成功と判断し、状態を積載中状態に遷移させ」 とあります。
- したがって1個目を正常に収穫した直後、収穫中状態 → 積載中状態 へ遷移します。
-
次に何を行うか
- 「トマトを収穫トレーに載せた後、更に収穫に適したトマトが残っており、かつ、収穫トレーに空き領域が残っていれば、状態を積載中状態から収穫中状態に遷移させ」 と記載されています。
- まだ2個目のトマトが残っておりトレーも空いているため、積載中状態 → 収穫中状態 に戻ります。
-
収穫失敗時の扱い
- 2個目の把持に失敗したケースについて「収穫失敗と判断し、収穫中状態のまま、検出している次のトマトの収穫を行う。」とあります。
- 今回は検出済みトマトが2個しかなく、すでに全ての収穫動作を終えたので次はありません。
-
全トマト処理後の遷移
- 「検出している全てのトマトに対して収穫動作を終えると…次の状態遷移先と動作を決定する。」
- 収穫終了位置においては図3の遷移矢印から 収穫中状態 → 開始/終了状態 が選択されます。
-
以上を順に並べると
収穫中状態 → 積載中状態 → 収穫中状態 → 開始/終了状態 となり、解答群「イ」に該当します。
誤りやすいポイント
- 把持に失敗したときに 積載中状態 に進むと誤解する
(失敗時は「収穫中状態のまま」なので積載には遷移しないことを要確認)。 - 成功後にすぐ 開始/終了状態 へ戻ると思ってしまう
(残トマトとトレー空きがあれば一度 収穫中状態 に戻るループが入る)。 - 図3の矢印を追わず文章だけで判断し順序を取り違える。
FAQ
Q: 失敗した後に改めて 検出中状態 に戻ることはありますか?
A: 今回の条件(検出済みトマトが2個のみ)では全作業が終了するため 検出中状態 には戻りません。追加のトマトを再探索する必要があれば戻る可能性があります。
A: 今回の条件(検出済みトマトが2個のみ)では全作業が終了するため 検出中状態 には戻りません。追加のトマトを再探索する必要があれば戻る可能性があります。
Q: 収穫成功後にトレーが満杯ならどこへ遷移しますか?
A: 「収穫トレーの空き領域がなくなるまで収穫動作を繰り返す」とあるため、満杯の場合は 積載中状態 から 開始/終了状態 等へ移行し、経路や空き状況に応じた次動作が決定されます。
A: 「収穫トレーの空き領域がなくなるまで収穫動作を繰り返す」とあるため、満杯の場合は 積載中状態 から 開始/終了状態 等へ移行し、経路や空き状況に応じた次動作が決定されます。
Q: 収穫ロボットが異常停止した場合、この問題の遷移は変わりますか?
A: 超音波センサーが障害物を検知すると「状態を異常状態に遷移」しますが、本問は障害物なしを前提としているため異常遷移は発生しません。
A: 超音波センサーが障害物を検知すると「状態を異常状態に遷移」しますが、本問は障害物なしを前提としているため異常遷移は発生しません。
関連キーワード: 状態遷移、ロボットアーム、フェイルセーフ、リアルタイムOS, センサー制御
設問2:制御部のタスクについて答えよ。
(1)認識タスクから収穫トレーの空き領域の情報を受け取ったとき、メインタスクが開始/終了状態へ遷移する条件を20字以内で答えよ。
模範解答
収穫トレーに空き領域がない
解説
解答の論理構成
- 【問題文】には、収穫後の状態遷移について
「検出している全てのトマトに対して収穫動作を終えると、収穫を終えたときの状態と収穫ロボットの経路上の位置、収穫トレーの空き領域の状況から次の状態遷移先と動作を決定する。」
と記載されています。 - さらに、収穫動作を続ける条件として
「更に収穫に適したトマトが残っており、かつ、収穫トレーに空き領域が残っていれば、状態を積載中状態から収穫中状態に遷移させ、…収穫動作を繰り返す。」
とあります。 - 逆に言えば、
・収穫に適したトマトが残っていない
または
・「収穫トレーに空き領域が残って」いない
のいずれかなら、収穫動作を続けられません。 - このときメインタスクは収穫動作を終了し、状態遷移図(図3)で「検出中」「収穫中」から左下矢印で戻る「開始/終了」へ遷移します。
- 設問は「認識タスクから収穫トレーの空き領域の情報を受け取ったとき」に限定しているため、遷移理由は後者――すなわち「空き領域がない」ことが決定打になります。
以上より、解答は
収穫トレーに空き領域がない
収穫トレーに空き領域がない
誤りやすいポイント
- 「収穫に適したトマトが残っていない」と勘違いし、空き領域の条件を忘れる。
- 状態遷移図だけを見て「検出中から開始/終了に戻る」と早合点し、積載中→収穫中の条件文を見落とす。
- 「収穫トレーが満杯」と口語表現を書いてしまい、原文の「空き領域」という語を使わず減点。
FAQ
Q: 収穫トレーが満杯でも、収穫に適したトマトが残っていなければ同じですか?
A: はい。どちらの場合も収穫を継続できないためメインタスクは「開始/終了」へ戻ります。設問は空き領域情報に焦点を当てているので、満杯かどうかが答えになります。
A: はい。どちらの場合も収穫を継続できないためメインタスクは「開始/終了」へ戻ります。設問は空き領域情報に焦点を当てているので、満杯かどうかが答えになります。
Q: 認識タスクが空き領域を通知するタイミングは決まっていますか?
A: 【表3】「認識」タスクの説明にあるとおり、近接カメラ画像から空き領域を求め次第、アーム制御タスクとメインタスクに通知します。
A: 【表3】「認識」タスクの説明にあるとおり、近接カメラ画像から空き領域を求め次第、アーム制御タスクとメインタスクに通知します。
Q: 空き領域がなくなった時点でロボットはどこへ向かいますか?
A: 経路上の現在位置に応じて判断しますが、通常は「待機位置」へ戻り、管理サーバに状況を報告します。
A: 経路上の現在位置に応じて判断しますが、通常は「待機位置」へ戻り、管理サーバに状況を報告します。
関連キーワード: 状態遷移、リアルタイムOS, タスク間通信、センサーフュージョン
設問2:制御部のタスクについて答えよ。
(2)認識タスクがメインタスクに収穫に適したトマトを検出したことを通知するときに合わせて通知する必要がある情報を答えよ。
模範解答
トマトの個数
解説
解答の論理構成
-
プログラム上の情報フローを整理
表3の認識タスクには
「“収穫に適したトマトを検出したことをメインタスクに通知する。”」
とあります。つまりメインタスクは、この通知を受けて“次にどう動くか”を判断します。 -
メインタスクが判断する条件を抽出
動作概要には
「“検出している全てのトマトを収穫するか収穫トレーの空き領域がなくなるまで収穫動作を繰り返す。”」
と記載されています。ここで必要になるのは、 ・検出済みトマトの総量
・収穫トレーの空き領域
の比較です。後者は別途「収穫トレーの空き領域の情報」が認識タスクから他タスクへ通知されると明記されています(表3)。 -
まだ通知されていない情報を特定
トレーの空き容量は既に通知対象なので、メインタスクが意思決定に使う残りの材料は「検出済みトマトが何個あるか」です。 -
結論
したがって、認識タスクは「収穫に適したトマトを検出した」というイベントと同時に、その“トマトの個数”をメインタスクへ渡す必要があります。
誤りやすいポイント
- 「次に収穫する1個の位置情報」を答えてしまう
→ 位置はアーム制御タスク向けであってメインタスクの判断材料ではありません。 - 「収穫トレーの空き領域」を再掲してしまう
→ これは既に別項で通知されることが表3に書かれています。 - “個体識別ID”などと深読みする
→ 動作概要では個体トラッキングよりも“個数と残容量の比較”が重視されています。
FAQ
Q: なぜメインタスクは個数だけで十分なのですか?
A: メインタスクは「収穫を続けるか、移動するか」を決めるだけなので、細かな座標は不要です。座標はアーム制御タスクが扱います。
A: メインタスクは「収穫を続けるか、移動するか」を決めるだけなので、細かな座標は不要です。座標はアーム制御タスクが扱います。
Q: 残り個数が0になった場合、どのように動作が変わりますか?
A: 「収穫に適したトマトを検出していない場合は、収穫を終了し、待機位置へ移動する。」(動作概要)とある通り、検出個数0なら収穫終了フローに入ります。
A: 「収穫に適したトマトを検出していない場合は、収穫を終了し、待機位置へ移動する。」(動作概要)とある通り、検出個数0なら収穫終了フローに入ります。
Q: トレーの空き領域は誰が管理していますか?
A: 認識タスクが近接カメラ画像から取得し、「アーム制御タスク」と「メインタスク(a部分)」へ通知します(表3)。
A: 認識タスクが近接カメラ画像から取得し、「アーム制御タスク」と「メインタスク(a部分)」へ通知します(表3)。
関連キーワード: デューティ比、状態遷移、タスク間通信、センサ入力、走行制御
設問2:制御部のタスクについて答えよ。
(3)表3中のaに入れるタスク名を、表3中のタスク名で答えよ。
模範解答
a:メイン
解説
解答の論理構成
- 【問題文】には、状態遷移を決める判断材料として
「“収穫ロボットの経路上の位置、収穫トレーの空き領域の状況から次の状態遷移先と動作を決定する。”」
と記載されています。
・“状態遷移先と動作を決定”するのは、表3で “収穫ロボットの状態管理を行う。” と定義されている「メイン」タスクの役割です。 - 表3の「認識」タスクには
「“近接カメラで撮影した収穫トレーの画像から収穫トレーの空き領域の情報をアーム制御タスクとaタスクに通知する。”」
との記述があります。 - 上記 1. の理由から、空き領域情報は状態遷移を行う「メイン」タスクへ渡る必要があります。
- よって a に入るタスク名は「メイン」と判断できます。
誤りやすいポイント
- 空き領域情報を「無線LAN通信」タスクへ通知すると誤解する
→ 通信タスクは外部への送受信が目的で、内部の状態遷移には直接関与しません。 - 「アーム制御」タスク以外はハードウェア制御のみと決めつけ、メインタスクが情報を受け取ると気付かない
→ 表3を読む際に各タスクの役割分担を整理しておくことが重要です。 - “状態遷移”という単語を見落とし、台車制御タスクと関連付けてしまう
→ 状態管理はメインタスクの専任機能である点を再確認しましょう。
FAQ
Q: なぜ「メイン」タスクが収穫トレーの空き領域を知る必要があるのですか?
A: 【問題文】にある通り、次の状態遷移先と動作を決める際に “収穫トレーの空き領域の状況” を判断材料にしているためです。
A: 【問題文】にある通り、次の状態遷移先と動作を決める際に “収穫トレーの空き領域の状況” を判断材料にしているためです。
Q: 「台車制御」タスクが空き領域情報を持っていても問題ないのでは?
A: 台車制御タスクの職務は “台車の走行制御” と “超音波センサーの検知結果に従って台車を停止” することで、収穫動作や状態遷移の判断は行いません。
A: 台車制御タスクの職務は “台車の走行制御” と “超音波センサーの検知結果に従って台車を停止” することで、収穫動作や状態遷移の判断は行いません。
Q: タスク間でどのように情報を渡すのですか?
A: リアルタイムOS上でメッセージキューやイベントフラグなどのタスク間通信機構を使うのが一般的です。本問題では詳細実装は示されませんが、目的は「メイン」タスクが判断材料を受け取ることです。
A: リアルタイムOS上でメッセージキューやイベントフラグなどのタスク間通信機構を使うのが一般的です。本問題では詳細実装は示されませんが、目的は「メイン」タスクが判断材料を受け取ることです。
関連キーワード: リアルタイムOS, タスク間通信、状態遷移、センサー情報共有、モジュール分割
設問3:
アームの制御について、アームの各関節部の軸に制御パルスが図5のように入力された場合、アームはどのような姿勢に変化するか。解答群の中から選び記号で答えよ。

解答群
ア:軸1が-54度、軸2が5度、軸3が-72度変化した姿勢
イ:軸1が0度、軸2が-54度、軸3が72度変化した姿勢
ウ:軸1が0度、軸2が72度、軸3が-54度変化した姿勢
エ:軸1が5度、軸2が-54度、軸3が72度変化した姿勢
模範解答
ウ
解説
解答の論理構成
-
制御角の決定方法
【問題文】には「サーボモーターは、制御パルス幅1.0ミリ秒の場合、制御角が-90度…11.0ミリ秒の場合、制御角が90度…」とあります。
よって制御角は制御パルス幅 〔ms〕と次式で一意に対応します。これは幅が 増える毎に だけ時計回りに回転する線形関係です。 -
図5に示された各軸の制御パルス幅
・軸1:高レベル区間が「6ミリ秒」
・軸2:高レベル区間が「10ミリ秒」
・軸3:高レベル区間が「3ミリ秒」 -
各軸の制御角計算
(1) 軸1:
(2) 軸2:
(3) 軸3:
-
解答群との照合
「ウ:軸1が0度、軸2が72度、軸3が-54度変化した姿勢」が計算結果と完全一致します。
したがって正答は【ウ】です。
誤りやすいポイント
- パルス幅ではなくデューティ比で計算してしまう
本問は20 ミリ秒という【PWM サイクル】が示されていますが、角度は高レベル時間そのものに比例します。 - 線形補間の起点を と誤認
起点は「1.0 ミリ秒=-90 度」です。 をそのまま で換算すると を引き忘れます。 - 単位の取り違え
角度を「変位量」ではなく「絶対角度」と混同し、符号を逆にしてしまうことがあります。
FAQ
Q: 20 ミリ秒周期を変えたら角度も変わりますか?
A: いいえ。角度は高レベル区間の長さで決まり、周期長(低レベル区間を含む)は影響しません。
A: いいえ。角度は高レベル区間の長さで決まり、周期長(低レベル区間を含む)は影響しません。
Q: 11.0 ミリ秒以上のパルス幅を与えた場合どうなりますか?
A: 仕様上の上限が「11.0 ミリ秒~90 度」です。それ以上を与えるとサーボの機械的限界を超える恐れがあり、安全設計では禁止します。
A: 仕様上の上限が「11.0 ミリ秒~90 度」です。それ以上を与えるとサーボの機械的限界を超える恐れがあり、安全設計では禁止します。
Q: 複数軸に同じ幅のパルスを同時に送ると干渉しますか?
A: PWM は各軸独立チャンネルで生成されるため干渉しません。ただし電源ラインが共通の場合はサージ対策が必要です。
A: PWM は各軸独立チャンネルで生成されるため干渉しません。ただし電源ラインが共通の場合はサージ対策が必要です。
関連キーワード: PWM, サーボモーター、制御パルス幅、線形補間、角度変換
設問4:
障害物の検知について、収穫ロボットが直進中に、超音波センサーが正面の障害物を検知して、移動を停止したとき、超音波センサーが超音波を出力してから検知に掛かった時間は最大何ミリ秒か。超音波が反射して戻ってくるまでに収穫ロボットが移動する距離を考慮して答えよ。ここで、音速は340m/秒とし、障害物は検知した位置から動かず、ソフトウェアの処理時間は考えないものとする。答えは小数第3位を切り上げ、小数第2位まで求めよ。
模範解答
5.90
解説
解答の論理構成
-
障害物を検知する条件
【問題文】では
・「進路上1m以内の距離にある障害物を検知すると」
とあり、超音波センサーは“現在のロボット位置”から障害物までの距離がちょうど 1 m になった瞬間に検知します。 -
ロボットの走行速度
【問題文】に
・「温室内を50cm/秒の速度で移動」
とあるので、速度 は
です。 -
「超音波が戻ってくるまでにロボットが前進する距離」を含めた式
超音波を送信してから受信するまでの時間を s とします。
その間にロボットが前進する距離は m。
よって送信時点での障害物との距離 はです。 -
超音波の往復時間
超音波は往復で m を音速 で伝搬します。 -
の解に整理できます(両辺に を掛けて導出)。
数値を代入すると -
ミリ秒への換算と指定された丸め「小数第3位を切り上げ、小数第2位まで」とあるので
5.8997 ms → 5.90 ms となります。
誤りやすいポイント
- 超音波の往復で「×2」を忘れ、 としてしまう。
- 速度「50cm/秒」を 50 m/s と誤変換する、もしくは 0.05 m/s と 1桁間違える。
- 「小数第3位を切り上げ」を四捨五入と混同し 5.90 ms ではなく 5.89 ms を書いてしまう。
- ロボット移動距離を考慮せず のまま解答する。
FAQ
Q: ロボットの移動距離を加味しないと大きな誤差になりますか?
A: 音速に比べて 0.50 m/s は非常に遅いので差は約 0.02 ms ですが、「最大時間」を問われているため無視できません。
A: 音速に比べて 0.50 m/s は非常に遅いので差は約 0.02 ms ですが、「最大時間」を問われているため無視できません。
Q: 切り上げ指示が無い場合はどう丸めれば良いですか?
A: 通常は四捨五入が多いですが、試験では必ず指示に従ってください。今回は「切り上げ」なので注意が必要です。
A: 通常は四捨五入が多いですが、試験では必ず指示に従ってください。今回は「切り上げ」なので注意が必要です。
Q: 往復時間に対してロボットが進む距離はどのくらいですか?
A: (約3 mm)です。
A: (約3 mm)です。
関連キーワード: 超音波センサー、音速、時間計測、距離推定


