3Dプリンタ 環境構築

未分類

3Dプリンタ の紹介

2019年冬に 3Dプリンタを入手しました Ender-3 Pro です
3Dプリンタも安くなったもので 3万円前後で買えるようになりました。

Ender-3 Pro

サーバ側の環境構築

ここでは Raspberry Pi 3 model B+ を 3Dプリンタサーバとすべく環境構築します。
大きくは 次の 3段階です。

1. USBカメラのセットアップ
2. Octoprintの導入
3. スライサの導入

USBカメラは 3Dプリント中の状況を遠隔から監視するためのものです。

特に 遠隔監視なんか必要ないのでは? と思っていましたが、
3Dプリントは結構時間がかかるようで 遠隔監視のニーズはあるようです。
この遠隔監視のニーズのために、Octoprintにもカメラ連動の機能があります。

まず Raspberry Pi にカメラを挿して 次のコマンドに反応するか確認します。

$ lsusb
Bus 001 Device 005: ID 1a86:7523 QinHeng Electronics HL-340 USB-Serial adapter
Bus 001 Device 003: ID 046d:0825 Logitech, Inc. Webcam C270
Bus 001 Device 002: ID 0bda:5411 Realtek Semiconductor Corp.
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
$

Webcam C270 というのがカメラです。
大半の USBカメラは Linuxにて認識され /dev/video0 などのデバイスが作られます。

次に Webでアクセスできる 動画ストリーミングサービスを入れます。
mjpg-streamer がよく使われている Webストリーミングのツールです。
手作業でビルドする必要があります。

# apt-get install libjpeg9-dev cmake
# git clone "https://github.com/jacksonliam/mjpg-streamer.git" mjpg-streamer
# cd mjpg-streamer/mjpg-streamer-experimental ; make
# cd .. ; su ; cp -r mjpg-streamer-experimental/ /opt/mjpg-streamer

これで /opt/mjpg-streamer/ にインストール完了します。
次のコマンドで 動画配信を開始できるはずです。

$ LD_LIBRARY_PATH=/opt/mjpg-streamer/ /opt/mjpg-streamer/mjpg_streamer -i "input_uvc.so -f 10 -r 640x480 -d /dev/video0" -o "output_http.so -p 8010 -w /opt/mjpg-streamer/www"
MJPG Streamer Version: git rev: 501f6362c5afddcfb41055f97ae484252c85c912
 i: Using V4L2 device.: /dev/video0
 i: Desired Resolution: 640 x 480
 i: Frames Per Second.: 10
 i: Format............: JPEG
 i: TV-Norm...........: DEFAULT
UVCIOC_CTRL_ADD - Error at Pan (relative): Inappropriate ioctl for device (25)
UVCIOC_CTRL_ADD - Error at Tilt (relative): Inappropriate ioctl for device (25)
UVCIOC_CTRL_ADD - Error at Pan Reset: Inappropriate ioctl for device (25)
UVCIOC_CTRL_ADD - Error at Tilt Reset: Inappropriate ioctl for device (25)
UVCIOC_CTRL_ADD - Error at Pan/tilt Reset: Inappropriate ioctl for device (25)
UVCIOC_CTRL_ADD - Error at Focus (absolute): Inappropriate ioctl for device (25)
UVCIOC_CTRL_MAP - Error at Pan (relative): Inappropriate ioctl for device (25)
UVCIOC_CTRL_MAP - Error at Tilt (relative): Inappropriate ioctl for device (25)
UVCIOC_CTRL_MAP - Error at Pan Reset: Inappropriate ioctl for device (25)
UVCIOC_CTRL_MAP - Error at Tilt Reset: Inappropriate ioctl for device (25)
UVCIOC_CTRL_MAP - Error at Pan/tilt Reset: Inappropriate ioctl for device (25)
UVCIOC_CTRL_MAP - Error at Focus (absolute): Inappropriate ioctl for device (25)
UVCIOC_CTRL_MAP - Error at LED1 Mode: Inappropriate ioctl for device (25)
UVCIOC_CTRL_MAP - Error at LED1 Frequency: Inappropriate ioctl for device (25)
UVCIOC_CTRL_MAP - Error at Disable video processing: Inappropriate ioctl for device (25)
UVCIOC_CTRL_MAP - Error at Raw bits per pixel: Inappropriate ioctl for device (25)
 o: www-folder-path......: /opt/mjpg-streamer/www/
 o: HTTP TCP port........: 8010
 o: HTTP Listen Address..: (null)
 o: username:password....: disabled
 o: commands.............: enabled
$

これで フォアグラウンドでWebサービスが起動します。
http://ラズパイのIP:8010/ へアクセスしてカメラのライブ配信が確認できます。

OctoPrint とは Raspberry Pi でも動作実績のある 3Dプリントサービスです。

3D CADツールからのモデルデータを受けて 3Dプリントできる形に変換して、
3Dプリンタに転送します。 3Dプリンタの操作や管理も可能です。

Pythonベースとなっているようで 導入自体はすごく楽です。
初回インストールは piユーザの例では 次のコマンドで、

