mjpg_streamer でUVCカメラのピントを固定して利用

3Dプリンターのプリントを ラズベリーパイで制御させるため、OctoPrint を使ってます。

USB カメラを使ってストリーミング表示と保存をして、プリントの進捗確認や失敗時の原因確認に使っています。これの覚書。

ストリーミングはmjpg_streamer 利用。下記コマンドで実行。

mjpg_streamer -b -o "output_http.so -n" -i "input_uvc.so -f 1"

ただし、ピントがあわないのが悩みの種だった。プリントヘッドがあちこち動いてそのたびにAutofocusでピントが背景のほうにあってしまう。

mjpg_streamer の output_http.so ではサンプルでAutofocus無効にして手動focusが設定できる。サンプルは output_http.so のオプションとして -w でフォルダ指定して実行。

mjpg_streamer -i "input_uvc.so -f 1" -o "output_http.so -w /usr/local/share/mjpg-streamer/www/"
これ。streamで見ながら数字を変更すると、フォーカスが動くのが確認できる。

但し起動のたびにピント変更も面倒だし、セキュリティ上もサンプル出しておくのも微妙。

そもそもどうやっているのかとみていると、USBカメラの規格でUVCがあり、これは v4l2-ctl コマンドで制御できることが判明。

フォーカスを手動にして、手前に固定するコマンドをmjpg_streamer起動前に記載して解決。

#!/bin/sh
v4l2-ctl -d /dev/video0 -c focus_auto=0
v4l2-ctl -d /dev/video0 -c focus_absolute=29
mjpg_streamer -b -o "output_http.so -n" -i "input_uvc.so -f 1"

v4l2-ctl は mjpg_streamer インストール時に導入済みだが、単体はv4l-utils でインストールできる。

sudo apt-get install v4l-utils

USBカメラの対応コマンドは 下記で確認できる。

v4l2-ctl -d /dev/video0 --list-ctrls-menu

USBカメラの情報は下記。autofocus が無効になっているのが分かる。

v4l2-ctl -d /dev/video0 --all

Driver Info:
Driver name : uvcvideo
Card type : Microsoft LifeCam Studio(TM):
Bus info : usb-3f980000.usb-1.3.1
Driver version : 4.19.97
Capabilities : 0x84a00001
Video Capture
Metadata Capture
Streaming
Extended Pix Format
Device Capabilities
Device Caps : 0x04200001
Video Capture
Streaming
Extended Pix Format
Media Driver Info:
Driver name : uvcvideo
Model : Microsoft LifeCam Studio(TM):
Serial :
Bus info : usb-3f980000.usb-1.3.1
Media version : 4.19.97
Hardware revision: 0x00000113 (275)
Driver version : 4.19.97
Interface Info:
ID : 0x03000002
Type : V4L Video
Entity Info:
ID : 0x00000001 (1)
Name : Microsoft LifeCam Studio(TM):
Function : V4L2 I/O
Flags : default
Pad 0x01000007 : 0: Sink
Link 0x02000013: from remote pad 0x100000a of entity 'Extension 5': Data, Enabled, Immutable
Priority: 2
Video input : 0 (Camera 1: ok)
Format Video Capture:
Width/Height : 640/480
Pixel Format : 'MJPG' (Motion-JPEG)
Field : None
Bytes per Line : 0
Size Image : 614400
Colorspace : sRGB
Transfer Function : Default (maps to sRGB)
YCbCr/HSV Encoding: Default (maps to ITU-R 601)
Quantization : Default (maps to Full Range)
Flags :
Crop Capability Video Capture:
Bounds : Left 0, Top 0, Width 640, Height 480
Default : Left 0, Top 0, Width 640, Height 480
Pixel Aspect: 1/1
Selection: crop_default, Left 0, Top 0, Width 640, Height 480, Flags:
Selection: crop_bounds, Left 0, Top 0, Width 640, Height 480, Flags:
Streaming Parameters Video Capture:
Capabilities : timeperframe
Frames per second: 7.500 (15/2)
Read buffers : 0
brightness 0x00980900 (int) : min=30 max=255 step=1 default=133 value=82
contrast 0x00980901 (int) : min=0 max=10 step=1 default=5 value=5
saturation 0x00980902 (int) : min=0 max=200 step=1 default=103 value=103
white_balance_temperature_auto 0x0098090c (bool) : default=1 value=1
power_line_frequency 0x00980918 (menu) : min=0 max=2 default=2 value=1
white_balance_temperature 0x0098091a (int) : min=2500 max=10000 step=1 default=4500 value=4898 flags=inactive
sharpness 0x0098091b (int) : min=0 max=50 step=1 default=25 value=25
backlight_compensation 0x0098091c (int) : min=0 max=10 step=1 default=0 value=0
exposure_auto 0x009a0901 (menu) : min=0 max=3 default=3 value=3
exposure_absolute 0x009a0902 (int) : min=1 max=10000 step=1 default=156 value=156 flags=inactive
pan_absolute 0x009a0908 (int) : min=-529200 max=529200 step=3600 default=0 value=0
tilt_absolute 0x009a0909 (int) : min=-432000 max=432000 step=3600 default=0 value=0
focus_absolute 0x009a090a (int) : min=0 max=40 step=1 default=0 value=29
focus_auto 0x009a090c (bool) : default=1 value=0
zoom_absolute 0x009a090d (int) : min=0 max=317 step=1 default=0 value=0

