SlideShare a Scribd company logo
1 of 17
ProtoLotus
(クリック操作で自作LEGOパーツやユニバーサルプレートを作ってみよう)
2022/11/21
#ヒーローズリーグ 2022
いのうえ みのる
名前:井上 稔(Minoru INOUE)
出没先: コミュニティ“ゆるメカトロ”
Facebook: minoru.inoue.90
Twitter : @henjin01_Fab
コンテストごとはひさしぶり〜
ものづくりって大変
ユニバーサルプレートで
タミヤのギアボックスに合う部品を
加工で作ろうとして間違えた…
刃物で怪我をした…
既存のLEGOテクニック部品だと
ちょっと足りない…
手持ちのLEGOブロックが少ない!
欲しいのだけど入手しづらい…
ギアボックス画像はこちらから引用: https://www.tamiya.com/japan/products/70189/index.html
なにかと部品は自炊したい!
Protolotusって?
オレオレ仕様のユニバーサルプレートやLEGOテクニックパーツを
自作できるツール フリーソフト!
このテーブルのセルをクリックすると
ブロックが追加・変更・削除される
Githubページ
コードもバイナリも
公開!
(Windows or Mac)
- 開発言語:Python
- GUI:pyQtと
OpenGL
- STL出力:numpy-stl
3Dプリンタで出力できるよ!(作品例)
早速DEMOります!
これ作ります。
ツール上 3Dプリント後の現物
(PETG、2時間位で出力)
まとめ
ね、楽でしょ?
1. 操作はマウスとCtrl+数字キーだけ!
2. CADの知識いらない!
3. プレゼン時間のたった4分で部品が作れる!
自分好みの部品はチョッパヤで自炊しよう!
アイデアに時間を全プッシュだ!
4. 好きな素材で部品が作れるよ!
ex: ゴムっぽく(TPU), 木の温もり(Wood PLA), 頑丈(PETG)
以降は予備
ロジックについて考えたきっかけ
昔のツールは適当だった。動作モッサリで拡張性も微妙だった。
ブロック追加ごとに
再描写
→ブロック数が増える
と待ち時間増加
ブロックの種類が
今後も増えそう
→データ構造も考える
必要あり
差分だけ変更を加えて、各ブロックにデータをもたせる形にする必要があった
画面描写と
STL作成は
分離したい
1 2
3 0
…
…
1 2
1
2
データ構造
• ブロック値(1,2,3)
• ブロック座標(row, column)
• ハッシュ値(row+column最大値*column)
• ブロック設定(タミヤ互換 or LEGO互換)
• メッシュデータ(GLMesh)
column
row
Table:
データなし
(1,1)に1のブロックを置く ハッシュ値1
(1,2)に2のブロックを置く ハッシュ値2
(2,1)に3のブロックを置く ハッシュ値11
クリックした順に
ブロック操作が入る
キュー的にOpenGL表示データを一列に格納する形を採った
また、ハッシュ値から一意にブロックを特定できる。
…
Queue:
ブロック追加時
1 2
3 0
(1,1)に1のブロックを置く ハッシュ値1
(1,2)に2のブロックを置く ハッシュ値2
…
…
(2,1)に3のブロックを置く ハッシュ値11
1 2
3 1
(1,1)に1のブロックを置く ハッシュ値1
(1,2)に2のブロックを置く ハッシュ値2
…
…
(2,1)に3のブロックを置く ハッシュ値11
(2,2)に2のブロックを置く ハッシュ値12
(2,2)をクリック
0表示になっている箇所をクリックすると、
ハッシュ値と一緒にブロック操作が入る
1 2
1
2
1
ブロック変更時
1 2
3 1
(1,1)に1のブロックを置く ハッシュ値1
(1,2)に2のブロックを置く ハッシュ値2
…
…
(2,1)に3のブロックを置く ハッシュ値11
1 3
3
(1,1)に1のブロックを置く ハッシュ値1
(1,2)に3のブロックを置く ハッシュ値2
…
…
(2,1)に3のブロックを置く ハッシュ値11
(2,2)に2のブロックを置く ハッシュ値12
(1,2)をクリック
→ハッシュ値2探す
テーブルクリック時にハッシュに該当するブロック値を変える
(2,2)に2のブロックを置く ハッシュ値12
1 2
1
2
search!
ブロック削除時
1 2
3 1
(1,1)に1のブロックを置く ハッシュ値1
(1,2)に2のブロックを置く ハッシュ値2
…
…
(2,1)に3のブロックを置く ハッシュ値11
(2,2)に2のブロックを置く ハッシュ値12
1 2
1
2
(1,1)に1のブロックを置く ハッシュ値1
(2,2)に2のブロックを置く ハッシュ値12
ハッシュ値11
delete!
1 2
1
…
…
0
(1,2)に2のブロックを置く ハッシュ値2
(2,1)をクリック
→ハッシュ値11探す
数字のカウントアップが一巡した(3→0)場合には
キューからブロック操作を削除する
STL出力
1 2
3 1
(1,1)に1のブロックを置く ハッシュ値1
(1,2)に2のブロックを置く ハッシュ値2
…
…
(2,1)に3のブロックを置く ハッシュ値11
(2,2)に2のブロックを置く ハッシュ値12
1 2
1
2
がクリックされたタイミングでテーブルを総なめして作成する
For二重ループで
0以外を総なめ
キュー内のデータはOpenGL表示用の
データ=STL作成では使わない
できたこと
問題としていたことはひとまずパス
ブロック
追加ごとに再描写
→待ち時間増加
ブロックの種類が
今後も増えそう
画面描写と
STL作成は
分離したい
キュー&ハッシュでデータを個別管理
操作はブロック個別になった
ブロックの描写単位でブロック情報をもたせた
ブロック値のカウントアップで定義可能
画面描写時とSTL作成時で参照するデータが
異なるため、独立性が高くなった
まとめ(かんそう)
趣味ツールとはいえ、データ構造はソフトウェアのコア
アイデアを送り出すまではスピード重視
But→送り出したあとは手早くデータ構造を見直すべき
データ構造を考えるのはダルい
But→一回決まると後工程が楽
レスポンス面の不便=ロジックとデータ構造の見直し
不便を感じたらドキュメントに起こそう
以上です!