$ cd ~/opt
$ git clone "https://github.com/foosel/OctoPrint.git"
Cloning into 'OctoPrint'...
remote: Enumerating objects: 28, done.
remote: Counting objects: 100% (28/28), done.
remote: Compressing objects: 100% (24/24), done.
remote: Total 63768 (delta 3), reused 13 (delta 0), pack-reused 63740
Receiving objects: 100% (63768/63768), 38.94 MiB | 1.64 MiB/s, done.
Resolving deltas: 100% (41372/41372), done.
$ cd OctPrint
$ virtualenv venv
created virtual environment CPython3.7.3.final.0-32 in 12925ms
  creator CPython3Posix(dest=/home/pi/opt/OctoPrint/venv, clear=False, global=False)
  seeder FromAppData(download=True, pip=latest, setuptools=latest, wheel=latest, via=copy, app_data_dir=/home/pi/.local/share/virtualenv/seed-app-data/v1.0.1)
  activators BashActivator,CShellActivator,FishActivator,PowerShellActivator,PythonActivator,XonshActivator
$ ./venv/bin/python setup.py install
…
Installing easy_install script to /home/pi/opt/OctoPrint/venv/bin
Installing easy_install-3.8 script to /home/pi/opt/OctoPrint/venv/bin

Using /home/pi/opt/OctoPrint/venv/lib/python3.7/site-packages
Finished processing dependencies for OctoPrint==1.4.0
$

systemd 用のサービススクリプトを以下に示します。
これを systemd のフォルダに入れておけば、
sudo systemctl start oct などのコマンドで起動できるようになります。

[Unit]
    Description=OctoPrint service

[Service]
    User=pi
    ExecStart=/home/pi/opt/OctoPrint/venv/bin/octoprint

[Install]
    WantedBy=multi-user.target

なお起動には時間がかかります 特に初回は 10分くらい。

起動したら 5000番の Webサービスが立ち上がるので、
ブラウザから http://ラズパイのIP:5000/ へアクセスすることができます。

とりあえず Ender-3 Pro の名前で登録しておきます、後から設定変更できます。

Print be & build volume の設定から print volume の設定を行います。
プリンタの仕様にとりあえず合わせました。

カメラの設定もします。 先ほど試した mjpg-streamerの URLを指定します。

設定が完了すると OctoPrintの再起動が求められます。
USBケーブルをつなぎ Serialポートに /dev/ttyUSB0 があれば選択します。
Connectボタンを押せば 通信接続が行われます。

うまくつながれば 3Dプリンタの状態を見たり プリンタヘッドの駆動を試せます。

OctoPrint

クライアント側のセットアップ

クライアント側は 必要なのは CAD と スライサ です。Win10 試しました。

CADは フリーソフトとしては、 STL形式を出力可能な FreeCAD があります。

FreeCAD

スライサとは STLなどの3Dモデルを 3Dプリンタが出力可能なフォーマットに変換するソフトです。 これもフリーで提供されている Cura があります。

STLを Gcodeという 3Dプリンタに適したフォーマットに変換してくれます。
Gcodeは フィラメントを下から1層ずつ積み上げる 3Dプリンタに従った流れです。
また 印刷物をプレートへ定着させたり 印刷中に倒れたり しないようにするための
サポート ブリム ラフト などの余分印刷の指示もできます。

Cura

Curaは 代表的な 3Dプリンタをサポートしており モデルを指定することができます。

ここでは CR-10 を選択しています。
Ender-3 Pro の製品自体が RepRap というオープン設計に従って製造されたもので、
RepRapで公開されている設計モデルが CR-10 であるためです。

プリンタの設定をカスタマイズします メニューの Mange Printers から、

設定できるのは プリンタの基本設定で、 OctoPrintとの接続項目もあります。
3Dプリンタのファームウェア書き込み機能は OctoPrintからできるので割愛します。

Machine Settings では Ender-3向けの印刷可能サイズを直しておきます。
マシンスペックでは X:220, Y:220, Z:250 ですが、
ヒートベッドに専用シートを敷いたためシートのサイズ X:200, Y:180 としています。

OctoPrintとの連携設定では Add で追加して OctoPrintサーバを指定します。
また OctoPrintから発行できる API連携キー を登録する必要があります。
OctoPrintの設定から API メニューを選べば入手できます。

APIキーがあっていれば OctoPrintへ連携できるはずです。
早速 Curaからプリント指示を試してみましょう。

印刷の状況は OctoPrintの管理画面から確認できます。
Webカメラからのライブビューを見ることもできます。
これで FreeCAD Cura OctoPrint の連携による 3Dプリンタの印刷環境が整いました。

参考として、印刷状況の写真です。
ドローン用の筐体モデルを出力させようとしましたが 失敗しました。

サイズが大きいため、プリント可能な領域サイズに収めるために、
斜めに3Dデータを配置しなおしたうえで縦方向に立てて印刷する必要があったのですが、
養生テープで固定しても印刷がずれてしまう有様です。

他にも印刷物がヒートベッドへ定着せず、印刷途中ではがれたりするなど、
うまく印刷するためにはコツが必要になってきます。

コメント

  1. とても参考になりました(栁澤)