ラズパイでUSBカメラ使う時は、セルフパワータイプのUSBハブ利用の事。

delta型 marlin 2.x ファームウェアコンパイル時の注意事項

備忘録。delta型の3dプリンターのボードを32bitに交換した際の注意点。

ボードの型番ベンダーの資料などから探して、 Configuration.h に記載。
今回は #define MOTHERBOARD BOARD_MKS_SGEN_L
プルーブ(ベットの自動レベリング用センサー)#define FIX_MOUNTED_PROBE のあとで
Z_MIN_PROBE_PIN に指定する。delta型ではメーカー設定をそのまま使えないことがある。Z_MIN_PIN が未指定だったり、Z_MAX_PINがZ_MIN_PROBE_PINに指定されたり。
今回は Marlin\src\pins\lpc1768\pins_MKS_SGEN_L.h にdefine Z_MIN_PROBE_PIN Z_MIN_PIN を追記。
M119 コマンドで結果確認。
TMC2208 UARTチェック#define X_DRIVER_TYPE  TMC2208 と設定。
物理的にTMC2208接続横のUARTピンを有効にする。
M122コマンドで結果確認。
delta設定delta の example configrationを利用するが、設定値は下記を注意。
FEEDRATE、ACCELERATION 、JERKはX,Y,Zとしてα柱、β柱、θ柱の設定を変更するため、Zの値に要注意。X,YとZを同じ値にしないと、θ柱のみ動きが微妙に変わる。
TMC2208利用時は Configuration_adv.h 中の
#define Z_HYBRID_THRESHOLD     をX,Yと同じにしておく必要あり。

3Dプリンタ チューニング覚書

HE3D K200(デルタ型 ヒートベッド 22cm円形 )のチューニング覚書。

