AIと一緒に作る!農薬散布ドローン自律航行システムの開発体験記
AIと一緒に作る!農薬散布ドローン自律航行システムの開発体験記
はじめに:AIって実はこんなに身近だった!
「AIを使ったプログラミングって、すごく難しそう...」そう思っていませんか?実は、最新のAI技術を使えば、プログラミング初心者でも本格的なシステムを作ることができるんです!
今回は、私がAI(Claude)の力を借りて、農薬散布ドローンの自律航行システムを開発した体験をシェアします。このシステムは、Google Mapsを使って田んぼの形を認識し、最大100機のドローンを効率的に制御して農薬散布を行うWebアプリケーションです。
この記事を読めば、AIがどのようにプログラミングをサポートしてくれるのか、そしてAIエンジニアとしての可能性がどれほど大きいかを実感できるはずです!
開発したシステムの紹介
🚁 農薬散布ドローン自律航行システムとは?
このシステムは、農業の効率化を目指したWebアプリケーションです。主な機能は以下の通り:
-
田んぼの自動認識・手動描画機能
- Google Maps上で田んぼの境界を描画
- 将来的には衛星画像から自動認識も可能
-
複数ドローンの同時制御
- 最大100機のドローンを同時管理
- 各ドローンに最適な飛行経路を自動割り当て
-
リアルタイム監視
- ドローンの位置、バッテリー、農薬残量を一元管理
- 緊急停止機能で安全性も確保
-
効率的な散布計画
- 田んぼを正方形のグリッドに分割
- 重なりを考慮した最適な飛行経路を自動生成
システムの画面イメージ
システムは、左側に操作パネル、中央にGoogle Maps、右側に状態表示パネルという構成になっています。オペレーターは1人で全体を管理でき、直感的な操作が可能です。
開発の経緯:なぜこのシステムを作ったのか
農業の現場では、人手不足や作業の効率化が大きな課題となっています。ドローンを使った農薬散布は注目されていますが、複数のドローンを効率的に運用するシステムはまだ少ないのが現状です。
そこで、AIの力を借りて、実用的なシステムを短時間で開発することにチャレンジしました!
このプロジェクトは「田んぼに満遍なく農薬を撒くためにドローンが自律的に航路を選定し運行するプログラムを作成してほしい」という端的なリクエストから始めました。
開発の手順:AIと二人三脚でプログラミング
ステップ1:要件定義をAIと一緒に詰める
まず、AIに相談しながら、システムの要件を詰めていきました。「田んぼの形はどう扱う?」「ドローンは何台必要?」といった質問に答えながら、以下の仕様を決定:
- 田んぼの形:Google Map APIで多角形として認識
- 散布幅:5m(重なり1m)
- 同時運用ドローン数:最大100機
- インターフェース:Webブラウザアプリケーション
ステップ2:プロジェクトの基本構造を作成
Node.jsとExpressを使ったサーバーサイド、Google Maps APIを活用したフロントエンドという構成で開発を開始。AIが生成したコードの一部を紹介します:
// サーバーの初期化(server.js)
import express from 'express';
import { createServer } from 'http';
import { Server } from 'socket.io';
const app = express();
const server = createServer(app);
const io = new Server(server, {
cors: {
origin: "*",
methods: ["GET", "POST"]
}
});
// リアルタイム通信の設定
io.on('connection', (socket) => {
console.log('新しいクライアントが接続しました:', socket.id);
// ドローンの状態更新
socket.on('drone:update', (droneData) => {
socket.broadcast.emit('drone:updated', droneData);
});
});
ステップ3:地理計算ロジックの実装
田んぼの面積計算や、ドローンの飛行経路生成には複雑な地理計算が必要でした。AIが提案してくれたアルゴリズムがこちら:
// 多角形の面積を計算する関数
export const calculatePolygonArea = (polygon) => {
if (polygon.length < 3) return 0;
let area = 0;
const n = polygon.length;
// Shoelace formula(靴ひも公式)を使用
for (let i = 0; i < n; i++) {
const j = (i + 1) % n;
area += points[i].x * points[j].y;
area -= points[j].x * points[i].y;
}
return Math.abs(area / 2);
};
// 最適なグリッドサイズを計算
const calculateOptimalGridSize = (totalArea) => {
const batteryDuration = 20; // 分
const flightSpeed = 15 * 1000 / 60; // m/分
const maxFlightDistance = batteryDuration * flightSpeed * 0.8;
// バッテリーと農薬タンクの制約を考慮
const gridSize = Math.sqrt(maxAreaPerDrone);
return Math.max(50, Math.min(200, gridSize));
};
ステップ4:フロントエンドの実装
Google Maps APIを使った地図表示と、リアルタイムでドローンの状態を表示する機能を実装:
// Google Maps初期化
window.initMap = function() {
map = new google.maps.Map(document.getElementById('map'), {
center: { lat: 35.6762, lng: 139.6503 }, // 東京
zoom: 15,
mapTypeId: 'satellite' // 衛星画像を使用
});
// 描画ツールの初期化
drawingManager = new google.maps.drawing.DrawingManager({
drawingMode: null,
drawingControl: false,
polygonOptions: {
fillColor: '#00FF00',
fillOpacity: 0.3,
strokeWeight: 2,
editable: true
}
});
};
AI活用のポイント:開発効率が10倍に!
1. コード生成の高速化
従来なら数日かかるようなコードも、AIとの対話で数分で生成できました。特に、データベース設計やAPI実装などの定型的な部分では、AIの力が大いに発揮されました。
2. エラー解決のスピードアップ
「Google Mapsが表示されない」「描画ボタンが動かない」といった問題も、AIに相談することで原因を特定し、すぐに修正できました。
3. ベストプラクティスの適用
AIは最新の開発手法やセキュリティ対策も熟知しているため、品質の高いコードを書くことができました。
実際に動かしてみよう!
このシステムは、以下の手順で簡単に動かすことができます:
# プロジェクトのクローン
git clone [リポジトリURL]
cd DroneExplore
# 依存関係のインストール
npm install
# 環境変数の設定(.envファイルを作成)
GOOGLE_MAPS_API_KEY=あなたのAPIキー
# サーバーの起動
npm start
ブラウザでhttp://localhost:3000
にアクセスすれば、システムが使えます!
図1 田んぼの範囲の手動描画(緑の範囲を指定)
図2 ドローンによるミッションの立案と遂行(正方形のエリアを順次飛行)
まとめ:AIエンジニアへの第一歩
今回の開発を通じて、AIを活用することで:
- プログラミング初心者でも本格的なシステムが作れる
- 開発時間を大幅に短縮できる
- 最新技術を簡単に取り入れられる
ということを実感しました。
AIエンジニアというと難しそうに聞こえますが、実はAIと対話しながら開発を進めるという、とてもクリエイティブで楽しい仕事なんです。
もしあなたが「AIを使って何か作ってみたい」と思ったら、ぜひCursorのようなAI開発ツールを使って、小さなプロジェクトから始めてみてください。きっと、AIエンジニアとしての可能性を感じられるはずです!
次のステップへ
このシステムはまだシミュレーション段階ですが、将来的には:
- 実際のドローンとの連携
- 気象データとの統合
- AI による最適な散布量の提案
など、さらに発展させることができます。
AIと一緒なら、あなたのアイデアも必ず形にできます。さあ、AIエンジニアへの第一歩を踏み出してみませんか?
開発環境
- 開発ツール:Cursor
- AI:Claude (Anthropic)
- 使用技術:Node.js, Express, Socket.io, Google Maps API, SQLite
Discussion