先週は1日おきぐらいにちょいちょい調子が悪くて1日は休んだ。よくなったかと思ったら、月曜日の昼ぐらいから劇的に調子が悪くなり38.3℃ぐらいまで熱があがる。熱があがっている間って、あまりにもだるくて身体がもぞもぞとして眠れなくてとにかく辛い。上がりきったあとは暑いだけで寝れるようになるからいいんだけど、無限に疲れる。そして火曜日は会社をまた休んだ。

熱が出たときにアリナミン飲むと効く気がしていて、特に熱が上がりきってからの身体のだるさはかなり軽減される。熱があがりつつある間はロキソニンかイブプロフェン飲むと楽になるのはわかってるんだけど、手元になかったのと、治りが遅くなりそうっていうか効きすぎて熱が下がるせいで治ったのか治ってないのかよくわからないのでできれば避けたい。

特になにか不摂生なことをしているわけではないというか、何もしてないのに体調がどんどん悪くなる。こういう一時期よりも体調不良の頻度が明かに上がってるが、一つ一つの症状は一般的な風邪ぐらいしかひどくはない、みたいなのってどう対応すればいいのかわからない。内科いっても対処療法にしかならないし、根本的に体調不良の頻度を下げたいんだけど、どうやって解決できるのか全く検討もつかない。

健康のためにも多少運動したいという気持ちはあるが、そもそも運動にかけられる時間なんて捻出できないんだけど、普通の人はいったいどこからそんな時間が出てくるのだろう。というか運動すると体調不良になるしどうしようもない。

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. トップ
  2. tech
  3. SketchUp Make を捨てて Autodesk Fusion 360 に移行した

久しぶりに歯医者。クリーニングといって、メンテナンスだけで虫歯というわけではない。半年毎になってるんだけど、用事が多くて前回からかなり時間が開いてる。

歯茎がさがっていて、噛み締めが多いからじゃないか。1日の終わりに反省すると寝てる間に歯ぎしりしやすいから反省するな、と言われる。無理やで

やっぱり飲み会とか好きじゃない。独りでアニメを見ながら「ひふみん可愛いデォユフフwww」とか言いながら酒を飲むのが最高であって、意識高い話をしながら酒を飲んでも特に何も産まれない。

これは切り替えの問題なのだ。酒を飲んでるとは難しいことを考えてはならない (MUST)。複雑なことをすると複雑な問題をひきおこす。

家で酒を飲んでアニメを見ていれば、酒臭くてうぜぇなみたいな話にはならないし、好きなように好きなような酒を飲んで好きなように酔っぱらって好きなようにインターネットがができる。辛い思いをする必要はどこにもない。


ツイッターとかフェイスブックとかを止めてるが、書きこみを止めているだけで、投稿はたまに見ていたりする。投稿を見た結果「やっぱ見ないほうがいいな」と思うが、投稿自体に制約を設けると「生きてる証明をなにかしらで示さなければ」と思う。そうすると (自分の中では) 価値のあるトピックでエントリーを書こうという気になる。この世界では、クソ短文で承認欲求を満たしてはならない。

何がいいたいかというと、「見ないことに価値がある」と思ってはじめてみたが、意外にも「見ても、反応・投稿しないことに価値がある」ということがわかったことだ。すべての情報は一度飲みこまなければ吐きだしてはならない、という制約をつけることによって、(自分の中では) より価値の高いものがアウトプットできる。


はてブもやっぱ見ちゃうことがあるけど、クソみたいな意識高い高いエントリについてる目線だけ高い高いブコメとか、おまえも同様にクソだろとしか思えない。クソがクソ叩いて喜んでる。クソがクソ叩いてるのを喜んでるクソがオレ。ブルーハーツって未だにテレビとかで曲がかかってすごいよなあ。弱いものたちが夕暮れ〜さらに弱いものを叩く〜。クソの連鎖。評価基準がクソなせいだと思う。ちゃんと作ってるか成長しているかが最重要。ウィーウィルベカームシルエッツ。


3D CAD をやってみて、やはりプログラミングを先にいろいろやっていて良かったと感じる。仕事で「プログラミングできて良かった」と思うことは極めて稀だが、趣味でいろんなことをしてみると全く「プログラミングをできて良かった」と思うことが多い。拘束とは制約プログラミングだと気付ければ難しいことが一切なくなり、便利さだけが理解できる。

「趣味」をバカにして「仕事こそが人生の意義だ」みたいなことを言うひとがいるが、全く間違いであり、そういう言い草は全く気にくわない。そういう人は単に仕事が趣味なのであって、趣味をバカにしている。趣味こそが全身全霊をささげるべき対象であって、仕事は単にそのために金を稼ぐ手段であるか、ないしは趣味で培った力の一部を社会に還元する行為である。


街には「地域ぐるみでなくそう路上喫煙」とか旗が立ってたりするが、喫煙者はすぐそばで路上喫煙をする。彼らは文字が読めないので仕方がない。対応策が間違っているのだ。喫煙者はなぜか人間として扱われているが、識字率99%以上のこの国で文字が読めないので、初等教育も受けていないことは明白であり、人間のような姿に見える他の生物である。JT とかいう独占企業があってモラルを啓蒙して「おれは悪くない」アピールをしているが、そもそも人間ではない生物にはモラルなどなく、判断能力のないそれに、中毒症状をいいことに薬物を売りつけるのが JT であって、今すぐにでも滅びなければならない。

