ラベル OpenPnP の投稿を表示しています。 すべての投稿を表示
ラベル OpenPnP の投稿を表示しています。 すべての投稿を表示

2026年7月11日土曜日

OpenPnP:ノズルAuto Changer再挑戦ークラッシュはあったけど元気です

やっぱり自動チェンジがないと不便っす。

少しはPSE-3000 / OpenPnPに慣れてきたので、手動交換をすてて自動交換の道へ踏み出しました。

まず動画をみながら設定していくのですが……どうも設定してApplyを押し忘れてしまいがちです。今どきのコンシューマー用アプリだと「Apply押してないぞ」って指導してくれるのですが、硬派のOpenPnPはそんな風にユーザーを甘やかしてくれません。

オートチェンジャーのノズルホルダーの設定にはFirst〜4thまでの座標設定があるのですが、手順はこんな感じでしょうか。

  1. primary camera / N1, N2 nozzle calibrationを確認しておきます。
  2. まずノズルを全部はずしてホルダーからも外してしまう。
  3. 2つのヘッドについて、手動から自動に設定を変えてApplyする。くれぐれも1つごとにApplyするのを忘れないこと!
  4. Homeボタンを押して座標値を確実に設定します←大事
  5. Machine Setup -> Nozzlesで設定したいノズルを選ぶ
  6. 当該ノズルの真上にカメラを移動して、3rdのカメラ座標設定ボタンを押す
  7. 3rdのz軸値を-8.5にしてApply、ツールへの移動ボタンを押す。ヘッドがノズルの真上で止まります。
  8. 写真の赤の部分の隙間がなくなるまでJogで少しずつノズルをさげていきます。写真の状態だとあと1mmぐらいでしょうか。



    1. ヘッドを0.1mmずつ下げていくと、ノズルホルダーのスリットの間で写真の黄色の部分が下がっていきますので、ノズルの緑の鍔がスリットの中間付近に来るように調整します。
    2. あるいは8のあと0.1mmずつノズルをさげていくと3-5回ぐらいでノズルから「カタ」というスイッチが押されたような音がかすかに聞こえます。そこから0.2mmあげるといい感じに棚の中央に来ます。
    3. 【1と2の解説】ノズルはホルダー内のスリットのようなところに格納されています。ノズルの緑色の鍔と上下方向に0.5mmぐらい隙間があって、ヘッドがいないときには当然下に降りています(重力)。が、ヘッドが近づくとノズルとヘッドが磁石で吸い付いてスリットの上に張り付きます。ノズルとヘッドの隙間がなくなるまで下げて、さらにそこから0.2mm下げると鍔が中間に浮く、という仕掛けです。また、「カタ」と音がするのはスリットの下端に着いたという音なので、そこから0.2mm上げるといい感じに浮く、ということでもあります。説明下手ですまん。
  9. ノズル位置記録のボタンを押してからApplyを押します。
  10. カメラ位置移動ボタン、ノズル位置移動ボタンを押して、スムーズに動作することを確認します。
  11. 3rdのところに、ヘッドとノズルがぴったりフィットする座標がセットされました。
    1. Xの座標値を残りの3つにコピーします。
    2. Yの座標値を2ndにコピーします。1stと4thは初期値のままで良いようです。
    3. Zの座標値を4thにコピーします。1stと2ndは-8.5のままで良いようです。
    4. 忘れずApplyを押します。
  12. 1-4thの意味ですが
    1. 1st = ホルダー手前の上空
    2. 2nd = ノズルの真上。装着時は1stから2ndまで平行移動します。
    3. 3rd = ヘッドとノズルがいい感じにくっついた状態。ホルダーの中で少し浮いた状態になっているので、出入りの時にホルダーと激突しないように調整を繰り返すと不穏な音がしなくなります(真顔
    4. 4th = 3rdで吸着したノズルを手前に引っ張ってくる座標。
    5. つまり、装着時は空のヘッドが1→2→3→4と移動し、外す時には逆です。
  13. ともかく3rdに「ノズルがヘッドに吸着していて少しホルダの中で浮いている状態」になるのがすごく重要です。
  14. 操作していてクラッシュしちゃったかな?と思ったら、いさぎよくhomeボタンを押しましょう。XY座標が狂うことはほぼないですが、Z軸は結構ずれます。なので、ぶつかったらhomeでcalibrationして過ちを償う必要があるのだ。

という感じです。まぁ慣れてしまえば簡単ですけども……最初は英語の動画をみながら必死でございました。Applyを押し忘れる等の誤操作して「あっ!」と思ったときにはもうクラッシュしてるんですよね……。

過去にやらかしたクラッシュの影響で3Dプリント製のノズルホルダーが少し傾いていて再調整は苦労しましたが、現状、どのホルダーもひっかかったり異音を発することもなく、スムーズに脱着できるようになりました。

記念の動画がこちらです。


よかったよかった。なお、運用のコツなどNotebookLMにOpenPnPのフォーラムをぶち込んでさらってもらったら、「手動でノズルいじるな(そりゃそうだ)」「電源切ったりする前にノズルはホルダーに戻しておけ」という注意書きがありました。

機械が届いて約3か月。ま壊れる操作と回避する方法、調整しなおすために必要な作業……などが見えてきました。やっと初心者レベルに達しました、かね。

……と少し前に書いていた気もしますが……

2026年7月10日金曜日

OpenPnP:ノズルが部品の一部と認識されてしまう件


以前にも書きましたが、OpenPnPはOpenCVパイプラインで画像処理をおこない、ピックアップした部品の底面がフットプリントと一致しているか照合する、なんて処理を行ってくれます。素晴らしいです。

が、なぜかうちではノズルの緑色を部品の一部と認識してしまいます。

NotebookLMに聞いても、カメラをいじれとかスライダーでスレッショルドと最小サイズを調整しろというばかり。やってます、そんなこと。

が、ちょっと愚痴で「ノズルの緑色がうまく認識されていないみたいだ」と言ったらば……ノズルキャリブレーションの機能として、位置合わせだけでなく色合わせもやってくれるのだという情報が!

早く言ってよ……いや、私の聴き方が悪かった。症状を正確に伝えていなかった。

で、その方法ですが、

  • まず設定したいノズルをロード
  • Machine Setup -> Nozzle Tips -> ノズルをクリック -> Calibrationタブ -> 下の方にスクロールしていくとBackground Calibrationというパートが出てきます。色環も出てきます。
  • ここにMethodというプルダウンがありますが、「Brightness And KeyColor」に設定し、Applyします。
  • これで上の方にスクロールして戻り、キャリブレーションボタンをクリックし、また一番下に戻ると……おお!めでたく色相環(環じゃないな、なんて言うんでしたっけ)の緑色がアクティブに!!

これでノズルの緑色が見事に除外されます。

ついでにまた一番上までスクロールして、Auto Recalibrationの設定を「NozzleTipChange」にするとノズルを交換するたびに自動的に色彩と位置を較正してくれるので、部屋の照明が変わったりしても大丈夫です。

よかったよかった。

ついでにTips

ときどきチップ抵抗を吸い上げると横倒しに吸っていることがあります。ノズルが降りる時に押しつぶしているかそれとも密着が足りないのかと高さを微調整して直ったこともあったのですが今日は頑固に直りませんでした。

試行錯誤の結果、一段階太いノズルをつかうことで解決しました。

たとえば、ノズルを売っているお店などでは503ノズルは0402/0603、504は0603/0805/1206……等と書いてあるのですが、0603は504で吸う方が安定します。

まぁあまりノズルが大きすぎると中に吸い込まれちゃいますので限度はありますけども(それを懸念して細いノズルを選んでいました)。

試行錯誤の一つとして頭の片隅においといていただければ。

2026年7月4日土曜日

OpenPnP:Reference Auto Feederで4mmピッチ以外の部品を使う方法

Reference Auto Feederは穴間隔=部品間隔=4mmという前提で作られているので、そのままでは部品間隔2mmの0402には対応できません。PSE-3000の動画に説明がありました。


動画を送りながら設定するのは煩雑なので、メモとしてまとめました。

  • フィーダーのIDはxxxとします。実際の番号で置き換えてください。
  • Machine Setting→Heads→Actuator、ReferenceActuatorを追加し、追加したactiatorをクリック
    • DriverはCH、IDとして「feeder id xxx」を入力、
    • Machine CoordinationをWaitfor, none, noneに変更、Apply
  • Machine Setting→Drivers→USB SERIAL CH341を選ぶ
    • Gcodeタブ
      • Head Moutable : 上で登録した「feeder id xxx」を選ぶ
      • Setting:ACTUATE_BOOLEAN_COMMANDを選ぶ
      • Gcodeとして「M600 Nxxx F1 T」を入力、Apply
  • Feeders
    • ReferencePushPullFeederを追加、当該feederをクリック
      • configurationタブ
        • Partを選ぶ
        • カメラで下から2番めの部品をPick Locationのカメラ座標として指定
        • ノズル先端を部品にくっつけて保存、ノズルを動かさずにそのままAutoSetupを実行。正しいところに移動するか確認
          • ※ノズルクラッシュで散々痛い目にあってきたので「P」に戻してから操作したいのですが、Zを「P」で戻してからAutoSetupを押すとZ座標がキャンセルされてしまう症状に頭を抱えました……
      • push pull motionタブ
        • Feeder idとしてfeeder id xxxを選び、ほかは触らずApply
  • 動作確認
    • feederでピックアップ→partのbottom visionで確認……を3回繰り返して問題なければOK
    • ※3回繰り返すのはfeed動作も含めて確認するため

 という感じです。自分のメモですが、わからないところがあれば聞いてください。

2026年6月28日日曜日

OpenPnP : Stripe Feederもどき

PSE-3000にセットしたStripe Feederもどき

OpenPnP実装機には部品をセットするためのfeederが何種類も用意されています。その一つにStripe Feederというものがあって、これはカットテープをセットして使います。

SMDテープのフィード穴と部品の位置は規格で決まっていて、OpenPnPはフィード穴を光学的に認識して、そのデータをもとに部品の位置決めをしてくれるらしいです。

OpenPnPプロジェクトで公開されているfeederはテープを挟み込んだり、スライドすると部品のところだけ窓があくようになっていたりと凝っているのですが、私は単なる直方体(写真緑色のやつ)に両面テープ(ナイスタック02の5mm幅……最初01を試しましたが弱すぎて駄目でした)で固定しています。

緑の板の下面にはゴムシート磁石を貼りPSE-3000に固定しています。

黄色いマスキングテープは、一部だけ剥がしたカバーテープを抑えるためのものです。調整が終わるまで光学認識などに最低限必要な箇所だけ見えるようにしておきます。

弊社実装機部門では、ある程度共有できる部品とプロジェクト固有の部品はstripe feeder、100nFや10kΩなど汎用性の高い部品はAuto Feeder、という使い分けをするつもりです。

余談ですが、今回初めてPolymakerのPolylite PETGを使ってみました。今まで「PLAは臭いけど、PETGはとっても臭い」というイメージだったのですが、このPETGあんまり臭くないんですよね……いつものBambu labのPLAマットよりも臭くないぐらいで。まぁ匂いがしないから害がないとは言わないですが、やっぱり臭くないほうが使いやすいです。

ただ……お値段がBambu PLAの2倍ぐらいするので、ちょっとつらいですw

2026年6月20日土曜日

OpenPnP:バックラッシュ!?(解決)

ノズルチェンジャーが衝突事故を起こしてしまい、その後、topカメラの照準と実際の部品実装位置がズレてしまいました。

OpenPnPは「ノズル装着状態の現状把握処理」があまくて、「画面上にN1にノズルがセットされている」と表示が出ている状態なのにJobを走らせると「N1にノズルを取り付けよう!」と動いていってしまって、装着済ノズルとノズルチェンジャー上のノズルが激突します。

アライメントが狂ったりノズル台が破損したりの大惨事です。とりあえずオートチェンジャー使用は諦めて手でノズル交換する運用で行こうと思っています。

で、狂ったアライメントの調整方法について店主さんに問い合わせたところ、N1とN2に504ノズルをセットした上でIssues & SolutionsでSolvedになっている以下の3つをRe-openしてやり直し

  1. Primary calibration fiducial position and initial camera calibration
    1. テスト基板の位置合わせマークまでjogで移動して開始→マークの位置とカメラの基礎的な調整などが自動的に実施される
  2. Nozzle N1 offsets for the primary fiducial.
  3. Nozzle N2 offsets for the primary fiducial.
    1. N1/N2に504ノズルを装着してjogを使ってノズル先端をテスト基板の位置合わせマークに正確に移動して確定→実際のノズル先端座標とカメラ座標などが設定

さらにMachine Setup>Nozzle Tips>Calibration>CalibrateボタンをN1, N2に対して実施すること、等の指示をもらい、無事解決できました。これが1か月ほど前のこと。

その後ちょっとソフトウェアとかはんだ付けが忙しくて実装機に障っていなかったのですが……1ヶ月後に時間ができたので試そうとすると正しく動いてくれません。通常の手順通り

  1. 基板の実装データを読み込む
  2. 原点をセットする
  3. Fiducial点(位置合わせマーク)で自動校正→基板の位置やセット時の傾きが自動補正

これで以前は基板が正しくセットされていたのですが……なんど試してもズレます。

上に100mm、下に100mmの動きを指示すると原点に戻らないので、典型的なバックラッシュが起きている?と推定しました。

ただ、うちに到着してまだ2か月。稼働時間などからまだベルトが滑ったりすることは考えにくい状態です。結果、店主さんは「キャリブレーションこの手順でやってみて」「キャリブレーションでここを確認して」とキャリブレーションを疑い、私はメカのトラブルを疑う状況に。起動した直後は比較的誤差が少ないのに試していると次第に誤差が多くなる症状など、メカトラブルの典型ではないですか?私はそう思い込んでおりました。

が。

再び少し時間が取れたので試していると、急にtop vision cameraの映像がボケて来ました。

フォーカスは機械式なので調整しようとカメラに触ってみるとレンズカバーというかフォーカスリングがガタガタに緩んでしまっていました。画像をみながらリングを回していくとしっかり締めたところでカチッとフォーカスが合いました。

この状態で出荷時の設定ファイルに戻し、キャリブレーションを実施し、基板のfiducial校正を実施すると……見事ズレが解消しました! バックラッシュっぽい症状はカバーが衝撃・加速度でずれたりして起こっていたのでしょうね。

キャリブレーションでもメカでもなく光学系のトラブルだったとは……。

個人的にはちょっと大きな買い物だったので、買ったばかりでぜんぜん投資を回収できていないうちに壊してしまったことにショックを受けていたのですが、助かりました。

日本ではあまりOpenPnP / PSE-3000を使っている方は少ないようですが、まぁこんな問題と解決があったよ、ということを記録しておこうと思います。

2026年5月6日水曜日

OpenPnP:Bottom Vision Pipelineがうまく行かない時

いろいろいじっているうちに不調になってしまいまして。

リカバーで苦労するんだったら、その経緯と結果をここに「こういうpipelineを設定すればバッチリ!」って書こうと思ったのですが……

  1. パーツのbottom vision pipelineをリセットする
  2. 調整したい部品をノズルに吸い付ける
  3. カメラのブライトネスを調整する
    1. Machine SetupのCameraのDevice Settingタブで、全部の数値をデフォルトに戻してAutoを外す
    2. Brightnessを±2ぐらいの範囲で調整する
    3. Partタブで調整したい部品をクリックし、Bottom Vision Settingタブを選び、Test Alignmentボタンをクリックし、ノズルの先の部品が正しく赤枠で囲まれているかを確認する
    4. 囲まれていなかったら2に戻る

これだけでした……要するに、パイプラインはいじらずにカメラをいじれってことです(ヤサグレ

といいますか、pipelineの各項目やその関連についての情報がないんですよね……どなたか見つけたら教えてください。

どっとはらい。

Tips

Machine Setup->Cameras->OpenPnp Capture Camera Bottom VisionのDevice Settingタブで、Brightnessなどの数値を変更してもApplyが有効になりません。

バグじゃん?と思ったけど、設定の下の方を見てみたら「reapply to camera」というボタンがありました。ここで書き込むようですが、でも押さなくてもそのまま反映されているっぽいです。

設定項目それぞれにAutoのチェックボックスがあるんですが、Autoにしても遅くてpipelineには間に合いません。地道に設定しましょう。

Bug?

まだ調査中ですが、Reference Auto Feederで、左下のパネルのActuatorタブから"Set feeder address"でIDをセットして、"Feeder Forward"ボタンからIDを指定するとちゃんとフィードするんですが、メイン画面のFeedersタブからfeedしても動いてくれません。泣いてます。

メイン画面でパーツをピックアップしてノズルに吸着した状態だと真空ポンプがうるさいです。用が終わったらさっさと左下パネルのSpecialタブからDiscard / Recycleしていたのですが、その状態はすぐ上のnozzle表示には反映されるのですが、メインパネルの状態には正しく反映されないようで、アプリを再起動しないと正常になりません。

どうも左下のパネルとメインパネルとの間の連携うまく行ってない感じですね。昔Java屋だった時代もあるので、いろいろと昔の日々を思い出しております。

なお、その状態でも実装するときにはちゃんとフィードされます。どうなってんだ。使い方の問題?ごめんなさい←先に謝っておくという生き方

仕様?Bug?

もう一つ困っているのは、ノズルの状態をアプリがしっかり把握していないということです。あとで別の記事にしますが、ノズルを持った状態のままノズルチェンジャーに移動してノズル同士が衝突して大惨事になります。こっちのメニューでの保持と別のメニューでの保持が競合しているというか物理的な状態として共有されていないというか……防げば防げる事故なのですが、起きる事故は必ず起こります。決定的な回避方法がないので、現在はオートチェンジャーは使わない方向で運用しています。

2026年5月2日土曜日

OpenPnP:Bliend Feederのレンダリング修正

OpenPnPはオープンソースなので、部品を供給するフィーダーが何種類も3Dプリントで作れるように公開されています。ヘッドで自動的に送るもの、電動、テープを貼り付けて静置するものなどいろいろです。

その一つのBlinds Feederは、3Dプリントした土台にテープをセットしてカバーの透明シールを剥がし、同じく3Dプリントしたフタを被せるようになっています。フタをスライドすると中身が飛び出さないようになり、実装のときにはフタをスライドして中身が見えるようにしてから稼働します。

どういう部品(カットテープ)を使うかをスクリプト?でセットすると、OpenSCADというやはりオープンソースのツールが3Dでレンダリングしてくれます。そのSTLを3Dプリンタに持っていけば、部品名のばっちり入った専用フィーダーが手に入るという素晴らしさ。

なのですが……試すとラベルが出力できません。

Claude Opusさんに相談したら3回ぐらいのやりとりで問題が修正されました。

いやー……大したもんだ。

ちなみに、冒頭の画像は、以下のスクリプトで生成されたものです。

    arrayed_tape_lanes=      [
        LaneDefinition(1, tape0402,   ["R0402-316K"]), 
        LaneDefinition(1, tape12mm,   ["LTC4011CFE"]), 
        LaneDefinition(1, tape12mm,   ["TPS630701"]), 
        LaneDefinition(1, tape0402,   ["C0402-100nF"]), 
        LaneDefinition(1, tape0402,   ["R0402-100K"]), 
        ],    

いやー……大したもんだ。

なお、光学認識の精度を高めるために、緑色のフィラメントを使うとクロマキーあれこれで認識精度がよくなるらしいです。

修正したスクリプト?はgithubに上げておきます。オープンソースほんと何もわからんのですが、とりあえず元がGPL 3.0なので公開しておかないといけないよね、ということで。

2026年5月1日金曜日

OpenPnP:Tips:ズレた!?

OpenPnPの実装機PSE-3000を順調にテスト中です。

が。模様替えしていて掃除機で強打してしまいました。

ヘッド(ピックアップを上下させるところ)が曲がってしまったようで、0.05mmほど部品がズレて置かれるようになってしまいました。

光学的な処理は問題ないので、たぶんカメラ位置とピックアップ軸とがずれたのではないか?という推測のもと、関係しそうなところを片っ端からいじっていたら(原始人)、見つかりました。Machine Setup→Heads→ReferenceHead H1→Nozzlesの下に2つノズルがあって、私の場合、両方ともズレますので個々に


Configuration→Coordinate Systemを直します。今回、上に0.05mmほどズレるので、Yの値を0.05mm変えたところ、無事真ん中に置かれるようになりました。

焦りました……自分のミスなのでメーカー製品だったら、サービスマンに来てもらって10万円ぐらい請求されかねない事態でしたが、オープンソース製品こういうところ助かります。

ソフトの改良などでオープンソースに貢献する日が来るかどうかわかりませんが(バグはいくつか見つけましたが)、とりあえずTIPSを公開しつつ恥を晒して生きていこうと思います。