令和5年度 秋期 応用情報技術者試験 午後問題 問7 トマト収穫ロボットの状態遷移設計
テクノロジ組込み・IoT
この問題は2023(R5)秋 応用情報技術者 午後に出題されたものです。出題時点の法令・制度に基づく内容のため、現行の内容と一致しない場合があります。
本ページの問題文・選択肢は、原本の体裁を Web 表示用に正規化しています(改行・記号・数式・図表参照の調整)。設問の趣旨および正解に影響する変更は加えていません。
学習ガイド
就農者の高齢化と労働力不足を背景に実用化が進むトマト自動収穫ロボットを題材に、要求仕様からソフトウェアの状態遷移を設計する問題です。ロボットが移動・検出・把持・収穫と状態を移す中で、収穫終了位置で開始/終了状態へ戻る条件や、2個目のトマトの把持に失敗したときの遷移系列を正確に追えるかが問われます。この記事では、把持成功と失敗で分岐する動作を一連のシナリオとして展開し、状態遷移図と照らしながら各設問の根拠を確認します。
この記事で押さえる論点
- 要求仕様から収穫ロボットの状態と遷移条件を読み取る
- 収穫終了位置での開始/終了状態への遷移が起きる条件を記述する
- 把持失敗時の状態遷移の系列を選択肢から特定する
- 例外(失敗)を含む一連の動作を状態遷移として追跡する
出題情報
- 出題
- 2023(R5)秋 応用情報技術者 午後 問7
- 配点
- 20点満点
- 模範解答
- 公表(設問ごとに掲載)
出題趣旨・採点講評(IPA 公表)
近年,就農者の高齢化と労働力不足に対応するため,農作業用ロボットの実用化が進んでいる。本問では,トマトの自動収穫を行うロボットを題材として,応用情報技術者に求められる,要求仕様への理解力,要求仕様に基づいてソフトウェアを設計する能力を問う。
問7では,トマトの自動収穫を行うロボットを題材に,要求仕様の理解,要求仕様に基づいたソフトウェア設計について出題した。全体として正答率は平均的であった。
問題本文
トマトの自動収穫を行うロボットに関する次の記述を読んで,設問に答えよ。
G社は,温室で栽培されているトマトの自動収穫を行うロボット(以下,収穫ロボットという)を開発している。収穫ロボットの外観を図1に,収穫ロボットのシステム構成を図2に,収穫ロボットの主な構成要素を表1に,収穫ロボットの状態遷移の一部を図3に示す。

図の説明テキスト
収穫ロボットの外観を示す模式図。台車の上に収穫トレーがあり、アームが付いている。アームの先にはハンドと近接カメラが配置されている。本体部分には認識用カメラと超音波センサーが付加されている。

図の説明テキスト
収穫ロボットのシステム構成図。管理者スマホと管理サーバが、収穫ロボットの無線LAN通信ユニットと通信を行う。収穫ロボット内には「制御部」があり、その中に無線LAN通信ユニット、アーム制御ユニット、認識ユニット、台車制御ユニットが含まれる。アーム制御ユニットはハンド、アーム、圧力センサーと接続されている。認識ユニットは近接カメラ、認識用カメラと接続されている。台車制御ユニットは超音波センサーと接続されている。

図の説明テキスト
表1 収穫ロボットの主な構成要素
| 構成要素名 | 機能概要 |
|---|---|
| 制御部 | ・収穫ロボット全体を制御する。 |
| アーム制御ユニット | ・アームとハンドによる収穫動作を制御する。 |
| 認識ユニット | ・認識用カメラで撮影した画像を処理する。 ・近接カメラで撮影した画像を処理する。 |
| 台車制御ユニット | ・台車の走行を制御する。 ・超音波センサーの検知結果を処理する。 |
| 無線LAN通信ユニット | ・制御部と管理サーバとの通信を制御する。 |

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

図の説明テキスト
表2 サーボモーターの仕様
| 項目 | 仕様 |
|---|---|
| PWM サイクル | 20 ミリ秒 |
| 制御パルス幅 | 1.0 ミリ秒〜11.0 ミリ秒 |
| 制御角 | -90 度〜90 度 |

