OctoPrintの初期設定をしてUSBカメラを使えるようにする

OctoPrintのインストールを前回行いました。

今回は実際に使うための設定を行います。
USBカメラを接続しWebカメラとして使えるようにします。





OctoPrintは3DプリンタをWeb画面からコントロールするサーバです。
OctoPrint http://octoprint.org/

前回の記事
3Dプリンタ用サーバ"OctoPrint"をRaspberry Pi 3 Model Bで動かしてみる
ではOctoPiをRaspberry Pi 3 Model Bにインストールして動かすまで行いました。今回はOctoPrintの使い方を見ていきます。

OctoPrintに3Dプリンタの設定をする

g-codeファイルを送ってプリントするだけなら特に設定する必要はないでしょう。

OctoPiではCura Engineもインストールされますのでスライスができます。STLなど3Dモデルデータをスライスさせてプリントもする場合にはプリンタの設定をする必要があります。スライサにどんな3Dプリンタを使うか教えなければスライスできませんからね。

OctoPrintのスライサを使うつもりはなくとも、基本的な設定をしないと何か気持ち悪いですからしておきます。

まずはOctoPrintに接続します。
http://octopi.local/

ログインしてプリンタの制御ができるようにします。
画面上の方に"Settings"があるのでクリックします。

シリアル通信の設定


シリアル通信の設定を行います。
お使いのプリンタに合わせてシリアルポートとボーレートを設定します。
BS01では、シリアルポートとボーレートが"AUTO"では接続できませんでした。ポートを指定して、ボーレートを115200に設定してしまいましょう。
"Auto-connect to printer on server start"をチェックしておきましょう。Raspberry Piの電源を入れれば自動的にプリンタと接続されるようになります。

プリンタプロファイルの設定

OctoPrint Settingsの"Printer Profiles"をクリックします。
"Add Profile..."をクリックして使用する3Dプリンタの情報を入力します。

造形可能サイズを"Volume"に入力します。
BS01+の場合、AxisのZ軸の"Invert Control"にチェックを入れた方が使いやすいです。

"Confirm"を押すとプリンタプロファイルが登録されます。
"★"を押してデフォルトに設定します。

ノズル温度の設定


ノズル温度を設定します。使うフィラメントに合わせて追加しておくと良いでしょう。

OctoPrintの画面で選択できるようになります。


ノズルのメンテナンスのためにも設定しておくと良いでしょう。

プリンタ接続時にホームポジションへ移動させる

OctoPrintと接続した時に3Dプリンタのヘッドとベッドをホームポジションへ移動するようにします。


OctoPrint Settingsの1"GCODE Scripts"を開きます。

"After connection to printer is established"に次のコードを入れておきます。

T0
G28 ; home all axes
M204 S2500 ; Set default normal moves acceleration

ホームポジション検出と加速度を設定してみました。

勝手に動くのは危ない、困る、という方は設定する必要ないでしょう。

CuraEngineのプロファイルのインポート

CuraEngineを使ってスライスをしたい場合はスライスの条件を設定しなくてはなりません。
OctoPrint SettingsのCuraEngineをクリックしてCuraのプロファイルをインポートします。

私はCuraを使っていないのでCura 15.04をインストールしてプリント条件を入れ直しました。
CuraのSave Profile... で設定したプロファイルを保存しましょう。そのプロファイルをOctoPrintでインポートすればよいようです。
フィラメントの種類やプリント速度に応じて複数のプロファイルを作ってインポートしておけばOctoPrintでスライスを行う時に選択できるようになります。

Curaでもブリッジや空中に浮いた場所にサポート材を置いてくれない事があります。GCode Viewer画面で空中に浮いた場所にフィラメントを置く事がないか確認しましょう。
こういったチェックが面倒なので、スライスはしないことをお薦めします。

OctoPrintでUSBカメラを使う

OctoPrintにはUSBカメラの映像を配信する機能が搭載されています。3Dプリンタを離れた場所に置く場合はカメラでモニタすると安心ですね。

