トグルスイッチが面倒そうだと思ったけど、意外と簡単だった (正確な寸法はよくわらないけど)
デジタルノギスは良いものを買うべきと学んだ
結局ミツトヨのデジタルノギスを買ってしまった。ノギスは測定道具の中でも使用頻度が高くて便利な道具なので、まぁいいか…という気持ちになった。
500 Can't connect to lowreal.net:443 (certificate verify failed) というエントリを書いたけど、やはりデジタルは便利なので、3Dモデリングするときにかなり使っていた。しかしどうしても滑りが悪く、ガリガリひっかかってイライラしてしまっていた。同価格帯の別のデジタルノギスも検討してみたが、それで失敗しても嫌だし、さっさと評価が安定したものを買うという手になった。
以前のものと比べ
- 絶対値センサーである
- 圧倒的に動きが滑らか
- 器差が 0.02mm
- サムローラー付き
- 太陽電池
という点で異る。ケース付きで、中に品質チェックのシートも入っていた。
サムローラーが付いているノギスは初めてで、使ってみてわかったけど、これはとても便利。
太陽電池式なので「電源をオンにする」という操作がない。たケースから明るいところに出して数字がでるまで数秒待たされる。ホールド機能もないので普段の使用で使うボタンはない。原点初期化用のボタンが1つある。
計測だけなら結構暗い環境でもできる。が、原点初期化(相対距離測定)のために計測時より明るい場所が必要になる。蛍光灯の近くとかなら問題ない。
↓ のアナログのポケットノギスと比べると価格が10倍ぐらいになってウケるけど、国産 (Made in Japan って書いてある) のデジタルノギスが1万円ちょいと考えると安い気もする。
非導体系材料用に Touch Probe を作った
東急ハンズで真鍮の円柱を買ってきてそなりに磨いて、表面にM3で穴をあけてタップを切ってネジをさしこんだ。ネジ部分を Probe のワニグチクリップでつかんで使う。
ノギス(マイクロメーターを持ってないので)で計測すると約10.13mm なので、Probe したあとの Touch Off で 10.13 と入力すれば原点が正しく設定される。真鍮製で重いので簡単には動かず便利。
実際は非導体系用だけではなく、PCB のときもクリップでつかめないときが多いので使いそう。
モデリングしたものを削り出す
Fusion 360 で SVG をインポートしてスケッチに利用する | tech - 氾濫原 でモデリングしたものを削り出した。
ちょうどいい色の材料がなくて、ちょっと微妙だけど、削り出すのはうまくいった。
CAM
Vカッターは「面取りミル」。「ポケット加工」で条件をうまいこと設定すると綺麗に削れる設定ができる。切削深さが適当になってないとちゃんと削れない。
削ったあと
プラモデル用の塗料を適当に塗った状態
耐水サンドペーパー #1500 で軽く磨いておわり
Fusion 360 の練習 DC プラグ2連発
ストレートでいけるかな? と思ったらダメでした。
なの L型も作った。
なにがダメでしたなのか
なんでコネクタ類を執拗に作ってるかというと、ケースを作る際に干渉しないかとかを事前に知りたいため。主要なものは全てモデリングしないとダメなので地道。
ストレートのDCプラグだとケース内に入れたいものが納まらないことがわかったという意味。
煙草への憎悪
受動喫煙と肺がんに関するJTコメントへの見解 << 国立がん研究センターについて
(国立がん研究センターの見解)
⇒ 受動喫煙は「迷惑」や「気配り、思いやり」の問題ではなく、「健康被害」「他者危害」の問題である。健康被害・他者危害があるという科学的事実に基づいて、公共の場および職場での喫煙を法律で規制するなど、たばこ規制枠組み条約で推奨されている受動喫煙防止策を実施することが必要である。
この調子でちゃんと規制されてほしい。
- 駅前でタバコ吸ってるやつってなんなの?
- 公園でタバコ吸ってるやつってなんなの?
- 保育園の前でタバコ吸いながら歩いてるやつってなんなの?
- マンションの廊下でタバコ吸ってるやつってなんなの? 家から追い出されてるの? 自分の家族の健康被害は考慮するけど他人は殺してもいいっていう思想なの?
広く薄く人に危害を与えてるやつは罪に問われないってのはおかしい。そして、加害者と被害者という関係なのに「どっちもどっち」みたいなこと言ってくる思考停止自称中立人間も消滅してほしい。
そこらじゅうに「路上喫煙やめよう」みたいなノボリが立ってるし、駅前には「禁煙」の張り紙が多数ある。「喫煙者のマナー」とかいうけど、言葉が通じない相手に「マナー」とか言っても全く意味がない。早急に実効性のある対策を国がやってほしい。言葉が通じない相手に個人が対抗する手段はないので、警察がなんとかすべきことだと思う。
Fusion 360 + Machinekit (LinuxCNC) でちゃんとパスがトレースされない
Machinekit (LinuxCNC) では G64 P0 (Blend Without Tolerance Mode) がデフォルトになっており、これは「送り速度優先」「公差無視」のモード。なのでフィードレートを早くしていると細かい動作のとき大きな公差が発生する可能性がある。(まんまとハマってしまった)
G64 P0.002 のように明示的に公差を指定するか G61 で常にパスに従うように指定する。普通に考えると公差指定のほうが良さそう。機械的要素から限界の精度は求められるので、すくなくともそれ以上の公差は指定したほうが良い。
パスの差
白い線が通るべき線、ピンクの線が実際に通った線
デフォルトだとこんなにカクつく…… (各種条件によります)
適切に公差指定すると以下のように
Fusion 360 では
ポスト処理には「tolerance」パラメータがあるのだけど、吐き出される GCode には G64 が含まれない。なんでやねんという感じだけど、どうやら linuxcnc.cps が対応してないっぽい。
しかたないので自分で .cps を書いた。machinekit.cps。自分のものは以下に置けばいいらしい。
~/Autodesk/Fusion 360 CAM/Posts
備考:.cps ファイルの差分
ちなみに、デフォルトの .cps は以下にある
~/Library/Application Support/Autodesk/webdeploy/production/{versionid}/Libraries/Applications/CAM360/Data/Posts .cps ファイルはぱっと見 JavaScript ファイルっぽい。謎文法のクソファイルとかじゃなくていいですね。
試した感じ linuxcnc.cps に追加して、onOpen 関数の最後で以下のようなのを書いておけばよさそう。これでポスト処理ダイアログで指定できるパラメータが出力される。
if (tolerance) {
writeBlock('G64 P' + tolerance);
} Fusion 360 で SVG をインポートしてスケッチに利用する
Fusion 360 の練習 非常停止ボタン | tech - 氾濫原 に加え、つばをつけたもの。本来このボタンにはついてないものなので、別のデザインとして作って、元のスイッチはリンクで参照している。
SVG を挿入
Fusion 360 には「パスにそって文字を配置」という機能はないので、これを実現したい場合は外部からインポートするしかない。今回は「EMERGENCY STOP」を円状に配置したかったので、ここはインポートするしかなかった。
「挿入」 → 「SVG を挿入」で挿入するとパスを元にスケッチが描ける、のはいいんだけど、かなり制約が多いと感じる。
Photoshop の画像アセットで生成されるパスでは読めないことがある
テキストレイヤをパスに変換して生成すると、ブラウザではちゃんと表示できても、読みこめないパスになることがある。Inkscape でも途中までしか読めないので Fusion 360 が悪いのは限らないが、ブラウザだと表示できるので、誰が悪いのかよくわからない。
Fusion 360 は SVG の単位 (ビューボックス) を認識しない
生で書いてある値をそのまま 1mm として扱うらしく、縮尺があわない。これはどうしよもなくてなんとかしてほしいが、エクスポート元で 1mm のパスを一緒に入れて、計測した逆数を尺度に入れて再インポートするしかない。
ベストプラクティスは……
Inkscape でパスを描く。テキストの場合、配置したあと Object to Path をすること。
しかし Inkscape は使い勝手が良いとはいえないので、結構悩ましい。なので Fusion 360 といったりきたりするような試行錯誤はかなり面倒。
一番個人的に良いのは Photoshop の書きだす SVG を修正して普通のSVGにすることなんだけど、適当なツールだとうまくいかなかった。というか何が問題なのかわからない。
Fusion 360 のいいところ
デフォルトでよく使うような外観設定が多数登録されていて、非常に簡単に綺麗なレンダリングまでできるところ。外観設定も簡単なところ。そしてデフォルトのレンダリング環境が非常に良いところ (詳細なモデリングとともに調整すると実写かと思うぐらいのときがある)。
それと外観設定が通常モデリング環境でも多少影響してわかりやすいところ。なので、適切に外観を設定することはレンダリングだけではなくモデリングでも意味がある。
モデリングのしやすさはもちろんあるけど、どちらかといえばある程度綺麗なレンダリングができる状態というのが大事で、やる気が沸きやすい。
両面テープで貼るタイプのチャイルドロックの剥しかた
チャイルドロックってのはこういうやつです。メーカー的にはドライヤーで温めて剥すのが正当っぽいですが、プリント合板につけたりしていると、表面のプリントが一緒に剥れてしまう場合もあります。
結局、確実なのは無水エタノール (100% アルコール) を使うことで、これをシール部分に沁みこませて、スクレイパーを使えば綺麗に剥せます。シール剥しよりも無水エタノールのほうが使い道が多いので、こっちのほうがお勧めです。
健栄製薬 無水エタノールP 500ml(掃除) cho45
オルファ(OLFA) スクレーパーL型 35LB cho45
Fusion 360 の練習 DB25 のプラグ (オス) コネクタ
D-Sub 25 の規格とか初めてみたりした。ピンはスケッチの段階で「矩形状パターン」を上と下で2回やっている。
付け根のモデリングのために「ロフト」を使ってみた。このコマンドは難しい。平面を2つ定義してやるとなんとなくできるってことはわかった。
pcb2gcode のオートレベリングを使ってみる
Machinekit にしたかった主な理由の一つがこれでした。事前に基板表面を一通り Probe し起伏のマトリクスを得て、これをもって補正しながら実際の切削動作を行う方法です。これにより 0.2mm ぐらいまでの細かいパターンを安定して切削できるようにできるというわけです。
# Autoleveling software=LinuxCNC al-back=true al-probefeed=40 al-x=10 al-y=10
をオプションに加えるとオートレベリング用の gcode が同時に吐きだされます。この例だと 10mm ごとに Probe を行う設定です。
実際の動作
実行開始すると「Probe をつけろ」とメッセージが出て一時停止するので、Probe をつけて Resume する。
全部 Probe が終わると Probe を外せとでるので、外して Resume する。すると実際の切削が始まる。
めんどい点
一旦実行終了すると (回路が切られて各領域が絶縁されるので)、二度とオートレベリングできません。切削深さの微調整とかができないので悩ましい。
一回使った Probe データを使いまわせればよさそうですが……
備考: LinuxCNC の PROBEOPEN / PROBECLOSE
コメントのフォーマットで命令が書いてある。
(PROBEOPEN RawProbeLog.txt) と (PROBECLOSE) の間は probe 結果が指定したファイルに書き出される。
#[#101 * 3 + #102 + 500] = #5063 ( Save the probe in the correct parameter )
が補正パラメータを変数に入れているところ。#5063 は probe の結果。#101 は X iterator / #102 は Y iterator、3 は加工範囲 / al-y - 1っぽい。500 は固定のオフセット。ということで #500 以降に補正データが入る。
なので、冒頭の probe プロセスを RawProbeLog.txt の結果を使って #500 以降への代入に置換すれば Probe データを再利用して再度切削できそう。
Fusion 360 の練習 RCA ジャック
これはかなり簡単な形状だと思うけど、むずかしかった。プラス端子側のモデリングのしかたがわからなくて試行錯誤したけど、あってるかよくわからない。
3D CAD で既存のをトレースするの思ったよりも面白いところがあって、例えば「ああここは面取りされてるな」みたいなのって、普段なに気なさすぎて気付かない。そういうのに気付けるのは面白い。一見しょぼい製品であっても、ちゃんと面取りされていることが多い。
いまいちわからないけど、今のところは「その部品がどういう作りかたで製造されるか」みたいなのをもっと想像したほうが良さそう。最初六角ナットの面とりのやりかたがわからなかった。正解は回転で削る、なのだけど、変なやりかたをしてしまったりした。むずかしい。
ブログに貼れる機能があって今時っぽい…… (スマフォで固まるのではずしました)
Fusion 360 の練習 非常停止ボタン
Fusion 360 練習 パネルマウント USB コネクタ (USB 内部延長)
USB の規格的にはダメな気はするけど ebay でしばしば売っているパネルマウント可能な USB 延長ケーブルのコネクタ部分
結構慣れてきた気がする。ノギス片手に1時間ぐらいでモデリングできた (図面がないので)。
細かい部分、微妙に角度がついて折りまげられている部分を再現してない。どうやってやるのがいいのだろう……
最適な Probe 速度を計算する
オートレベリング、つまり加工前に加工対象の表面を一通り Probe して起伏のマトリックスを作る場合、Probe の速度をできるだけあげたくなります。理論的にどれぐらいまであげられるのか計算しました。
前提
- 1066.667steps/mm
- 1ms サンプリング (Machinekit)
計算
1066.667steps/mm なので、約937.5nmが最小ステップ(加工精度の限界)。
Probe のサンプリング頻度は 1ms ごと、つまり1kHz。これは servo-thread の実行間隔なので、実際はもう少し膨らむ(周波数は低くなる)。
1msごとに937.5nm進む速度が最も正確にProbeできる限界になるので、937.5nm * 1kHz = 937.5um/sec = 56.25mm/min。
式
サンプリングスピードを上げるほど速度をあげられ、精度が上がるほど速度が下がります。
Beagle Bone Black + Machinekit での PCB Milling
これが Machinekit での初切削。今まで (Grbl) と同じやりかたで gcode を生成し、そのまま実行させたもの (なので特にオートレベリングなどしてない)。
Probe のとき G91 を一緒にいれてあげないと意図しない結果になる気がする。G91 G38.2 F10 Z-1 がよさそう。
Machinekit での全体のワークフロー
- 起動
- Home All
- ファイルを読みこむ
- 設定する原点位置までジョギングで移動 (X/Y)
- X軸とY軸をTouch Off
- Probe できる範囲まで Z 軸をジョギング (1mm以内にする)
- Probe 端子を接続
- Probe (G91 G38.2 F10 Z-1)
- Probe 端子を外す
- Z軸を Touch Off
- (確認プロセス) Z軸を10mmあげる (G91 G0 Z10)
- (確認プロセス) Z軸を Touch Off
- (確認プロセス) 実行開始して挙動を確認して適当に停止する
- (確認プロセス) 本来の原点に戻す (G90 G0 X0 Y0 Z-10)
- (確認プロセス) Z軸を Touch Off (本来の原点設定に)
- 実行開始
AXIS GUI の見方
ステータスバーの「Position: Relative Actual」が地味に重要
Relative のときは (マシン座標の代わりに) オフセット座標が使われている。この場合マシン座標原点はシアンで示される。上記スクリーンショットの場合 G54 でオフセットされた座標が X/Y/Z に表示されている。G54 X/G54 Y/G54 Z はオフセットを含んだマシン座標
Actual は機械動いた結果どこにいるかを示していますよってこと。Commanded の場合、どういう指示をしたかを示していますよってこと。
Beagle Bone Black + Machinekit での CNC 制御 (Sable-2015)
BBB と Machinekit (LinuxCNC/EMC2) での CNC 制御がようやく動いたので記録しておきます。
インターフェイスボードの製作
Beagle Bone Black の I/O は 3.3V かつかなり電流的に厳しいので、5V変換バッファを外部につけたほうがよさそうです。ということで、BBB とステッピングモータドライバの間にバッファをもうけました。やってることは単純で、バッファIC 74LVC541 で入出力をバッファしているだけです。5Vトレラントなバッファを使うことで電圧変換を同時に行います。
出力用に2つ、入力用に1つ使っています。入力用のICには 3.3V を供給し、入力側を5V でプルアップしています。出力用のICには5Vを供給し、BBB からは直接繋いでいます。あまり行儀良いとはいえなそうですが、これでインターフェイスは 5V に統一されています。
さらにフォトカプラとかで絶縁するとより良さそうですが、現状使っているステッピングモータドライバ (Sable-2015 付属のものです) にはフォトカプラが入っているっぽかったのでやっていません。
SOP の IC を使うつもりが、間違えて TSSOP のをいくつも買ってしまって諦めて TSSOP でなんとかしました。前に TSSOP をやったときは、かなりキツいと思いましたが、今回は思ったよりうまくできました。が、TSSOP 以外の部分で 0.25 幅の配線が2本ほど消滅してしまってリワークでなんとかしました。
というか後から調べてみたら 74*541 (非反転バッファ) で SOP の IC は秋月では取り扱いがないみたいですね。74*540 ならありました。反転でもソフト側でなんとかなるのでどっちでもいいんですが……
1608 (1.6x0.8mm) の抵抗の下を一本通すみたいなパターンにせざるを得なかったですが、なんとかなりました。といっても、特にチップ抵抗使う意味はなかったので、普通にリード部品にして安全に実装しても良かったかと思いました。今回はここの部分では特に問題が起きなくて良かったです。
(これらの切削は Grbl でやったものです)
HAL ファイルの設定
レポジトリ: https://github.com/cho45/machinekit-configs
HAL manual を一通り読んでも設定できるぐらいの知識はつかなくて、既存の他の設定ファイルや、ドライバのソースコードを読んだりしないと正確に設定することはできません……
とりあえず .hal での設定の流れですが以下のような感じです。
- loadusr コマンドで実行に必要な外部プログラムをロードする
- loadusr -w だとコマンドの終了を待つ (初期設定を外部コマンドでやるために必要)
- loadusr -W だとコマンドが起動するまで待つ
- loadrt コマンドで必要なコンポーネントをロード・設定する
- addf でコンポーネントの関数を実行スレッドに追加する
- setp でコンポーネントのパラメータ設定をする
- net でコンポーネント間を接続する
net コマンドがいちばんややこしい です。既存の設定ファイルだと、source target の形式になってないものが多いような気がするんですが、なんで動いてるんでしょうね?
基本的には既存の設定のコピペでなんとかなるのですが、自分の環境にあわせてピン名などはあわせこまないといけません。
ちなみに [xxx]foo みたいな文法は .ini ファイルの値を参照していているだけです。
BBB での設定
BBB で使う重要なモジュールはふたつあります。
hal_bb_gpio
GPIO 全般のI/Oを HAL の pin として扱うことができるようになります。外部ボタンとか、マシンステータスとか、servo-thread (遅いスレッド) でやるので十分なものはこちらで全て処理します。pin なので直接他のコンポーネントと net することができます。
loadrt hal_bb_gpio output_pins=107,115,119,126,214 input_pins=109,110,114,116,118
以上のような設定をすると。BBB のピンヘッダ8のうち 7,15,19,26、ピンヘッダ9のうち14が出力ピンに。同様にピンヘッダ8のうち9,10,14,16,18が入力ピンとして定義され、hal ファイル内で bb_gpio.p8.in-16 という形で参照できるようになります。1xx がピンヘッダ8、2xxがピンヘッダ9に対応しています。
hal_pru_generic
PRU でやることを設定します。スレッピングモーターのシグナル・PWM・エンコーダー入力など、普通の Linux だと base-thread でやることをすべてこのコンポーネントで行うようになっています。
loadrt hal_pru_generic prucode=$(HAL_RTMOD_DIR)/xenomai/pru_generic.bin pru=1 num_stepgens=3 num_pwmgens=1 halname=hpg
この例では PRU1 (BBBにはPRUが2機あるので) で stepgen を3つ、pwmgen を 1つ動かすことになります。これにより、hpg.stepgen.00, hpg.stepgen.01, hpg.stepgen.02 と hpg.pwmgen.00 が HAL に定義されます。
PRU で使うピンは hal_bb_gpio とは独立しており、setp で別途指定する必要があります。
# P9.27 setp hpg.stepgen.01.dirpin 147 # P9.28 setp hpg.stepgen.01.steppin 145
ここの数字は hal_bb_gpio とは関係ありません。上の例ではbeaglebone_pinmap.h の値をそのまま書いています。これは変換メソッドがちゃんと動いてるか不安でバイパスしたかったから以外の意味は特にありません。
ピンナンバーには hal_pru_generic.cのfixup_pin()で変換がかかるので以下のように書くことができるようです。ただ、実際には試してません。
# P9.27 GPIO 927 # P8.11 PRU OUT 1811 # P8.15 PRU IN 2815
.ini ファイルの設定
各軸の MAX_VELOCITY, MAX_ACCELERATION, SCALE, MIN_LIMIT, MAX_LIMIT はすくなくとも必ず理解して確実に設定しなければなりません。これらの項目はマシンごとに異なるのでコピペではどうにもならないからです。
参考までに自分が Grbl に設定していた項目 の一部をコピペしてくると
$0=10 (step pulse, usec) $1=25 (step idle delay, msec) $100=1066.667 (x, step/mm) $101=1066.667 (y, step/mm) $102=1066.667 (z, step/mm) $110=800.000 (x max rate, mm/min) $111=800.000 (y max rate, mm/min) $112=800.000 (z max rate, mm/min) $120=150.000 (x accel, mm/sec^2) $121=150.000 (y accel, mm/sec^2) $122=100.000 (z accel, mm/sec^2) $130=200.000 (x max travel, mm) $131=150.000 (y max travel, mm) $132=60.000 (z max travel, mm)
としていました。この設定を Machinekit に置き換える場合、単位が全て単位時間あたりのものになっているので、そこをまず気をつける必要があります。
X軸の最大速度が 800mm/min なら [AXIS_0] で MAX_VELOCITY = 13.4 と指定する必要があります。加速度は単位が同じなのでそのまま MAX_ACCELERATION = 150。
SCALE は step/mm なのでこれもそのまま指定できます。(備考ですが、Sable-2015 のウェブの設定を見ると4マイクロステップ時のものになっています。実際には8ステップでしたので、2倍にしてあります)
自力で計算しなおす場合 200steps/rev, 8microsteps, 1.5mm/rev という環境なら
という感じで計算できます。
実行して調整する
実際設定一発で完璧に動かせるわけがないので、何度か調整する必要があります。
まず .hal の設定を変えてる場合は、意図したピンから出力がでていることをオシロで確認することが必要です。また入力も halmeter とかで必ず確認します。インターフェイス基板がちゃんと動いているかとかも含めて、動かす前に必ず電圧と波形をすべて確認します。
あとは
- 軸の移動方向が逆
- SCALE の符号を逆にする
- ホーミング時に動く方向が逆
- HOME_SEARCH_VEL の符号を逆にする
- 原点と逆方向にホームスイッチつけてんだけど?
- HOME_OFFSET が「原点からホームスイッチまでの距離」を表わすので、これをテーブルサイズに設定する
- ホーミング後にものすごい動くんだけど?
- ホーミング後は HOME で指定した座標まで移動する。HOME_OFFSET - 3 ぐらいに設定しとくのが良い
という感じで設定を詰めていきました。
備考:自分の環境 (Sable-2015)
上記設定ファイルはあくまで自分の環境用のもです。特にホーミングまわりや、軸方向などは設置状況に応じてそれぞれだと思います。
参考までにどんな環境で設定したかを書いておきます
- リミットスイッチは Sable-2015 を正面からみて、以下のようについています。片側だけです。ホーミングとリミットのスイッチを兼ねています。
- Xは右側
- Yは奥側
- Zは上側
- X/Y 軸の原点は左手前
- テーブルの右に行くにしたがってXが増える
- テーブルの奥に行くにしたがってYが増える
- Z軸
- スピンドルが下に行くにしたがってZが減る
- スッテピングモータードライバは付属のもの。
- 8 マイクロステッピング設定
- 特に改造していません
備考:内部コンポーネント
マニュアルは http://www.machinekit.io/docs/man/man9/ にありますm
ソースコードは src/hal/i_components にあります。謎のファイル形式にみえますが、instcompでコンパイル・インストールできるようになっているらしいく、実体はプリプロセッサで面倒な部分が隠してあるCのファイルです。
Machinekit (LinuxCNC) を XBox コントローラを使って機械を動かす。
ジョギング用のペンダントに USB の XBox コントローラを使う話です。
基本的には LinuxCNC Documentation Wiki: Simple Remote Pendant でいいんですが、これだけだとちょっと気に入らないので、結構がんばる必要があります。
仕様
- 左アナログパッドに X/Y軸
- 右アナログパッドに Z軸
が割り当てられています。これが基本ですが、事故防止のため左右のトリガーを押している間しか動作しないようになっています。
- 左トリガーを押しながら軸操作をすると低速移動
- 右トリガーを押しながら軸操作をすると高速移動
アナログパッド自体にも傾きによって速度調節が入りますので、トリガーの役割は「最大速度の設定」です。
また、X/Y軸が同一アナログパッドにある弊害として、このままだと意図せずに移動したい軸ではない軸を動かしてしまうという問題があります。これに対処するため、
- Xボタンを押している間はX軸のみ動く (Y軸の移動が抑制される)
- Yボタンを押している間はY軸のみ動く(X軸の移動が抑制される)
としてあります。Z軸は独立していて問題ないので、これで意図した軸を確実に動かせます。
まだ L, R, A, B, Back, Start ボタンと十字キーとスティック押し込みが余っています。probe はどこかに入れたいですが、残りは特に思いついてません。
.hal
# X-BOX USB コントローラジョギング設定 # abs-hat0x, abs-hat0y: デジタル十字キー 1 か 0 か -1 # abs-rx, abs-ry: 右アナログスティック # abs-rz: 右アナログトリガー (RT) # abs-x, abs-y: 左アナログスティック # abs-z: 左アナログトリガー (LT) # btn-a: Aボタン # btn-b: Bボタン # btn-mode: XBox ボタン # btn-select: BACK ボタン # btn-start: スタートボタン # btn-thumbl: 左スティック押し込み # btn-thumbr: 右スティック押し込み # btn-tl: 左上側ボタン (LB) # btn-tr: 右上側ボタン (RB) # btn-x: Xボタン # btn-y: Yボタン loadusr -W hal_input -KRAL 360 loadrt deadzone count=5 loadrt scale count=2 loadrt mux2 count=3 loadrt flipflop count=1 addf flipflop.0 servo-thread addf mux2.0 servo-thread addf mux2.1 servo-thread addf mux2.2 servo-thread addf deadzone.0 servo-thread addf deadzone.1 servo-thread addf deadzone.2 servo-thread addf deadzone.3 servo-thread addf deadzone.4 servo-thread addf scale.0 servo-thread addf scale.1 servo-thread setp deadzone.0.center 0.0 setp deadzone.0.threshhold 0.2 setp deadzone.1.center 0.0 setp deadzone.1.threshhold 0.2 setp deadzone.2.center 0.0 setp deadzone.2.threshhold 0.2 setp deadzone.3.center 0.0 setp deadzone.3.threshhold 0.2 setp deadzone.4.center 0.0 setp deadzone.4.threshhold 0.2 # トリガーをひかない限り動かないようにする # また、トリガーのアナログ値によって最大スピードを制限する # 左トリガー setp input.0.abs-z-offset 0 setp input.0.abs-z-scale 255 net joy-speed-jog-dead-l input.0.abs-z-position deadzone.3.in setp scale.0.gain 80 setp scale.0.offset 0 net joy-speed-jog-scale-l deadzone.3.out scale.0.in net joy-speed-jog-final-l scale.0.out mux2.0.in0 # 右トリガー setp input.0.abs-rz-offset 0 setp input.0.abs-rz-scale 255 net joy-speed-jog-dead-r input.0.abs-rz-position deadzone.4.in setp scale.1.gain 800 setp scale.1.offset 0 net joy-speed-jog-scale-r deadzone.4.out scale.1.in net joy-speed-jog-final-r scale.1.out mux2.0.in1 # 左か右いずれかを有効にする。ただし左が優先 net joy-flipflop-reset input.0.abs-z-is-pos flipflop.0.reset net joy-flipflop-set input.0.abs-rz-is-pos flipflop.0.set net joy-select-maxspeed flipflop.0.out mux2.0.sel net joy-selected-maxspeed mux2.0.out halui.jog-speed # X-BOX のコントローラの Scale は 127.5 ではないので気をつけよう # 軸方向反転の設定 # setp input.0.abs-rx-scale -32767.5 setp input.0.abs-ry-scale -32767.5 setp input.0.abs-y-scale -32767.5 # 左アナログパッドはX/Y軸 # 右アナログパッドはZ軸 net joy-x-jog-dead input.0.abs-x-position deadzone.0.in net joy-y-jog-dead input.0.abs-y-position deadzone.1.in net joy-z-jog-dead input.0.abs-ry-position deadzone.2.in # XボタンまたはYボタンを押しているときは、それぞれX軸またはY軸のみ移動可能にする # 予め net はしておくが、ボタンが押されたときは他軸の移動を抑制する形 net joy-x-jog-mux deadzone.0.out mux2.1.in0 setp mux2.1.in1 0 net joy-y-jog-mux deadzone.1.out mux2.2.in0 setp mux2.2.in1 0 net joy-x-brake input.0.btn-y mux2.1.sel net joy-y-brake input.0.btn-x mux2.2.sel net joy-x-jog mux2.1.out halui.jog.0.analog net joy-y-jog mux2.2.out halui.jog.1.analog net joy-z-jog deadzone.2.out halui.jog.2.analog # X-BOX ボタンでマシンが起動するぞ net joy-btn-xbox input.0.btn-mode halui.machine.on
備考:deadzone の設定
アナログスティックを離していてもいずれかの方向に多少傾いていて入力されてしまうので、中央付近に不感帯をつくっておく必要があります。
備考:XBox コントローラのアナログスティック類は 16bit
なので各種 scale に入ってる値が 32767.5 になっている。うっかり符号を変えようとして -127.5 とか入れると大変なことになるので注意が必要。
XBox コントローラは、2つの2軸アナログパッドと、2つのトリガーが16bitアナログなため、合計で6つのアナログ入力があります。
マイクロソフト ゲームコントローラー 有線/Xbox/Windows対応 ブラック Xbox360 Controller for Windows 52A-00006 cho45
最近の体調不良
先週は1日おきぐらいにちょいちょい調子が悪くて1日は休んだ。よくなったかと思ったら、月曜日の昼ぐらいから劇的に調子が悪くなり38.3℃ぐらいまで熱があがる。熱があがっている間って、あまりにもだるくて身体がもぞもぞとして眠れなくてとにかく辛い。上がりきったあとは暑いだけで寝れるようになるからいいんだけど、無限に疲れる。そして火曜日は会社をまた休んだ。
熱が出たときにアリナミン飲むと効く気がしていて、特に熱が上がりきってからの身体のだるさはかなり軽減される。熱があがりつつある間はロキソニンかイブプロフェン飲むと楽になるのはわかってるんだけど、手元になかったのと、治りが遅くなりそうっていうか効きすぎて熱が下がるせいで治ったのか治ってないのかよくわからないのでできれば避けたい。
特になにか不摂生なことをしているわけではないというか、何もしてないのに体調がどんどん悪くなる。こういう一時期よりも体調不良の頻度が明かに上がってるが、一つ一つの症状は一般的な風邪ぐらいしかひどくはない、みたいなのってどう対応すればいいのかわからない。内科いっても対処療法にしかならないし、根本的に体調不良の頻度を下げたいんだけど、どうやって解決できるのか全く検討もつかない。
健康のためにも多少運動したいという気持ちはあるが、そもそも運動にかけられる時間なんて捻出できないんだけど、普通の人はいったいどこからそんな時間が出てくるのだろう。というか運動すると体調不良になるしどうしようもない。
SketchUp Make を捨てて Autodesk Fusion 360 に移行した
SketchUp Make を使っていたのは多少慣れていたから以外の理由は特になくて、最近だと無料版の Make の機能がヘボすぎて辛くなってきた。
そして Autodesk Fusion 360 が小規模開発者には無料で使えるのを知らなかった。(123 だけ無料だと思っていた) 普通にフル機能が使えるっぽいので使いはじめてみた。一言でいうと、普通に最高。
やってみた雰囲気
フォトカプラ的なもの (多少実際のモデルと異なります)
ロータリーエンコーダー風のもの
位置的にちゃんと光軸通るの?ってのを探ってる
周辺環境とがっちゃんこしたやつ
回るんやで
CAM まで内蔵されてるんやで
できたで (※これは3D CGではありません)
温度感
2D で「スケッチ」を描いてプッシュ/プルで形成していくので、SkechUp と比べてイメージの書き下し手順には大差なく、Fusion 360 のほうが高機能なのでかなりやりやすい。
上のように手にとれる立体をつくるまで、モデリングに3、4時間、切削の4時間ぐらい(ハマリも含めて)。
思いのほかモデリングが楽で「こうしたい」と思ったことはだいたいできた。スケッチを複製して別の面に移動するみたいなことはできない? っぽくて、プッシュプルで頑張ったけど、やりかたはありそう…
YouTube に公式の日本語チュートリアルがあるので、ぼーっと見とくだけで全能感が産まれる。
ワークフロー
スケッチと呼ばれる 2D 図面を起こしてから、3D モデルに変換していく。
図形は最初から完璧に配置する必要はない。図面に寸法を記入すると、自動的に図形の形が正しい形になる。
拘束という仕組みがあり、辺と辺・点と点の関係を定義すると、図形に他の変更を加えても、その関係が維持されるようになる。寸法も拘束の一種といえる。宣言的プログラミング (制約プログラミング) を GUI でできる感じ。
長方形などのプリミティブな図形は、簡単に図形が描けるだけではなく、自動的に拘束が定義される。
タイムライン
まず、これはアンドゥ機能ではない。
作業のある時点に遡って変更を行え、それに依存する他の作業すべてに影響を及ぼす。過去改変のコマンド。
CAM まわりの罠
Grbl な環境でめちゃくちゃな動きをしまくってハマりまくった。CAMotics とかでシミュレーションさせたりしてもおかしくなくて、実機で動かして初めて分かる不具合だったのでかなり難儀した (安いエンドミル数本と高いエンドミル1本をダメにした)
以下のようにすること
- minimumCircularRadius を 1000 とかにする (ARC コマンドをやめて全て直線で出力)
- 出力ファイルを nkf -Lu --overwrite 1.nc とかして改行コードを unix にすること (Fusion 360 は CRLF を吐くが、LF にしないとなんか謎のぶっこわれたパスを描いてしまうことがあった)
✖
久しぶりに歯医者。クリーニングといって、メンテナンスだけで虫歯というわけではない。半年毎になってるんだけど、用事が多くて前回からかなり時間が開いてる。
歯茎がさがっていて、噛み締めが多いからじゃないか。1日の終わりに反省すると寝てる間に歯ぎしりしやすいから反省するな、と言われる。無理やで
家で酒を飲むのが最高
やっぱり飲み会とか好きじゃない。独りでアニメを見ながら「ひふみん可愛いデォユフフwww」とか言いながら酒を飲むのが最高であって、意識高い話をしながら酒を飲んでも特に何も産まれない。
これは切り替えの問題なのだ。酒を飲んでるとは難しいことを考えてはならない (MUST)。複雑なことをすると複雑な問題をひきおこす。
家で酒を飲んでアニメを見ていれば、酒臭くてうぜぇなみたいな話にはならないし、好きなように好きなような酒を飲んで好きなように酔っぱらって好きなようにインターネットがができる。辛い思いをする必要はどこにもない。
ツイッターとかフェイスブックとかを止めてるが、書きこみを止めているだけで、投稿はたまに見ていたりする。投稿を見た結果「やっぱ見ないほうがいいな」と思うが、投稿自体に制約を設けると「生きてる証明をなにかしらで示さなければ」と思う。そうすると (自分の中では) 価値のあるトピックでエントリーを書こうという気になる。この世界では、クソ短文で承認欲求を満たしてはならない。
何がいいたいかというと、「見ないことに価値がある」と思ってはじめてみたが、意外にも「見ても、反応・投稿しないことに価値がある」ということがわかったことだ。すべての情報は一度飲みこまなければ吐きだしてはならない、という制約をつけることによって、(自分の中では) より価値の高いものがアウトプットできる。
はてブもやっぱ見ちゃうことがあるけど、クソみたいな意識高い高いエントリについてる目線だけ高い高いブコメとか、おまえも同様にクソだろとしか思えない。クソがクソ叩いて喜んでる。クソがクソ叩いてるのを喜んでるクソがオレ。ブルーハーツって未だにテレビとかで曲がかかってすごいよなあ。弱いものたちが夕暮れ〜さらに弱いものを叩く〜。クソの連鎖。評価基準がクソなせいだと思う。ちゃんと作ってるか成長しているかが最重要。ウィーウィルベカームシルエッツ。
3D CAD をやってみて、やはりプログラミングを先にいろいろやっていて良かったと感じる。仕事で「プログラミングできて良かった」と思うことは極めて稀だが、趣味でいろんなことをしてみると全く「プログラミングをできて良かった」と思うことが多い。拘束とは制約プログラミングだと気付ければ難しいことが一切なくなり、便利さだけが理解できる。
「趣味」をバカにして「仕事こそが人生の意義だ」みたいなことを言うひとがいるが、全く間違いであり、そういう言い草は全く気にくわない。そういう人は単に仕事が趣味なのであって、趣味をバカにしている。趣味こそが全身全霊をささげるべき対象であって、仕事は単にそのために金を稼ぐ手段であるか、ないしは趣味で培った力の一部を社会に還元する行為である。
街には「地域ぐるみでなくそう路上喫煙」とか旗が立ってたりするが、喫煙者はすぐそばで路上喫煙をする。彼らは文字が読めないので仕方がない。対応策が間違っているのだ。喫煙者はなぜか人間として扱われているが、識字率99%以上のこの国で文字が読めないので、初等教育も受けていないことは明白であり、人間のような姿に見える他の生物である。JT とかいう独占企業があってモラルを啓蒙して「おれは悪くない」アピールをしているが、そもそも人間ではない生物にはモラルなどなく、判断能力のないそれに、中毒症状をいいことに薬物を売りつけるのが JT であって、今すぐにでも滅びなければならない。
不思議なのはそれのカタチが人間であるおかげで、人間として扱われれいて、人権が保証されているところである。人間は呼吸をしなければ生きていけず、空気の汚染は健康に直結する。それが環境を汚染して人間をいくら傷つけても、それが「薄く広い」殺人ならば罪にはならない。いくら薄く広く子供を殺して、あるいは子供以外の人間を殺してもそれは罪に問われない。どこから人権が生じるのだろうか? 人権のある生物から産まれれば人権があるのだろうか? 公共の福祉とはなんなのだろうか? 憲法に定められた「健康で文化的な最低限度の生活」における健康ってなんなのだろうか。「人民の健康が最高の法たるべし」ではないのだろうか? いったいそれにはいつ罰が与えられ、人間は健康に人生を過ごすことができるのであろうか?
(このエントリはクソよっぱらってクソのように世の中を思いながら書きました)














