実施内容 効果など
ヒートベッド固定良。
付属のものはヒートベッドが動いてダメ。Kossel Adjustable Bed Clamp by stefel77(http://www.thingiverse.com/thing:1732494)が便利。ただしガラス板分の高さが足りないのを無理くりつけている。
ヒートベッドにガラス板 大変良。
確実に平面になる。今回一番効果が高い。
自動レベリングは Delta Auto Calibration のみ良。
ガラス板+ ” Delta Auto Calibration”のみが一番調子よい模様。
ガラス板なしでもauto bed leveling は3pointのほうが調子が良い。
AUTO_BED_LEVELING_UBL (MESH leveling)×
アルミのヒートベッドでは逆におかしくなる。
多分自動レベリングの押す力でベッドがたわんでしまうため。(特に中央寄りのポイント)
ガラス板ならば Delta Auto Calibrationのみで充分。計算量も減るし。
AUTO_BED_LEVELING_3POINT×
上同様。 ガラス板ならば Delta Auto Calibrationのみで充分 。
アルミのみならばUBLよりは良い感じがしたが、正確には不明。 端のみで計測のためかと思うが、ガラス板買う方がよほど良い。
Extruder交換大変良。
吐出が安定しないので過去間違えて買った
BIQU Universal Extruder Kit (SALEで送料無料だった) に交換したら安定した。努力があほらしくなったほど良い。買うなら right を買うべき。 leftだと逆だった。marlin 設定で方向逆にした。
モータードライバ交換TMC2208に交換。大変静かで良い。
モードはメーカー推奨値に従って下記とした。
XYZは stealthChop まま、0.8V。Extruder用は spreadCycleに変更し電圧を0.9Vにしてファンもつけたが、多分0.8VままでOK(Extruder交換後戻していない)
marlin設定では TMC2208_STANDALONE でreverseを true に。下記 Configuration.h参照。
Marlinバージョンアップ
1.x → 2.0
多分1.xと変わらない。
設定ファイルは HE3Dのfacebookサイトからダウンロードしたものを修正。
DELTA_SEGMENTS_PER_SECOND 100 100-150が妥当か。数字を大きくするには32bit化(というか高クロック化)した方がよさそう。

300とかにすると円盤プリントでプロセッサがほぼハング状態になり、時々動きが止まったりしてプリント結果も悪い。
10だと形が変になる。
速度などチューニング
(ガラス板追加後)
プリントスピードは60mm/sec位までまあまあ良い。
accelは 3,000mm/s^2,jerkは 20mm/s^3。
移動速度はプリントスピードと同じにする。

初期レイヤーは 速度10-30mm/sec 、accelは 1,000 mm/s^2 , jerkは5-10mm/s^3。
スプールホルダ ホコリ除け+吸湿防止に。
ダイソーの 透明蓋付き収納ボックス を利用。穴開けてチューブ(3cm位)とワンタッチ接手をつけ、乾燥剤を入れた。
湿度は 概ね30%台で、防湿はOKかと。

Configration.hの主な修正箇所。

#define DELTA

#define DELTA_SEGMENTS_PER_SECOND 100

#define X_DRIVER_TYPE TMC2208_STANDALONE

#define Y_DRIVER_TYPE TMC2208_STANDALONE

#define Z_DRIVER_TYPE TMC2208_STANDALONE

#define E0_DRIVER_TYPE TMC2208_STANDALONE

#define E1_DRIVER_TYPE TMC2208_STANDALONE

#define INVERT_X_DIR true

#define INVERT_Y_DIR true

#define INVERT_Z_DIR true

#define INVERT_E0_DIR true //extruder changed

#define INVERT_E1_DIR false //original extruder

..

Configration.h

3Dプリンタ設定

設定値覚書

HE3D K200入手。Cura4.4 でgcode作成するとなぜか3D造形がいまいちのため、設定値をプリンタ印刷精度を比較中。

設定設定項目名
(def)
結果
加速度インフィル・ウォール・上面底面 加速度 500 mm/s^2 1000
速度インフィル・上面底面
外壁・内壁
50 mm/s
30mm/s
80
50
フローフロー
初期フロー
80%
60%
90%
70%
インフィル形 インフィルパターントライアングル直線×
基準defdef×

結果詳細

設定表面接着
加速度 500mm/s^2○つやなし △底面段差×?
速度 50mm/s○つやあり少し底面段差
フロー80%△わずかにざらつき ×不足によるwave
○底面段差なし
インフィル形 tri×でこぼこ
基準×でこぼこ×インフィル飛び出し
△糸引き?

共通設定を記載しておく

  • 印刷温度 190℃
  • ビルドプレート 50℃
  • レイヤー高さ 0.2mm
  • ライン幅 0.4mm
  • 壁の厚さ 0.8mm
  • 上部表面レイヤー 0(1にすべきか)
  • 上部/底面の厚さ 0.8mm
  • 上層/低層 パターン 直線 [0,90]
  • 外壁優先 Off
  • 隙間重点 全対象
  • 小さなギャップのフィルターアウト ON
  • 壁補正 ON
  • 表面交差量 5%
  • インフィル密度 30%
  • インフィル交差量 10%
  • 引き戻し 有効
  • 引き戻し距離 6.5mm
  • 引き戻し速度 60mm/s
  • 余分な押し戻し量の引き戻し 0.1mm^3
  • 最小抽出距離範囲 6.5mm
  • 移動速度 200mm/s
  • 初期レイヤー印刷速度 10mm/s
  • 初期レイヤー移動速度 30mm/s
  • スカート速度 20mm/s
  • 遅いレイヤー数 1
  • 印刷加速度制御を有効 1000mm/s^2
  • 初期レイヤー加速度 500mm/s^2
  • スカート加速度 500mm/s^2
  • サポート加速度 500mm/s^2
  • ジャーク制御を有効 Off (On,0mm/s~3 だと1mmのwaveが出た)
  • 冷却ファン 50%
  • 小型形態の最大長さ 10mm
  • Small Feature Speed 50%
  • 小型形体の初期レイヤー速度 30%