カメラの映像は
mjpg-streamer (https://github.com/jacksonliam/mjpg-streamer)
により配信されます。すでに動くようになっているためUSBカメラをつなげばすぐに動きます。

とは言ってもすべてのUSBカメラが使えるわけではありません。

使えるUSBカメラ

使えたUSBカメラのリストがあります。

Webcams known to work  

つないだだけで動かせるものと、設定ファイルを修正して動かせるものがあります。

このリストになくとも動くカメラもあるでしょう。まずは手持ちのカメラで試すのが良いかと思います。

OctoPrintでUSBカメラBSW20KM11BKを使ってみる

私はプリンタの様子を写すのに画角が広いカメラが欲しいと思いました。
そこでiBuffaloの200万画素WEBカメラ 120°広角ガラスレンズ搭載モデル BSW20KM11BK を買ってみました。【製造完了したようです。同等品はBSW200MBKだと思われます。】

販売終了 新製品


さっそくつないでみると・・・
BSW20KM11BKはつぐだけでは動きませんでした。

USBカメラが動くようにパラメータを設定する

USBカメラが動かない場合、OctoPiの設定ファイルを修正すると動かせるかもしれません。mjpg-streamerのパラメータを変えます。
先ほどのカメラのリストにも修正例があるのでいろいろ試してください。

OctoPiの設定ファイルでmjpg-streamerへのオプションを指定している箇所は octopi.txt にあります。
SSH接続で編集するには /boot/octopi.txt になります。SDカードをパソコンに挿しても編集できます。パソコンではSDカードのルートにoctopi.txtがあるでしょう。両方とも同じファイルです。

octopi.txtの中に

#camera_usb_options="-r 640x480 -f 10"

という行があります。行頭の"#"を消しましょう。
-r の次にある 640x480 は カメラの解像度です。
-f の次にある 10 はフレームレートです。
これがデフォルト値です。

パラメータの説明はここにあります。
MJPG Streamer configuration

input_uvc.so のパラメータを指定します。これらを変更するとカメラが使えるようになる場合があります。

BSW20KM11BKはフレームレートを30にすると使えました。

camera_usb_options="-r 640x480 -f 30"

設定を変更したらRaspberry Piの電源を切り再起動しましょう。USBカメラは起動前につないでおきましょう。

そしてWeb画面のControlでカメラ映像が表示されていれば成功です。



カメラ映像だけをWebブラウザで見るには
http://octopi.local/webcam/?action=stream
を開きます。
octopi.localでつながらない場合はRaspberry PiのIPアドレスを入れてください。
スマートフォンのChromeでも表示できました。iPhoneはわかりません。

ちなみに解像度を 1920x1080 にしても動きましたが映像の遅延が数秒生じてしまいます。フレームレートを24にすると動きませんでした。

USBカメラが対応する解像度とフレームレートを確認する

USBカメラ BSW20KM11BK が対応する解像度とフレームレートを調べてみます。
"v4l2-ctl" が使えるようです。

v4l2-ctl -d /dev/video0 --list-formats-ext

SSH接続して上のコマンドを打つと対応した解像度とフレームレートが表示されます。
BSW20KM11BKをつないでやってみると次のようになりました。
pi@octopi:~ $ v4l2-ctl -d /dev/video0 --list-formats-ext
ioctl: VIDIOC_ENUM_FMT
        Index       : 0
        Type        : Video Capture
        Pixel Format: 'YUYV'
        Name        : YUV 4:2:2 (YUYV)
                Size: Discrete 640x480
                        Interval: Discrete 0.033s (30.000 fps)
                Size: Discrete 160x120
                        Interval: Discrete 0.033s (30.000 fps)
                Size: Discrete 176x144
                        Interval: Discrete 0.033s (30.000 fps)
                Size: Discrete 320x240
                        Interval: Discrete 0.033s (30.000 fps)
                Size: Discrete 352x288
                        Interval: Discrete 0.033s (30.000 fps)
                Size: Discrete 800x600
                        Interval: Discrete 0.100s (10.000 fps)
                Size: Discrete 1280x720
                        Interval: Discrete 0.125s (8.000 fps)
                Size: Discrete 1920x1080
                        Interval: Discrete 0.200s (5.000 fps)
        Index       : 1
        Type        : Video Capture
        Pixel Format: 'MJPG' (compressed)
        Name        : MJPEG
                Size: Discrete 640x480
                        Interval: Discrete 0.033s (30.000 fps)
                Size: Discrete 160x120
                        Interval: Discrete 0.033s (30.000 fps)
                Size: Discrete 176x144
                        Interval: Discrete 0.033s (30.000 fps)
                Size: Discrete 320x240
                        Interval: Discrete 0.033s (30.000 fps)
                Size: Discrete 352x288
                        Interval: Discrete 0.033s (30.000 fps)
                Size: Discrete 800x600
                        Interval: Discrete 0.033s (30.000 fps)
                Size: Discrete 1280x720
                        Interval: Discrete 0.033s (30.000 fps)
                Size: Discrete 1920x1080
                        Interval: Discrete 0.033s (30.000 fps)
解像度とフレームレートを上げると映像の遅延が気になりだします。モニタに使うには数秒遅延しても問題ないでしょう。

Pixel Format: 'YUYV' の解像度とフレームレートを使う場合は"-y"オプションを追加します。
例えば次のように書きます。


camera_usb_options="-r 800x600 -f 10 -y"

ただし、画像を再変換するのでRaspberry PiのCPUパワーを使ってしまいます。

Setup on a Raspberry Pi running RaspbianNote: If your webcam requires switching to YUV mode in order to work at all, it is strongly recommended to instead use a webcam that natively supports MJPG. For YUV cameras mjpg_streamer will need to transcode all data from the camera to MJPG on your Raspberry Pi, which will put a lot of strain on its CPU (YUV mode at around 30-40% vs MJPG mode at around 1-2%).

カメラの向きの設定


カメラの設置の仕方によっては映像を回転させたい場合があるでしょう。

OctoPrint Settingasの"Webcam"で映像を回転させることができます。



水平方向の反転、垂直方向の反転、反時計回りの90度回転 ができます。

逆さまにするには垂直反転と水平反転の両方をチェックします。

時計回りの90度回転は3つすべてをチェックします。


この設定はOctoPrintのコントロール画面のみに反映されます。ストリーム配信の映像には反映されません。
USBカメラのストリーム配信の映像を回転させる事は出来ないようです。


配信映像をいじるとするとmjpg_streamerのコマンドでやることになるでしょう。

ちなみにinput_uvc.soのヘルプを表示させるにはこうやるそうです。
./mjpg_streamer --input "input_uvc.so --help"

-rotオプションやフリップが使えるか試しましたが機能しませんでした。


USBカメラではなくraspicamの場合はmjpg-streamerのコマンドオプションを追加すれば回転できるのではないでしょうか。私は持っていないので試してません。


広角レンズの良い所

OctoPrintではカメラの映像をタイムラプスビデオとして動画を作成してくれます。プリントの様子をブログに載せる時に使いたいと思っていました。

BSW20KM11BKを選んだ理由は画角が120度あるという点です。
USBカメラをBS01+の上に置いてみました。


この位置から造形テーブルまではとても近いですよね。造形テーブルはどの範囲まで写るでしょうか?


造形テーブル全体が余裕で写っています。ピントも合わせる事ができました。

そうそう、照明用LEDを別に付けています。カー用品店で小さい白色LEDを探してBS01に付けています。カー用品は12Vで動きますのでBS01の電源を使えます。

このカメラは3Dプリントのモニタにちょうど良いと思います。


ヘッド移動とテーブル移動をキーボードで操作する

先ほどのWEB画面のカメラ映像が表示されている場所にマウスカーソルを置いてみましょう。

カメラ画像部分にマウスカーソルを置くと、コントロールボタンと同じ操作をキーボードから行えます。
カーソルキーでヘッドの移動、Homeキーでヘッドのホームポジション、ページアップ/ダウンキーでテーブルの上下、Endキーでテーブルのホームポジション、そして1,2,3,4キーで移動量の変更ができます。

カメラをつないでいなくても、画面の上の方の映像が置かれるであろう場所へカーソルを持っていけばキーボード操作が可能です。
これはとても便利です。

まとめ

これでOctoPrintが使えるようになりました。カメラでモニタもできます。OctoPiはめんどくさいOSの設定をしなくて良いので助かります。
音を配信できないのが残念です。プリントの異常に気付くのは音が変な時ですから。
これに関してはmjpg-streamerではなくgstreamerなどを使えば良い気がします。替えてくれないかなぁ・・・と思うも

Stream the sound of the 3D printerfoosel commented on 23 Mar 2015
"Not going to implement this (I just don't see the use case), if someone wants to give it a go as a plugin, feel free."
だそうです。
mjpg-streamerをkillして、gstreamerやavconvで音だけストリーム配信しようと動かしてみましたがマイクの音が拾えない。なんでだろう・・・ 素のRaspbianならできたんですよね。

Raspberry Pi 3 Model Bの電源はスマホ用2.4Aを使ってますがカメラをつないでも問題なく動いています。電流をモニタしても1A未満です。0.6Aが最大くらいの表示でした。
今のところ1A越えるのを見たことがないです。USBの4ポートから全部0.5Aを吸い出さなければスマホ電源で十分なのでしょうね。

OctoPrintのWEB画面を見ればすぐにわかりますがスマートフォンで使うには画面デザインが細かすぎます。小さい画面で使いたい場合はOctoPrintと連携するAndroid アプリが何種類かあります。そういったアプリと合わせて使えば便利そうです。が、
スマホでファイルをアップロードしてプリントするシチュエーションは少ないでしょう。プリント進捗のモニタに使うだけが多いでしょうか。

実際にプリントする際の操作方法は気が向いたら今後書いてみます。いじってれば判りますよね。ちなみにGCODEファイルをブラウザ画面の左側へD&Dすればアップロードができます。

コメント

最近のコメント

Threaded Recent Comments will be here.