Polivia Bot Python Raspberry Pi Pico プログラム ロボット制御 電子工作 高専3年生

【Poliviabot】【Raspberry Pi Pico】ロボット制御入門⑨生成AIと一緒にPoliviaBotを開発しよう【Python】

本サイトでは様々な環境で気軽に本格的なロボット教育を行ってもらうべく、独自のロボット教材を開発しました。

現在、一般販売へ向けて準備をしております。

本Webページではβ版の先行体験をしていただく方向けに公開している資料になっております。

一般の方は販売をお待ちください。

前回はこちらです

この章では、生成AI(Generative AI)を使って、PoliviaBotのプログラム開発を効率よく進める方法を学びます。
生成AIは「答えを全部作る魔法」ではなく、アイデア出し・コードの下書き・エラー原因の推定・改善案の提案を手伝ってくれる“相棒”です。

1 生成AIとは

生成AIは、文章・コード・画像などを作れるAIです。
プログラミングでは主に次の用途で役立ちます。

  • コード例の作成(たたき台)
  • エラーの原因の推定と修正案
  • 説明をやさしく言い換える
  • 改良案の提案(もっと安定に、もっと賢く)
  • 実験の手順(何を計測すればよいか)

ただし注意点もあります。

  • 間違ったコードも平気で出す
  • あなたのロボット固有の配線や仕様は知らない
  • 動作確認は必ず人間がする必要がある

なので、生成AIを使うコツは
「AIに渡す情報を増やす」「小さく試す」「結果をフィードバックする」です。

2 PoliviaBot開発での“正しいAIの使いどころ”

PoliviaBotのような実機ロボット開発では、次の3段階でAIが特に効きます。

(1) 仕様整理(AIが得意)

例:

  • ピン配置
  • センサの種類
  • 目標動作(ライン追従、停止、回避)

(2) たたき台コード(AIが得意)

例:

  • モータ制御関数
  • センサ読み取り
  • if文分岐
  • 状態機械(FSM)

(3) 動かなかったときの原因切り分け(AIが得意)

例:

  • エラーメッセージの読み解き
  • どこにprintを入れるべきか
  • 電源や配線の可能性のチェックリスト

3 生成AIに渡すべき情報テンプレ

AIに聞く前に、以下を貼ると精度が一気に上がります。

ハード情報

  • マイコン:Raspberry Pi Pico W / MicroPython
  • モータ:GP0–GP3(左右+/−)
  • 超音波センサ:GP6(Sonar_E)/GP7(Sonar_T)
  • ラインセンサ:GP26/27/28(ADC)
  • スイッチ:GP13/14
  • LED:GP11/12
  • SSD1306:GP5 (I2C0 SCL) GP4 (I2C0 SDA)
  • 目標:例「円形コースを安定して周回したい」

制約

  • PWM周波数
  • 速度の範囲
  • センサは2値に近い(白/黒のみ)

今のコード(全部 or 問題の部分)

実際の症状

  • 例「全部白で止まる」「出口で首振り」

実測値(あれば)

  • 白≈100、黒≈4000 など

4 良いプロンプトの型(初心者向け)

生成AIへの指示文(プロンプト)は、次の順にすると通りやすいです。

プロンプトの基本構造

  1. 目的(何をしたいか)
  2. 環境(Pico W / MicroPython / ピン配置)
  3. 現状(今のコード、どこまで動くか)
  4. 問題(何が困っているか)
  5. 出力形式(全文コードが欲しい/差分だけ欲しい/解説も欲しい)

5 すぐ使えるプロンプト例(PoliviaBot用)

例A:まず動く“最小コード”を作らせる

Raspberry Pi Pico W(MicroPython)でPoliviaBot UMEを動かしたい。
モータはGP0=Motor_L+, GP1=Motor_L-, GP2=Motor_R+, GP3=Motor_R- をPWMで制御する。
まずは「前進2秒→停止2秒」を繰り返す最小コードを、配線確認用に作って。
初学者向けにコメント多めで。

例B:ラインセンサのしきい値決めを手伝わせる

ラインセンサはGP26/27/28(ADC)で読み取る。
実測で白は100前後、黒は4000前後の2値っぽい値しか出ない。
しきい値を自動キャリブレーション(白10回、黒10回平均)で決めるコードを作って。
Thonnyで実行して数値が分かるようにprintも入れて。


例C:現象を伝えて改善案を出させる(首振り対策など)

円形コースのライントレースは動くが、見失い時に首振りが大きい。
3センサは2値で、パターンは000/010/100/001が多い。
「最後に見えた方向」を記憶して探索する方式にしている。
首振りを減らすために、探索の強さや時間を段階的にする改善案を出して。
できればコード全文も。


例D:エラーの質問(ログの貼り方も)

次のMicroPythonエラーが出た。原因と直し方を、初心者向けに説明して。
さらに、同じ種類のミスを防ぐためのチェックポイントも箇条書きで。
(ここにエラー全文を貼る)

6 “AIで開発する”おすすめ手順

ロボット開発は一気に作ると壊れます。AIと進めるなら、次の順番が安全です。

ステップ1:動作確認用ミニプログラム

  • LED点灯
  • スイッチ読み取り
  • モータ単体テスト
  • センサ値print

ステップ2:部品を関数化して再利用

  • drive_lr()
  • read_line()
  • stop()

ステップ3:合体しても動くようにする

  • センサ → 判定 → モータ
  • 止まったら print() で原因を見える化