More Related Content

More from MinoruInoue2

自作ユニバーサルプレート&LEGO互換パーツ作成ツールのなかみのはなし
自作ユニバーサルプレート&LEGO互換パーツ作成ツールのなかみのはなし自作ユニバーサルプレート&LEGO互換パーツ作成ツールのなかみのはなし
自作ユニバーサルプレート&LEGO互換パーツ作成ツールのなかみのはなしMinoruInoue2
 
Atom motion+arduino iot cloud+node-redで非接触ボックスを作る
Atom motion+arduino iot cloud+node-redで非接触ボックスを作るAtom motion+arduino iot cloud+node-redで非接触ボックスを作る
Atom motion+arduino iot cloud+node-redで非接触ボックスを作るMinoruInoue2
 
円滑なRumicar開発をするためのtips Rumicar Conference
円滑なRumicar開発をするためのtips Rumicar Conference円滑なRumicar開発をするためのtips Rumicar Conference
円滑なRumicar開発をするためのtips Rumicar ConferenceMinoruInoue2
 
Arduino Cloud IoTとNode-RedでRumiCarを見える化する
Arduino Cloud IoTとNode-RedでRumiCarを見える化するArduino Cloud IoTとNode-RedでRumiCarを見える化する
Arduino Cloud IoTとNode-RedでRumiCarを見える化するMinoruInoue2
 
Aliexpressで買ったエンドスコープが思いの外使えた話
Aliexpressで買ったエンドスコープが思いの外使えた話Aliexpressで買ったエンドスコープが思いの外使えた話
Aliexpressで買ったエンドスコープが思いの外使えた話MinoruInoue2
 
ユニバーサルプレートをnumpy-stlで自作する(Make DIY universal plate with numpy-stl)
ユニバーサルプレートをnumpy-stlで自作する(Make DIY universal plate with numpy-stl)ユニバーサルプレートをnumpy-stlで自作する(Make DIY universal plate with numpy-stl)
ユニバーサルプレートをnumpy-stlで自作する(Make DIY universal plate with numpy-stl)MinoruInoue2
 
MaixduinoにObniz OSを入れて エッジAIとenebularをつなげてみる
MaixduinoにObniz OSを入れて エッジAIとenebularをつなげてみるMaixduinoにObniz OSを入れて エッジAIとenebularをつなげてみる
MaixduinoにObniz OSを入れて エッジAIとenebularをつなげてみるMinoruInoue2
 
Simulinkを用いたtoioラジコン
Simulinkを用いたtoioラジコンSimulinkを用いたtoioラジコン
Simulinkを用いたtoioラジコンMinoruInoue2
 
