重機プログラミングを通した市民参加型の農業・防災・情報教育・地域デザインの実践
- 小林一樹(工学部 教授)
- 2024/07/02
研究概要と成果
本研究では,本研究では,誰でも簡単に重機を制御できる環境を整え,重機の利用効率向上や,災害復旧へ活用することを目的とした,重機プログラミング環境の提案する.提案手法では,独自開発したScratchの拡張機能を用いて,実際に重機の制御を行う環境を構築した.提案手法を実装したシステムを用いて,子供向けの重機プログラミング教育の試験実施を行ったところ,参加した小学生3名が協力して,3時間近く集中して重機を用いた重量物運搬課題を達成でき,提案手法によって小学生でも重機を適切に操作できるようになることが確認でき,未経験者であっても重機を操作して日常と非日常をつなぐための手法の1つとして貢献できる可能性が示唆された.
農業・防災サイバーフィジカルシステムの概要図
研究内容の詳細
- はじめに
本研究では,農業・防災・情報教育・地域デザインの実践によって,常時においては生産性を高め,非常時においては対応力を発揮する継続性のあるレジリエントな地域社会を実現するための農業・防災サイバーフィジカルシステムを構築する.提案手法では,重機をはじめとするフィジカル空間に大きな影響を与える機器をサイバー空間を通して誰でも使えるツールとする技術を開発する.提案手法を用いることで,中小規模農家でも自らでスマート農業の実践が可能となるだけでなく,常時においては農業や資材運搬などに,非常時においては災害復旧作業に重機を転用することができる.本技術を地域単位で導入すれば,共有プログラムを再利用して重機の他作業への転用を促進して利用経費の回収が可能となり,かつ,災害に強いレジリエントな地域社会の実現につながるとともに,産業機械の進歩に貢献できる可能性がある.
- 実施内容と成果
2.1 農業・防災サイバーフィジカルシステム(農防CPS)の開発
専門知識や英語が習得できていない子供でもプログラムが作成できるビジュアルインターフェースを持ったプログラミング環境「Scratch」を改変し,重機をプログラムから制御できるシステムを開発した.重機プログラミング環境は,図1に示すように,Scratch拡張ブロック,中継プログラム,重機コントローラ,重機で構成されており,相互に情報がやりとりされる.Scratch拡張機能を実行する環境と中継プログラムは同一PC上,重機コントローラは重機に設置するマイクロコントローラであるM5Stack上に実装した.
重機をプログラムから容易に制御するために,Scratchの拡張機能ブロックを使用した.この拡張ブロックは,中継プログラムに向けてHTTPリクエストとして,油圧ショベルの各関節に対する駆動命令を送信する.図2に示すように,ブロックにはコマンド名と値とを格納できるようになっており,コマンド名には動かす対象の関節名と動作を,値には駆動時間を0.1ms単位で指定する.駆動時間を指定する方式にすることで,停止するブロックを明示的に用いずとも,永遠に動き続けるといった暴走状態にならないため,より安全が確保できる.
コマンド名は,小学生でも分かりやすい表現であることを考慮して設定した.実際に重機を操縦する際に用いられる,バケットを「すくう」「はらう」やアームを「伸ばす」「縮める」,ブームを「上げる」「下げる」といった表現のコマンドで制御が可能である.拡張ブロックはScratchの「待つ」「繰り返す」といった他のブロックと組み合わせて使用することができるため,重機の動作を自動化したり,再利用することが容易である.
中継プログラムは,Scratchからの命令を受け取り,重機コントローラに向けてBluetoothで駆動時間や動作速度などの指示値を送信するプログラムであり,Python3を用いて開発した.プログラム内部でWebサーバを起動し,Scratchから送出されたHTTPリクエストを受け取る. HTTPリクエストからは,URLパラメータにより指定されたコマンド名と値とを抽出する.その後,重機コントローラに向けて,駆動時間や動作速度などの情報が格納されたJSONデータをシリアライズし,Bluetooth上でのシリアル通信を介して送信する.
図1 重機プログラミング環境の全体構成
重機コントローラは油圧ショベルに取り付けるマイクロコントローラであり,中継プログラムから命令を受け取りCANのフレームを送出する役割を持つ.重機コントローラとして,図3に示すマイクロコントローラであるM5StackBasicと,CAN信号を送出するためのCommuモジュールとを採用した.重機コントローラからは,コマンドとともに指定された時間だけ,指定された値のCAN信号を重機に向けて送出し続ける.重機の油圧回路の各系統に対して個別で値を指定できる.通信の遅延が実機の動作に影響を与えるような処理は,PC側ではなく,重機コントローラ側に実装することでトラブル時の安全性を高める対策を行った.
図2 重機制御用のScratch独自拡張ブロック
図3 重機コントローラとして採用したM5StackとCommuモジュール
重機コントローラとして採用したM5StackBasicの背面に取り付けたCommuモジュールに,油圧ショベルのからのCAN信号線を接続して使用する.油圧ショベルは角度センサが存在しないため角度のフィードバック制御が不可能である.そのため,角度の変化量に比例した時間だけ油圧を印加することで制御を実現した.現在角度は正方向,負方向それぞれの油圧印加時間の総和より算出する.操作対象である重機には電動油圧ショベルを採用し,CAN信号で油圧回路を制御した.
重機の関節を指定した角度に制御するためには,現在の関節角度をシステムが把握する必要がある.採用した重機には関節角度を把握するセンサが搭載されていないため,各関節の現在角度を推定する方法として,正方向・負方向それぞれに油圧を印加した時間を測定し,その数値に定数を掛けたものを現在角度とする方法を実装した.各関節が初期位置からどれだけの角度動いたかの情報の保持と更新とを可能にする.
重機の関節角度の計測に関しては,外部カメラを用いた深層学習による角度検出を実施した.画像認識によって重機の関節間の構造物の任意の点を検出し,角度推定を行った.重機画像167枚に対して,各関節付近の部位をアノテーションし,Yolo v5を用いて深層学習を行ったところ,検出精度に関してmAP50=0.995,mAP50-95=0.817の結果を得た.検証実験では,動作可能なGPU搭載のモバイルPCを採用し,実際に現場において小型カメラで重機の様子を撮影してリアルタイムでの関節角度推定を実施した.現状では安定性が低いものの,各関節の部位の検出は比較的良好であり,アノテーション画像を増加させることでより安定した関節角度の検出が見込まれる.
2.2 農防CPSを用いた教育プログラムの構築
開発した農防CPSを利用した教育プログラムを開発した.提案する教育プログラムでは,ステップ1:小学生でも利用可能なブロックプログラミング環境の講習,ステップ2:シミュレータを用いた重機制御の体験,ステップ3:実際の重機を用いた重機制御の体験の3つの段階で構成される.
ステップ1のブロックプログラミング環境の講習に関しては,プログラミングとは何か,から始まり,MITが開発して無料で利用できるブロックプログラミング環境であるScratchの基本的な機能や使い方などを学べる内容とした.初学者でも学べる内容となっており,小学生高学年以上向けとはなるが,事前知識は必要なく年齢を問わずに利用可能である.
ステップ2のシミュレータを用いた重機制御体験については,手動操作用の無線コントローラからの操作と,Scratchコードを利用した制御の両方が体験できる環境を開発した.図4に示すように,Scratch用の重機制御ブロックの接続先をシミュレータに設定するだけで,制御対象を実機からシミュレータに切り替えて制御可能となるため,Scratchの操作画面自体は共通に利用することができる.Scratchの画面とは別画面で表示されるが,図のように横に並べることで,Scratchコードを実行した際に画面内の重機がコードの内容に従って動作する.シミュレータの開発には,オープンコンストラクションシミュレータ(https://field-robotics-japan.info/ocs/)をベースとし,独自にScratchから制御できるように変更を行った
図4 重機制御シミュレータの開発画面
ステップ3の実際の重機を用いた重機制御の体験については,重機開発会社と(一財)日本笑顔プロジェクト代表の林氏の協力のもと,重機操作課題の検討を行った.重機の特徴を活かし,アーム制御を強調した重量物の操作を行うものに設定した.最終的には廃タイヤを持ち上げて丸太に落とす課題とした.タイヤの中心に丸太が入るように落とすことでクリアとなる.
2.3 農防CPSを用いた新教育プログラムの試験実施
開発した農防CPSを利用した教育プログラムを試験実施のために,重機プログラミング体験会を開催した.体験会は,2024年3月16日(土)13時から16時にかけて協力重機開発会社の試験場において開催された.参加者は,協力重機開発会社の社員の方々をはじめ,信州大学関係者14名(内,小学3年生1名,小学4年生1名,小学5年生1名,中学1年生1名,高校1年生1名),笑顔プロジェクト5名(内,小学2年生1名)であった.
イベントでは,冒頭で主旨説明を行ったのち,小学2年生,3年生,5年生の3名を対象にScratchから重機を制御する方法について説明を行い,その小学生たちが実際に廃タイヤを運搬する課題に取り組んだ.プログラミングに参加しない子供たちは,順番にシミュレータを使った操作を実施した.重機の制御は,動きを時間で制御するため,どこの部位を何秒動かしたらどのようになるか,をその都度確認しながら実施する必要がある.そのため,1つの前の動きが次の動きにも影響を与えて,時間の調整をその都度実施する必要があるため,小学生らにとっても難しい課題であったと考えられる.13時半ごろからプログラミングを開始し,実際に課題がクリアできたのは16時頃であったが,小学生たちは3時間近く集中して取り組んでおり,課題が達成できたときの喜びは客観的にみても大きかった.
子供たちの振る舞いで特徴的だった行動としては,重機やタイヤと丸太のあるフィールドに何度も駆け寄り,現場を確認しながらScratchのプログラムを調整していたことが挙げられる.また,実際に重機の模型を手にとり,動かしながら動作を検討する様子も観察された.プログラミング教育では,ゲームを題材としたものが用いられることが多く,Scratch自体もキャラクタを操作することを前提としたものになっている.また,ロボットを使ったプログラミング教育においても,小型のものを使うケースが多く,現実的な問題と乖離してしまう課題がある.それに対し,重機を使ったプログラミング教育では,目の前の現場の問題は人間の手で実施するのは難しく,それを重機制御によって解決するものであるため,問題に対する取り組みの姿勢に高い積極性が認められたと考えられる.
子供たちは何度も試行錯誤したり,配布資料に自ら計算を行っており,大人が指示しなくても自発的に取り組む姿勢が認められた.図18に小学生たちが作成したScratchプログラムを示す.実際には,アームやブームの動きを同時に実行することができるが,このプログラムでは命令ブロックの間に「待つ」のブロックが入っており,すべての動作を逐次実行することで実現されている.
図18 小学生たちが作成したScratchプログラム
今回のイベントを通して,プログラミング環境については,簡単に1つ前の状態(姿勢)に戻せる機能の必要性,Scratchの「待つ」ブロックと単位の整合(重機制御ブロックは1/10秒単位,待つブロックは1秒単位),旋回動作は試行錯誤で誤差が大きくなる問題,シミュレータ使用による高い訓練効果が高い可能性,重機コントローラの安定性の問題などが見いだされた.また,イベント中に車両が持ち上がって不安定な姿勢となることが一度あったが,そのような危険を回避するような仕組みを導入する必要がある.
小学2年生の参加者は,重機操作の資格を持っており,機械の動かし方をわかっていたものの,プログラミングは興味がなさそうな様子も観察された.一方で,小学生の5年生は集中して取り組めていたため,今回の課題設定や実施内容は,小学生高学年以上に適合する可能性がある.また,重機の動かし方のコツは事前につかんでおくとよい可能性がある.実機で動かす体験をして,その後でプログラミングを行うと効果的であるかもしれない.実際,プログラミングに参加しなかったある小学生は,シミュレータを使って手動操作を行った後に実機を操作すると,ほとんど説明なしに円滑に実機を動かせていたことからも,シミュレータの効果が示唆される.実機,シミュレータ,プログラミングを順番に何度も経験するような手順をとると学習効果が高まる可能性がある.
現状では,人間が手動で重機を操作する方が素早く効率的であるため,プログラムを作成することで,人間による手動操作を上回る要素を盛り込む必要性が関係者から指摘された.疲労感なく正確にできる点を強調できたり,人間が実施する方が早いということを解消していくことで,現実的な問題解決により焦点を当てた教育プログラムとなる可能性がある.
農業機械の専門家からは,建機は農業でも使われているため,より農業に関連の深い課題を設定できるとよいとの指摘があった.これらのコメントを参考にし,より現実的な問題を扱い,学習効果の高い異分野を融合した教育プログラムを構築していく予定である.
PDFファイルダウンロード
その他の研究成果