不思議なのはそれのカタチが人間であるおかげで、人間として扱われれいて、人権が保証されているところである。人間は呼吸をしなければ生きていけず、空気の汚染は健康に直結する。それが環境を汚染して人間をいくら傷つけても、それが「薄く広い」殺人ならば罪にはならない。いくら薄く広く子供を殺して、あるいは子供以外の人間を殺してもそれは罪に問われない。どこから人権が生じるのだろうか? 人権のある生物から産まれれば人権があるのだろうか? 公共の福祉とはなんなのだろうか? 憲法に定められた「健康で文化的な最低限度の生活」における健康ってなんなのだろうか。「人民の健康が最高の法たるべし」ではないのだろうか? いったいそれにはいつ罰が与えられ、人間は健康に人生を過ごすことができるのであろうか?


(このエントリはクソよっぱらってクソのように世の中を思いながら書きました)

今まで SketchUp + SketchUCam で雑にポケット加工の機能を使って生成してたりしていたのですが、思うような G-Code になかなかならなくてダルくなったので自力で書くことにしました。

加工範囲ぎりぎりを動かすので、いつもリミットにあたらないか心配しながらやってたのですが、そのへんを考慮するようにしました。

今いちスタンダードなやりかたがわからないのですが、中央から削っていくようにしてみました。このほうがゴミが残りにくいかな?

あと面出しって英語でなんて言うかわからなくて検索できませんでした。

#!/usr/bin/env ruby -v

io = $stdout

=begin
使いかた:
 1. 面出し範囲のX軸幅・Y軸幅を測ってパラメータを変えておく
 2. 面出し範囲の左下に原点をあわせる
 3. G-code を生成して流す
=end

# 加工面のX軸の幅
x_size = 201
# 加工面のY軸の幅
y_size = 151
# 削る厚さ
cut_thikness = 0.1
# 使用するエンドミルの直径
tool_diameter = 6.0
# 削りのオーバーラップ割合
overwrap = 0.9
# 加工フィードレート
feed   = 500
# セーフレベル
z_safe = 1

###
io.puts "G94 ( mm/min feed rate. )"
io.puts "G21 ( Use mm )"
io.puts "G90 ( Absolute distance )"
io.puts "M3 S10000 (Start Spindle)"
io.puts

# 原点が面出し表面の左下にあること前提
# 念のためリミットにひっかからないことを確認するため、最初に外形を一周する
# この生成プログラムでは座標が加工原点からマイナスにいったり、
# 設定した x_size/y_size を超えることはない
# 一方で、加工原点や x_size/y_size からはエンドミル半径分はみだして切削する
# これは削り残しがないようにするためで意図的

io.puts "G0 Z%.5f" % [z_safe]
io.puts "G0 X%.5f Y%.5f" % [0, 0]
io.puts "F%.5f" % [feed]
io.puts "G1 Z%.5f" % [-cut_thikness]
io.puts "G1 X%.5f Y%.5f" % [0, y_size]
io.puts "G1 X%.5f Y%.5f" % [x_size, y_size]
io.puts "G1 X%.5f Y%.5f" % [x_size, 0]
io.puts "G1 X%.5f Y%.5f" % [0, 0]
io.puts "G0 Z%.5f" % [z_safe]

# 中央から外形に向かって削る
begin
	x_steps = ( x_size / (tool_diameter * overwrap) ).ceil
	y_steps = ( y_size / (tool_diameter * overwrap) ).ceil
	steps = [x_steps, y_steps].min

	# 切削中のrectサイズ
	x_center = x_size / 2.0
	y_center = y_size / 2.0
	x_current_size = 0
	y_current_size = 0

	# 削りはじめ、XとYで差があるので、まずはそれを埋める
	case
	when x_size > y_size
		x_current_size = (x_steps - y_steps - 1) * (tool_diameter * overwrap)
		x_offset = (x_size - x_current_size) / 2.0

		io.puts ""
		io.puts "(initial line)"
		io.puts "G0 Z%.5f" % [z_safe]
		io.puts "G0 X%.5f Y%.5f" % [x_offset, y_center]
		io.puts "G1 Z%.5f" % [-cut_thikness]
		io.puts "G1 X%.5f Y%.5f" % [x_offset + x_current_size, y_center]
	when y_size > x_size
		y_current_size = (y_steps - x_steps - 1) * (tool_diameter * overwrap)
		y_offset = (y_size - y_current_size) / 2.0

		io.puts ""
		io.puts "(initial line)"
		io.puts "G0 Z%.5f" % [z_safe]
		io.puts "G0 X%.5f Y%.5f" % [x_center, y_offset]
		io.puts "G1 Z%.5f" % [-cut_thikness]
		io.puts "G1 X%.5f Y%.5f" % [x_center, y_offset + y_current_size]
	else
		# nothing to do
	end

	# 少しずつ広げながら削る
	# 外形は最初に一度削っているが、内側の削りカスを除去するためにも再度削る
	steps.times do |step|
		x_current_size += (tool_diameter * overwrap)
		y_current_size += (tool_diameter * overwrap)
		xx = x_current_size / 2.0
		yy = y_current_size / 2.0
		io.puts ""
		io.puts "(step %d)" % step
		io.puts "G1 X%.5f Y%.5f" % [x_center + xx, y_center + yy]
		io.puts "G1 X%.5f Y%.5f" % [x_center - xx, y_center + yy]
		io.puts "G1 X%.5f Y%.5f" % [x_center - xx, y_center - yy]
		io.puts "G1 X%.5f Y%.5f" % [x_center + xx, y_center - yy]
		io.puts "G1 X%.5f Y%.5f" % [x_center + xx, y_center + yy]
	end
end

io.puts "G0 Z%.5f" % [z_safe]
io.puts "M5 (Stop Spindle)"
io.puts "M2 (Program End)"

% 演算子とか、もろもろが便利なので Ruby で書きましたが、再代入禁止の変数が欲しいですね。定数だとおおげさなので……

  1. トップ
  2. tech
  3. CNC フライスで加工台の面出しをするG-Codeを生成するRubyスクリプト