M5StickVとobnizとenebularを使って死角確認ツールもどきを作ったはなし
M5StickVとobnizとenebularを使って死角確認ツールもどきを作ったはなしM5StickVとobnizとenebularを使って死角確認ツールもどきを作ったはなし
M5StickVとobnizとenebularを使って死角確認ツールもどきを作ったはなしMinoruInoue2
 
第1回 Jetsonユーザー勉強会 AIoTをお手軽に試した話
第1回 Jetsonユーザー勉強会 AIoTをお手軽に試した話第1回 Jetsonユーザー勉強会 AIoTをお手軽に試した話
第1回 Jetsonユーザー勉強会 AIoTをお手軽に試した話MinoruInoue2
 
ObnizとNode-REDでダンボール金庫システムを作った話
ObnizとNode-REDでダンボール金庫システムを作った話ObnizとNode-REDでダンボール金庫システムを作った話
ObnizとNode-REDでダンボール金庫システムを作った話MinoruInoue2
 

More from MinoruInoue2 (11)

自作ユニバーサルプレート&LEGO互換パーツ作成ツールのなかみのはなし
自作ユニバーサルプレート&LEGO互換パーツ作成ツールのなかみのはなし自作ユニバーサルプレート&LEGO互換パーツ作成ツールのなかみのはなし
自作ユニバーサルプレート&LEGO互換パーツ作成ツールのなかみのはなし
 
Atom motion+arduino iot cloud+node-redで非接触ボックスを作る
Atom motion+arduino iot cloud+node-redで非接触ボックスを作るAtom motion+arduino iot cloud+node-redで非接触ボックスを作る
Atom motion+arduino iot cloud+node-redで非接触ボックスを作る
 
円滑なRumicar開発をするためのtips Rumicar Conference
円滑なRumicar開発をするためのtips Rumicar Conference円滑なRumicar開発をするためのtips Rumicar Conference
円滑なRumicar開発をするためのtips Rumicar Conference
 
Arduino Cloud IoTとNode-RedでRumiCarを見える化する
Arduino Cloud IoTとNode-RedでRumiCarを見える化するArduino Cloud IoTとNode-RedでRumiCarを見える化する
Arduino Cloud IoTとNode-RedでRumiCarを見える化する
 
Aliexpressで買ったエンドスコープが思いの外使えた話
Aliexpressで買ったエンドスコープが思いの外使えた話Aliexpressで買ったエンドスコープが思いの外使えた話
Aliexpressで買ったエンドスコープが思いの外使えた話
 
ユニバーサルプレートをnumpy-stlで自作する(Make DIY universal plate with numpy-stl)
ユニバーサルプレートをnumpy-stlで自作する(Make DIY universal plate with numpy-stl)ユニバーサルプレートをnumpy-stlで自作する(Make DIY universal plate with numpy-stl)
ユニバーサルプレートをnumpy-stlで自作する(Make DIY universal plate with numpy-stl)
 
MaixduinoにObniz OSを入れて エッジAIとenebularをつなげてみる
MaixduinoにObniz OSを入れて エッジAIとenebularをつなげてみるMaixduinoにObniz OSを入れて エッジAIとenebularをつなげてみる
MaixduinoにObniz OSを入れて エッジAIとenebularをつなげてみる
 
Simulinkを用いたtoioラジコン
Simulinkを用いたtoioラジコンSimulinkを用いたtoioラジコン
Simulinkを用いたtoioラジコン
 
M5StickVとobnizとenebularを使って死角確認ツールもどきを作ったはなし
M5StickVとobnizとenebularを使って死角確認ツールもどきを作ったはなしM5StickVとobnizとenebularを使って死角確認ツールもどきを作ったはなし
M5StickVとobnizとenebularを使って死角確認ツールもどきを作ったはなし
 
第1回 Jetsonユーザー勉強会 AIoTをお手軽に試した話
第1回 Jetsonユーザー勉強会 AIoTをお手軽に試した話第1回 Jetsonユーザー勉強会 AIoTをお手軽に試した話
第1回 Jetsonユーザー勉強会 AIoTをお手軽に試した話
 
ObnizとNode-REDでダンボール金庫システムを作った話
ObnizとNode-REDでダンボール金庫システムを作った話ObnizとNode-REDでダンボール金庫システムを作った話
ObnizとNode-REDでダンボール金庫システムを作った話
 

HL2022予選:ProtoLotus (クリック操作で自作LEGOパーツやユニバーサルプレートを作ってみよう)