2023/9/15(金) プログラミングの演習
「勉強とはなんだろう」にて、
「研究」には「答えの分からない問題に対し、解決方法もわからないままに取り組む」という側面がある、と述べた。
皆さんがこれまで講義で取り組んで来たや課題や演習は、1 週間もあれば答えにたどり着けるものがほとんどだったであろう。
しかし、研究では「答えも解決方法もわからない問題」の解決に 1 ヵ月とか半年かけることは普通にある。
そのような状況でも粘り強く考えられることが重要なのである。
そこで、そのような状況に触れるための練習として、「解決方法がわからない問題に取り組む」という演習を行ってもらう。
「答え」は教員である私は当然把握しているが、皆さんにはわからないはずである。
そのため、皆さんの立場からは「答えも解決方法もわからない問題に取り組む」という演習になるだろう。
もちろん、これは「研究」そのものとは言えないが、「研究」に取り組むための練習、というくらいの位置付けになるだろうか。
皆さんがその過程で何かを学び、習得したならば「勉強」になるだろう。
とは言え、実際には答えのある課題なのであるから、勘の良い学生は簡単にできてしまうのかもしれない。
こればかりはやってみないとわからない。
なお、今回の演習に質問する際も、あるいは今後皆さんが就職してからも、以下のような質問は避けて欲しい。
これでは、質問された側は答えようがない。なぜなら、質問者がどの程度の知識を持っているかわからないし、
場合によっては答えを全て教えなければならなくなるからである。
それに対して、良い質問は例えば以下のようなものである。
- 資料には○○と書かれていたが、自分はここは○○だと思う。なぜこうなるのですか
- この問題に対し、自分は○○という仮説を立てた。
その仮説に基づき、○○を実行してみたが、結果は予想に反して○○だった。
なぜこのような結果になったのかを教えて欲しい。
このような質問ならば、質問者がどの程度の知識をもっているかわかるし、
何を回答すればよいのかが明確であるというメリットがある。
簡単に言えば、すぐに答えを求めるのではなく、自分で考え抜いた上で質問しなさい、ということである。
あるいは、自分がどこまで分かっていてどこから分からないかを明確にしてから質問しなさい、ともいえる。
まず、下記の演習で行った操作を十分習得しておくこと。
そして、最後のポーズ認識プログラム mp_pose_recognize_skeletons.py に関して、以下の問題に回答せよ。
プログラムの変更が必要な場合 Spyder 上で行い、変更後上書き保存してから実行して動作を確認すること。
ヒントは特にないが、 mp_pose_recognize_skeletons.py ではプログラミング言語として Python3、
画像処理ライブラリとして Python 用の OpenCV が用いられていることを知っておくと、自分で調べるときの助けになるかもしれない。
- (1) 胴体を表す四角形のみ、下図のように赤色で表示してみよ。
- (2) 関節部に表示されている数字を下図のように削除せよ。ただし、プログラム内で変更してよいのは 4~5 文字程度とし、行の削除はしてはならない。
- (3) 関節部に表示されている丸を下図のように削除せよ。(2) と異なり、プログラム内の変更についての制約は設けない。
- (4) 各関節は点として表現されている。プログラム中で、この「点」はどう表現されているか。整理してまとめよ。
また、各関節の点には、 x 座標と y 座標がある。各関節の x 座標と y 座標はどう表現されるか。
プログラム中の記述を元に考えよ
- (5) (1) で胴体の四角形を赤く塗ってみた。このとき、「肩幅」に相当する線分の長さを求め、画面に表示してみよ。
- (6) 画像中の顔の位置に画像を貼り付けるプログラムを作成せよ。
画像のサイズ固定、透過処理なし(画像が長方形のまま)、で良い。サイズ可変、透過処理あり(顔の形の画像など) も可能だが難易度が上がる。
まず、下記の演習で行った操作を十分習得しておくこと。
その上で、以下の演習を行え。
- (1) 「4ページ目 TurtleBot3 をプログラムで制御する # TurtleBot3 のプログラムによる自律制御」で作成した auto.py をベースに、以下を実現せよ。
- ロボットには「前進モード」と「後退モード」があり、起動時には「前進モード」で前進し始めるものとする。
- ロボットが前進中に前方の障害物に一定距離近付いたら、「後退モード」に切り変わり、ロボットは後退し始める。
- ロボットが後退中に後方の障害物に一定距離近付いたら、「前進モード」に切り替わり、ロボットは前進し始める。
- 言い替えれば、障害物に近付くごとに 前進/後退 が切り替わるロボット、ということである。
- (2) 「4ページ目 TurtleBot3 をプログラムで制御する # TurtleBot3 のプログラムによる自律制御」で作成した auto.py をベースに、以下を実現せよ。
- ロボットは前進/後退のどちらかのみを行い、ロボットは前方障害物との距離を常に一定に保とうとする。
- シミュレータ Gazebo で実行すれば、このプログラムは「ロボットは壁までの距離が一定になるまで前進し、近付いたらそこで (ほぼ)静止する」という動作になるだろう
- ロボット実機で実行すれば、このプログラムは、「ロボットは障害物まで近付き、障害物が (ロボットの進行方向に平行に) 動けばロボットはその障害物との距離を保ちながらついていく」という動作になるだろう
プログラムを自分で変更するようになると、エラーがでてプログラムが動作しなくなることがある。
ここではそのエラーメッセージを読むことについてコメントを記す。
主に人物認識プログラムに関連する内容である。
カメラを用いた人物認識プログラムでは、下図のようにファイルごとの実行設定を
「現在のコンソールで実行」から「外部システムターミナルで実行」に変更して実行してもらった。
これにより、プログラム実行時に黒い画面 (外部システムターミナル) が現われるようになる。
この設定をする理由は、これをしないと「プログラム終了時にカメラが正常終了せず、次にプログラムを実行できなくなる」という問題が
環境によっては起こり得るからである (そうなった場合は Spyder を再起動することになる)。
その問題は、外部システムターミナルの利用で回避できるというわけである。しかし、それにより今度は
「プログラムがエラーを出力して強制終了するとき、外部システムターミナルにエラーメッセージが表示されずにプログラムが終了する」
という問題が起こり得る (この問題が起こる環境と起こらない環境があり、その違いは現状分かっていない)。
プログラムが強制終了するとき、エラーメッセージを読んで原因を探らなければならないが、
それが表示されないので原因を探りようがない、というわけである。
そのような場合、上のファイルごとの実行設定画面で
「外部システムターミナルで実行」の設定を「現在のコンソールに実行」に戻せば良い。
それにより、Spyder 内のコンソールにエラーメッセージが追加されるようになる。
ただし、その設定によりカメラが正常終了しない、という問題が起こり得る可能性があるが、
エラーが解決するまではエラーメッセージを表示することを優先しよう、というわけである。
3年生向けページに戻る