ステップ4:高度化は「1つずつ」

  • 見失い探索
  • ヒステリシス
  • 交差点判定(必要なら)

7 AIを使うときの注意

生成AIは便利ですが、ロボットでは特に以下に注意します。

  • ピン番号の勘違い(GP0〜GP3など)
  • 電源、回路問題
  • PWMの範囲(duty_u16は0〜65535)
  • sleepが長すぎると制御が遅れる

AIのコードは必ず

  • 最初は“止まる”動作から試す
  • すぐに停止できるようにする(緊急停止)
  • 実験は短時間で繰り返す

課題 14

AIに「モータテストコード」を作らせて実機で確認する

  • 前進・後退・左旋回・右旋回・停止を各1秒ずつ
  • 実行結果を観察し、
    • 左右が逆なら配線か符号をどう直すか
    • 回らないならどこを疑うか
      をレポートにまとめる

解答例(レポートの書き方例)

  • 左右が逆 → drive_lr(ls, rs)ls/rs を入れ替える or 配線を入れ替える
  • 片側だけ回らない → PWMピン/はんだ/モータ端子/ドライバICの故障を疑う
  • 両方回らない → 電源、GND共有、PWM初期化を疑う

課題15

テーマ

PoliviaBotを“システム”として拡張せよ

次のうち、2つ以上を必ず組み合わせること

  • センサ(ライン / 超音波 / スイッチ)
  • 出力(モータ / LED / OLED / ブザー / WiFi)
  • 状態表示(画面 / シリアル / Web)

  • 自動駐車ロボット
    ラインで走行 → 障害物検知 → 停止 → OLEDに「PARKED」表示
  • 巡回ロボット
    1周するとLED色変更 → 3周で停止 → WiFiで状態送信
  • スマート誘導ロボット
    スイッチで目的地選択 → ラインで移動 → 超音波で安全停止

成果物

  1. システム構成図(ブロック図)
  2. 状態遷移図
  3. 動作デモ
  4. AIをどう使ったかの記録
    • 最初のプロンプト
    • 修正したポイント
    • AIが間違えた部分

評価観点

  • アイデアの独自性
  • センサと制御の関係が論理的か
  • AIを“道具”として使えているか

参考 PoliviaBot 生成AIプロンプトシート

このシートは、生成AIに正確で実機向けのコードを出してもらうための“設計情報入力欄”です。
まず【システム仕様】を教えてから、下の【目的別プロンプト】を使ってください。

システム仕様(ここを必ずAIに貼る)

【ロボット】PoliviaBot UME
【マイコン】Raspberry Pi Pico W
【言語】MicroPython

【ピンアサイン】
モータ
- Motor_L+ : GP0 (PWM)
- Motor_L- : GP1 (PWM)
- Motor_R+ : GP2 (PWM)
- Motor_R- : GP3 (PWM)

ラインセンサ(アナログ)
- Line_L : GP26 (ADC0)
- Line_C : GP27 (ADC1)
- Line_R : GP28 (ADC2)

超音波センサ
- Echo : GP6
- Trig : GP7

サーボ
- Servo1 : GP8
- Servo2 : GP9
- Servo3 : GP10

デジタル入力(プルダウン抵抗あり)
- Switch1 : GP13
- Switch2 : GP14

LED
- LED1 : GP11
- LED2 : GP12

I2C
- SCL : GP5
- SDA : GP4

OLED
- SSD1306 (128x64, I2C, addr=0x3C)

【電源】
Pico WはUSB給電
モータは別電源、GND共通

【センサ特性】
ラインセンサはほぼ2値
白: 約100前後 / 黒: 約4000前後

【制約】
PWM duty_u16 = 0~65535
PWM周波数 = 1000Hz

目的別プロンプト集

モータテスト

上記仕様のPoliviaBotで、
前進→停止→後退→停止→左旋回→停止→右旋回→停止
をそれぞれ1秒ずつ行うMicroPythonコードを作ってください。

・GP0~GP3のPWMを使うこと
・初心者向けにコメントを多めに
・安全のため起動時は必ず停止状態にしてください

OLED表示テスト(SSD1306)

SSD1306 OLED(I2C, 128x64, addr=0x3C)を使い、
1行目に "PoliviaBot"
2行目に "OLED TEST"
3行目にカウントアップ数字
を表示するMicroPythonコードを作ってください。

I2Cピンは
SCL=GP5, SDA=GP4
です。

ラインセンサ+OLED可視化

ラインセンサ(GP26,27,28)を読み取り、
OLEDに以下の形式で表示してください。

L: ####
C: ####
R: ####

白/黒判定も表示し、
例:
L: 120 (W)
C: 4021 (B)
R: 110 (W)

のように見えるコードを作ってください。

状態機械(FSM)設計

PoliviaBotの動作を
FOLLOW(ライン追従)
AVOID(障害物回避)
STOP(停止)
の3状態で設計してください。

超音波距離が15cm未満でAVOIDに遷移、
回避後はFOLLOWに戻る構造にしてください。

状態遷移図の説明と、
MicroPythonの実装コード全文を出してください。

トラブルシュート用プロンプト

次のMicroPythonエラーの原因と対処法を、
PoliviaBotの構成を前提に説明してください。

【エラーログ】
(ここに全文を貼る)

また、
・配線
・電源
・ピン設定
・ライブラリ
の4観点でチェックリストも出してください。

次回はこちら

Follow me!

-Polivia Bot, Python, Raspberry Pi Pico, プログラム, ロボット制御, 電子工作, 高専3年生
-, , , , ,

PAGE TOP