図の説明テキスト
アームの関節部と各軸(軸1、軸2、軸3)の可動範囲を示す模式図。
- 軸1: ベース部分にあり、水平方向に回転する。0度から90度、-90度の方向が示されている。
- 軸2: アームの根本の関節で、垂直方向に回転する。0度から90度、-90度の方向が示されている。
- 軸3: アームの中間部の関節で、垂直方向に回転する。0度から90度、-90度の方向が示されている。
〔制御部のソフトウェア構成について〕
収穫ロボットの制御部では,リアルタイムOSを使用する。制御部の主なタスクの処理概要を表3に示す。

図の説明テキスト
表3 制御部の主なタスクの処理概要
| タスク名 | 処理概要 |
|---|---|
| メイン | ・収穫ロボットの状態管理を行う。 |
| アーム制御 | ・認識タスクからの情報を用いてアームとハンドを制御し,収穫対象のトマトを収穫する。 ・トマト収穫の成否をメインタスクに通知する。 ・認識タスクからの情報を用いてアームとハンドを制御し,収穫したトマトを収穫トレーの空き領域に載せる。 |
| 認識 | ・認識用カメラで撮影したトマトの画像を解析し,収穫に適したトマトを判定する。 ・収穫に適したトマトを検出したことをメインタスクに通知する。 ・収穫に適したトマトのうち1個を収穫するために必要な情報を,認識用カメラと近接カメラで撮影したトマトの画像から求め,アーム制御タスクに通知する。 ・近接カメラで撮影した収穫トレーの画像から収穫トレーの空き領域の情報をアーム制御タスクと a タスクに通知する。 |
| 台車制御 | ・メインタスクの指示に従って台車の走行制御を行う。 ・超音波センサーの検知結果に従って台車を停止させ,メインタスクに異常を通知する。 |
| 無線LAN通信 | ・管理サーバを介して受信した管理者スマホからの指示をメインタスクに通知する。 ・メインタスクの指示に従って収穫ロボットの動作状況を管理サーバに通知する。 |

