Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Pythonではじめる農業ロボット開発
Search
Sponsored
·
Your Podcast. Everywhere. Effortlessly.
Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
→
Makoto Koike
November 20, 2021
Technology
1.9k
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Pythonではじめる農業ロボット開発
#2021/11/20 PyCon mini Shizuoka 2021
Makoto Koike
November 20, 2021
More Decks by Makoto Koike
See All by Makoto Koike
Meta AIのSegment Anything Model (SAM) が色々便利そうな話
koike91
0
840
Pythonで不均衡で一貫性のないデータセットを少しだけマシにする話
koike91
1
2.4k
Other Decks in Technology
See All in Technology
【書籍出版記念】 10周回って、エージェント開発は RAGがすべてだった。〜RAGの歴史と開発現場で見えた実践知〜
akiratameto
14
5.5k
ホームラボ紹介
y_sera15
0
230
巨大気象データと戦う ― サロゲートモデル学習を高速化する圧縮技術
gpuunite_official
0
240
属人化を叩き割れ!「制作加速」と「安定化」の矛盾を打破する:8年目プロダクトが辿り着いた「ミスが起こり得ない」アセット制作フローの全貌
gree_tech
PRO
0
120
Invisible to AI? Making TYPO3 Sites Quotable by AI Search Systems
wolfgangwagner
0
240
【GCC2026】TrueHDRIを用いたルックデブ環境とライティングテクニック
bandainamcostudios
PRO
0
220
Sets in Go
ramalho
1
1.2k
Kiro Crew で始める マルチエージェント開発
miu_crescent
PRO
0
160
MIXIで活躍できるエンジニアを 若手社員目線で考えてみる
mixi_engineers
PRO
0
130
RapidCopy2 Matrix I/Oエンジンによるファイルコピーソフトウェアの設計と実装
kengosawa2
1
280
[potatotips #96] Give Your AI Agent the Flutter Playbook
korodroid
0
140
AIにブラウザを触らせて、E2EテストをPlaywrightで書く
koji_kawamura
0
350
Featured
See All Featured
A Modern Web Designer's Workflow
chriscoyier
698
190k
Docker and Python
trallard
47
4.1k
Reflections from 52 weeks, 52 projects
jeffersonlam
356
21k
Building Better People: How to give real-time feedback that sticks.
wjessup
370
20k
Darren the Foodie - Storyboard
khoart
PRO
3
3.7k
The Art of Programming - Codeland 2020
erikaheidi
57
14k
Tell your own story through comics
letsgokoyo
1
1k
Hiding What from Whom? A Critical Review of the History of Programming languages for Music
tomoyanonymous
3
1.1k
Self-Hosted WebAssembly Runtime for Runtime-Neutral Checkpoint/Restore in Edge–Cloud Continuum
chikuwait
0
730
Principles of Awesome APIs and How to Build Them.
keavy
128
18k
The innovator’s Mindset - Leading Through an Era of Exponential Change - McGill University 2025
jdejongh
PRO
1
270
Site-Speed That Sticks
csswizardry
13
1.5k
Transcript
Pythonではじめる 農業ロボット開発 #2021/11/20 PyCon mini Shizuoka 2021
お前誰よ 小池 @ike_jpn • キュウリ農家 • もぐりの組み込みエンジニア • Pythonでやってること ◦ 機械学習(時系列データ分析・画像認識)
◦ プロトタイプ開発全般 • 最近やってること ◦ 農業に使えるモノづくり! ◦ 減速機付きロボットアーム作りたい! <キュウリ等級判別装置の開発> <自作ロボットアーム(開発中)>
• スマート農業 • 自動化&効率化 農具を作るの楽しい Data Analysis sensing Auto mation
ハウス環境センサ 培地重センサ ボイラー稼働モニタ 等級選別の自動化 灌水自動化 データドリブン な経営判断 もともと農家は 自ら農具を作ってきた!
最近70歳近くになる母が作った農具
画像認識を用いたキュウリの等級判別器 • 出荷時に9つの等級に選別しないといけない • めんどくさい選別作業を楽にしたい 試作1号機 試作2号機 試作3号機
画像認識を用いたキュウリの等級判別器 • Python • Tensorflow • OpenCV • Kivy (Mini)
• MicroPython
https://www.donkeycar.com/ 草取りドンキーカー • Python • Tensorflow • OpenCV • Tornado
今日話すこと • 野菜ピッキングロボットの制作 ◦ myCobot ◦ RealSense
話さないこと なんでROS使わないんですか?
開発のきっかけ • キュウリ選別器の改良(試作4号機) • とりあえず何かに使えそう ⇒ 野菜ピッキングロボを作ってみる 比較的安価でそれなりのロボッ トアームが登場 ・Dobot
・UFACTORY ・Elephant Robotics など 【価格帯】 卓上:約8~12万 小型:約30~60万
myCobot 280 Elephant Robotics社 myCobot 280 DoF : 6 Payload
: 250g Working radius : 280mm M5Stackで制御可能 https://www.elephantrobotics.com/en/mycobot-en/ より
myCobotのセットアップ • 台座を付ける • ファームウェアの書き換え ◦ MyStudioを使ってTransponderを書き込む ◦ (参考)「myCobotのすべて」からあげ氏 ▪
https://zenn.dev/karaage0703/books/3be6bad93b0c8e • pymycobotのインストール $pip install pymycobot 開発用PC myCobot serial on USB
ロボットの眼 Intel RealSense L515 depth range : 0.25 -
9.0m depth resolution : 1024x768 RGB resolution : 1920x1080 ※残念ながら2022年2月をもってL,F,Tシリーズはディ スコンになることがIntelよりアナウンスされました 代わりにDシリーズを使ってとのことです. https://www.intelrealsense.com/message-to-customers/
RealSenseのセットアップ • SDKのインストール ◦ https://github.com/IntelRealSense/librealsense/releases • RealSense Viewerで動作確認 • pyrealsense2のインストール
$pip install pyrealsense2
構成を考える ピッキングロボットの構成 • RealSenseの取付位置 ◦ 全体を見渡せる上部に配置 • myCobotの位置 ◦ ワークと同じ高さの地面に配置
• ワークの運搬先 ◦ とりあえず今回はアームの横に置く (持ち上げられれば良い)
• AR(ArUco)マーカで地面とアーム先端の初期位置を検出 RealSenseによる座標系の検出(1) 画像からARマーカーを使って,カメラに対する地 面座標の回転を計測することで,地面に対するカ メラの姿勢が分かる.
RealSenseによる座標系の検出(2) • ARマーカによる回転&平行移動ベクトルの計測 corners, ids, _ = cv2.aruco.detectMarkers(color_image, aruco_dict) _,
rvec, tvec = cv2.aruco.estimatePoseBoard(corners, ids, board, camera_matrix, dist_coeffs) • カメラ内部パラメータの取得 import pyrealsense2 as rs ~割愛~ profile = pipeline.start(config) camera_profile = rs.video_stream_profile(profile.get_stream(rs.stream.color) intrinsics = camera_profile.get_intrinsics() camera_matrix = np.array([[intrinsics.fx, 0, intrinsics.ppx], [ 0, intrinsics.fy, intrinsics.ppy], [ 0, 0, 1]]) dist_coeffs = np.array(intrinsics.coeffs) 座標軸の回転ベクトル,平行移動 ベクトルが取得できる
座標を可視化すると捗る • 3次元座標変換の計算結果が確認できるといろいろ捗る • OpenGLを使ったグラフィック表示 http://pyglet.org/ • クロスプラットフォームのマルチメディア ライブラリ •
使い方はrealsenseのサンプルコード参照 https://github.com/IntelRealSense/librealse nse/blob/master/wrappers/python/example s/pyglet_pointcloud_viewer.py
野菜の位置の検出 • アーム直下の地面上24cmのライン上をサーチ • 3次元カメラ座標系⇒2次元Depth画像座標系⇒3次元カメラ座標系 (将来的には,深層学習を用いて掴みやすい位置の検出までやりたい...) 野菜検出ライン[pix]
RealSenseで投影・逆投影 # 3次元カメラ座標系->2次元depth画像座標系 p0 = rs.rs2_project_point_to_pixel(depth_intrinsics, points[0]) # ライン右端 p1
= rs.rs2_project_point_to_pixel(depth_intrinsics, points[1]) # ライン左端 # 2次元depth画像座標系->3次元カメラ座標系 points = rs.rs2_deproject_pixel_to_point(depth_intrinsics, [x, y], d)
アームを野菜位置まで動かす • 目的の位置までロボットアームを動かすには ◦ 運動学,逆運動学,軌道計画などロボット工学の知識が必要(ニワカに は難しい...) • とりあえず俺は三角関数で行く!
myCobotの動かし方(1) • 各関節の角度と移動速度を指定すればよい from pymycobot import MyCobot, utils port =
utils.detect_port_of_basic() cobot = MyCobot(port, 115200) cobot.sync_send_angles([0., 120., -140., 120., 90., 90.], 30) 各関節の角度:[J1, J2, J3, J4, J5, J6] 移動速度 : 0~100 【注意点】慣れるまではゆっくり動かすこと. ・指を挟みます(それほど痛くはないがビックリします) ・アームが勢いをつけて机にぶつかったりもします
myCobotの動かし方(2) • 結構ガバい ◦ 指定した位置にきっちり止まるとは限ら ない • 目的の角度に到達するまで動かし続ける angles =
cobot.get_angles() # 現在角度の取得 if angles != target_angles: ~目標角度を強める~ cobot.sync_send_angles([j1, j2, j3, j4, j5, j6], 30)
実験
実験(失敗編)
まとめ • Pythonでロボットアームを動かすことができた ◦ ロボットの眼 ⇒ RealSense : pyrealsense2 ◦ ロボットアーム ⇒ myCobot
: pymycobot • 単純にロボットアームは超楽しい! ◦ キュウリを持ち上げた時には感動すら覚えた ◦ いろいろな作業をやらせてみたい
退屈なことはPythonにやらせよう https://automatetheboringstuff.com/ • やっかいなことに退屈な仕事はなくならない • 変えられないことを受け入れる冷静さと変え られることを変える勇気を(二ーバーの祈り より) 最近特に仕事を選ばなくなった Python君に助けてもらおう!
ご清聴ありがとうございました.