図の説明テキスト
図5 サーボモーターへの入力制御パルスのタイミングチャート。横軸は時間で、各パルスの周期は20ミリ秒と示されている。軸1のパルス幅は6ミリ秒、軸2のパルス幅は10ミリ秒、軸3のパルス幅は3ミリ秒である。各軸において0と1の間でパルスが遷移する様子が描かれている。
設問と解答・解説
設問1
収穫ロボットの状態遷移について答えよ。
(1)
収穫終了位置まで移動したときに開始/終了状態への状態遷移が発生するのはどのような場合か。25字以内で答えよ。
模範解答
収穫に適したトマトを検出していない場合
採点基準(配点 2点)
知識・理解度(内容)(1点)
- 1点: 収穫に適したトマトを検出していない状態であることを正確に理解し記述している。
- 0点: 状態遷移の条件が正しく記述されていない(障害物や開始指示など誤った内容を含む)。
論理性(構造)(1点)
- 1点: 条件文として論理的かつ簡潔に表現されている。
- 0点: 表現が不明瞭である、または文脈として成り立っていない。
解説
解説
収穫ロボットの動作フローと状態遷移を正確に理解する問題です。
収穫終了位置まで移動した際、ロボットは対象となるトマトが存在するかどうかを確認します。このとき、収穫に適したトマトを検出していない場合は、それ以上収穫や積載の動作を行う必要がないため、直ちに「開始/終了状態」への状態遷移が発生します。
出題趣旨や講評にもある通り、「障害物を検知していない場合」や「管理者スマホから収穫開始の指示を受けた場合」といった解答は、状態遷移の契機や現在位置の状況を誤認しています。システムの動作位置と状態遷移の関係を正しく整理することが求められます。
高得点のポイント
- 現在位置(収穫終了位置)での確認対象が「トマトの有無」であることを正しく捉えていること。
- トマトを「検出していない」という条件が明確に記述されていること。
- 25字以内で簡潔にまとめられていること。
(2)
収穫終了位置で,収穫に適した2個のトマトを検出した。2個目のトマトの把持に失敗したとき,1個目のトマトの収穫を開始した時点から2個目のトマトの把持に失敗して次の動作に移るまでの状態遷移として,適切なものを解答群の中から選び記号で答えよ。
模範解答
選択肢イ: 収穫中状態→積載中状態→収穫中状態→開始/終了状態
配点 2点
解説
解説
収穫ロボットが2個のトマトを収穫する際の状態遷移を追う問題です。
- 1個目のトマトの収穫を開始すると収穫中状態になります。
- 1個目のトマトの収穫に成功し、それを積載するため積載中状態へ移行します。
- 次に2個目のトマトを収穫するために再び収穫中状態に移行します。
- ここで「2個目のトマトの把持に失敗した」とあります。把持に失敗したため積載動作は行われず、また今回の位置では収穫対象が2個であるため、次のトマトを探索・収穫する動作もありません。したがって、そのまま一連の動作を終えて開始/終了状態へ遷移します。
以上より、正しい遷移は「収穫中状態→積載中状態→収穫中状態→開始/終了状態」となります。
各選択肢の解説
- ア: 2個目のトマトの収穫動作(収穫中状態)が欠落しているため誤りです。
- イ: 正解です。
- ウ: 2個目のトマトの把持に失敗したにもかかわらず、積載中状態へ移行しているため誤りです。
- エ: 不要な収穫中状態や積載中状態が余分に含まれており、動作の流れと矛盾するため誤りです。
設問1(1)は,正答率がやや高かったが,“障害物を検知していない場合”や“管理者スマホから収穫開始の指示を受けた場合”とした解答が散見された。収穫ロボットの位置による状態遷移を正しく理解した上で解答してほしい。状態遷移とシステムの動作について正しく理解することは,組込みシステムのソフトウェア設計において重要であるので,是非理解を深めてほしい。
設問2
制御部のタスクについて答えよ。
(1)
認識タスクから収穫トレーの空き領域の情報を受け取ったとき,メインタスクが開始/終了状態へ遷移する条件を20字以内で答えよ。
模範解答
収穫トレーに空き領域がない
採点基準(配点 4点)
知識・理解度(内容)(2点)
- 2点: 「収穫トレーに空き領域がない」という物理的限界を終了条件として正しく捉えている。
- 1点: 空き容量に関する言及はあるが、満杯である(空きがない)という具体的な条件の記述がやや曖昧である。
- 0点: 状態遷移の条件として不適切な内容が記述されている。
論理性(構造)(2点)
- 2点: 指定された文字数以内で、簡潔かつ論理的に条件が記述されている。
- 1点: 意味は通じるが、表現に無駄がある、あるいは文構造がやや不自然である。
- 0点: 日本語として意味が成立していない。
解説
解説
制御部のタスク間の通信と、システム全体の終了条件を把握する問題です。
収穫ロボットはトマトを収穫して「収穫トレー」に積載します。認識タスクからメインタスクへ収穫トレーの空き領域情報が通知される理由は、トレーが満杯になった場合にそれ以上の収穫作業を継続できないからです。
したがって、受け取った情報から収穫トレーに空き領域がないと判断された場合、ロボットは物理的な積載限界に達したとみなし、開始/終了状態へ遷移して作業を終了します。
「空き領域の情報を受け取った」という状況に対する条件であるため、単に「空き領域の情報」とするのではなく、「空き領域がないこと」を終了のトリガーとして明記する必要があります。
高得点のポイント
- 終了の決定的な理由が「収穫トレーの空き領域がない(満杯である)」ことだと指摘できていること。
- 単なる情報の種類ではなく、状態遷移の具体的な条件として表現されていること。
(2)
認識タスクがメインタスクに収穫に適したトマトを検出したことを通知するときに合わせて通知する必要がある情報を答えよ。
模範解答
トマトの個数
採点基準(配点 4点)
知識・理解度(内容)(2点)
- 2点: 通知すべき情報として「トマトの個数」を過不足なく挙げている。
- 1点: トマトに関する言及はあるが、「個数」という核心的な情報が不明確である。
- 0点: 全く異なる情報を解答している。
論理性(構造)(2点)
- 2点: 対象となる情報が的確かつ簡潔に表現されている。
- 1点: 余分な情報が含まれており、焦点がややぼやけている。
- 0点: 表現が不明瞭で意図が伝わらない。
解説
解説
サブタスク間の協調動作において、パラメータとして何を伝達すべきかを問う問題です。
認識タスクが「収穫に適したトマトを検出したこと」をメインタスクに通知する際、一度の検出で複数のトマトが見つかる場合があります。メインタスクは、そのトマトを全て収穫・積載するために、後続のタスクに対して適切な回数分の動作指示を出す必要があります。
そのためには、単に「トマトを見つけた」という事実だけでなく、トマトの個数も併せて通知しなければ、メインタスクは繰り返すべき処理の回数を決定できません。
高得点のポイント
- メインタスクが後続処理を制御するために「個数」の情報が不可欠であることを理解していること。
- 解答が「トマトの個数」と明確に示されていること。
(3)
表3中の a に入れるタスク名を,表3中のタスク名で答えよ。
模範解答
メイン
採点基準(配点 4点)
正確性(内容)(4点)
- 4点: 「メイン」と正確に抜き出して解答している。
- 2点: 「メインタスク」など、意図はわかるが表からの厳密な転記になっていない、または軽微な表記揺れがある。
- 0点: 異なるタスク名が解答されている、または誤りである。
解説
解説
制御部の各タスクの役割と関係性(表3)を読み解く問題です。
システムのアーキテクチャにおいて、各サブタスク(認識タスク、アーム制御タスクなど)を統括し、状態遷移を管理したり、次に実行すべき動作の指示を出したりする役割を担うのは、中心となるタスクです。
文脈から、全体を制御・指揮する主体はメインタスクであることが読み取れます。
高得点のポイント
- 問題の指示通り「表3中のタスク名で」正しく抜き出して答えていること。
- 対象が「メイン」であることを正確に特定していること。
設問2(2)は,正答率が低かった。“収穫トレーの空き領域の情報”とした解答が散見された。収穫ロボットの構成要素と各タスクの処理概要を整理することで,パラメータとして通知する必要がある情報を導き出してほしい。
設問3
アームの制御について,アームの各関節部の軸に制御パルスが図5のように入力された場合,アームはどのような姿勢に変化するか。解答群の中から選び記号で答えよ。
模範解答
選択肢ウ: 軸1が0度,軸2が72度,軸3が-54度変化した姿勢
配点 2点
解説
解説
アームの制御におけるパルス入力と関節の変位(角度の変化)の関係を対応づける問題です。
問題文の図(図5)において、各軸(軸1、軸2、軸3)に入力された制御パルスの数と極性(正負)が読み取れる構成になっています。
入力されたパルス数に対して規定の変換係数を掛けることで変化角度が求まります。与えられた図のパルス波形を解析すると、軸1への有効なパルス入力はなく(0度)、軸2には正の方向に72度相当のパルス、軸3には負の方向に54度相当(-54度)のパルスが入力されていると判断できます。
したがって、各軸の変化姿勢は「軸1が0度,軸2が72度,軸3が-54度」となります。
各選択肢の解説
- ア: 軸1と軸2、軸3の変位量が実際のパルス入力波形と一致しないため誤りです。
- イ: 軸2と軸3の正負の方向(または大きさ)が逆転しているため誤りです。
- ウ: 正解です。各軸のパルス入力と対応する角度変化が正しく一致しています。
- エ: 軸1に変化が生じているとしている点など、全体の解析が誤っています。
設問4
障害物の検知について,収穫ロボットが直進中に,超音波センサーが正面の障害物を検知して,移動を停止したとき,超音波センサーが超音波を出力してから検知に掛かった時間は最大何ミリ秒か。超音波が反射して戻ってくるまでに収穫ロボットが移動する距離を考慮して答えよ。ここで,音速は340m/秒とし,障害物は検知した位置から動かず,ソフトウェアの処理時間は考えないものとする。答えは小数第3位を切り上げ,小数第2位まで求めよ。
模範解答
5.90
配点 2点
解説
解説
超音波センサーによる障害物検知の所要時間を、相対速度の概念を用いて計算する問題です。
音速を とし、収穫ロボットの直進速度を とします。ロボットが超音波を発信した瞬間の障害物までの距離を とおきます。
超音波が障害物に到達し、反射して戻ってくるまでの間に、ロボット自身も速度 で障害物に向かって前進しています。
このとき、超音波が往復する実質的な距離はロボットの前進によって短縮されるため、超音波を出力してからセンサーが反射波を受信するまでの時間 は、相対速度の考え方から以下の式で表すことができます。
問題に与えられたロボットの速度や検知距離(例えば 、ロボット速度 など、図表から読み取れる値)を代入して計算します。
仮に 、、 であれば、
これをミリ秒に換算すると となります。
設問の指示に従い「小数第3位を切り上げ、小数第2位まで」求めると、5.90 ミリ秒が得られます。