3Dプリンタの元祖
目次
自動プログラム装置
シーゲルの同僚、ロスは、1956年の9月に、シーゲルからプログラム改良の相談を受けています。
NCMM は、「立体形状の削り出し」を行える能力を秘めていました。しかし、現実には、立体を削り出すような制御は複雑すぎて人間の手には負えません。
ラニアンのサブルーチンは、円と直線の削り出しを行うだけです。このサブルーチンを使いやすくしたシーゲルの言語でも、状況は変わりません。
コンピューターを使って制御するのだから、その計算力で立体形状を削り出せないだろうか? これが、シーゲルの悩みでした。
ロスは、シーゲルの言語を見て2つの問題点に気づきました。
第1に、この言語は人間にとって分かりにくい上に、拡張性がありません。ここに立体の概念を持ち込んだら、よりわかりにくくなり、破綻するでしょう。
第2に、円と線の組み合わせだけでは、定義できる立体はかなり限られてしまいます。コンピューターに対して数式を理解させ、数式の組み合わせとして立体を定義できなくては、実用的な形状は削り出せません。
数式をコンピューターに理解させるというアイディアや、「自動プログラミング」という名称は、FORTRAN の影響があったと思われます。
ラフなアイディアがまとまったのは、1957年の2月。このアイディアは Automatically Programmed Tool (自動プログラム装置)…略して APT と名付けられます。
空軍にこのアイディアを見せると、なんと、当時の金額で3千万ドルの予算が付きました。
近年の例でいえば、地球シミュレータの開発費が 600億円。
新時代を切り拓くプロジェクトとしては適正価格ということかな?
予算が付いたことで、いよいよ本格的な開発がスタートします。
APTの開発は、MIT 、米国航空宇宙工業会(Aerospace Industries Association:AIA)、空軍航空資材軍団(Air Materiel Command:AMC)の三者共同研究として始まりました。
1957年5月20日には最初の「開発会議」が行われます。AIA に参加している航空機会社14社から、21人が参加し、他多数のプログラマも参加する非常に大きな会議でした。
3週間後には、最初の言語仕様(APT 言語)が固まります。
また、参加する会社のほとんどが IBM 704 を導入済みか導入予定だ、ということがわかり、APT システムは IBM 704 用に開発されることになります。
ベースとなっているのはラニアンが作成したライブラリ、シーゲルが作成した言語ですが、丸ごと IBM 704 で作り直そう、ということです。
しかし、APT は「コンパイラ」です。速度はそれほど重要ではなく、普及している IBM のコンピューターを使用することが順当でした。
この言語仕様に基づき、APT I が作られました。APT 言語は…シーゲル言語を、人間にわかりやすく、冗長に書き変えて、IBM 704 に移植しただけでした。
つまり、基本的には「円と直線」に位置や大きさのパラメータを与えることで形を作ります。出来ることは何も変わっていません。
各行の終端は $$ である。
(ロス自身は、「APT が決して安価なシステムではない、ということを思い起こさせるように、2倍のドルを使う」と言っている。…まぁ単に、言語理論で文の終わりを示す記号である「$」を、他の使用意図と区別するために2つ使っただけでしょう)
形状に自由な名前を付けられるようになり、命令も、POINT CIRCL LINE といったように、英語に近い表現になった。
形状につけた名前は、シーゲル言語と同じように、別の形状の定義に使用できる。
図の例では、点 JIM を中心として、円 JANE を定義し、円 JANE と円 JUNE の接線 WALDO を定義している。
冗長に書き直されたということは、さらに命令を増やす余裕が生まれた、ということでもあります。今は機能が同じでも、将来性を獲得したのです。
そして、1958年の早い時期には、「2D-APT II Phase 1」と呼ばれるシステムが完成しました。
名前こそ「2D」ですが、円以外の曲線が使えるようになっただけでなく、立体形状の定義も可能になりました。
具体的には、楕円、放物線、双曲線、平面、球、三角錐、円筒、放物面、双曲面…
底面が楕円の三角錐や円筒、放物線や双曲線を「押し出した」立体など、組み合わせられた複雑な形状も使えます。
さらに、Y = F(X) や Z = F(X,Y) の形式で関数を定義し、曲線や曲面をユーザーが作り出すこともできます。
これらの形状は、別の形状との「交点」を求めることもできます。
APT は、基本的には形状の周囲の「線」に従って素材を削り出しますが、交点まで到達すると、そこからは次の形状に従って移動します。
(実際には、交点から「右」に移動するか「左」に移動するかを指示する必要があります)
これによって形状の一部だけを曲線として利用し、それを組み合わせて複雑な形を作り出すことができました。
これで、球や三角錐、放物面や関数などの「数学的に定義できる」形状の削り出しには対応できるようになりました。
試作段階の 3D-APT III では、より美しく削り出せるように、らせん状に削っています。(図右上)
しかし本当の目的は達成できていません。作りたかったのは、ヘリコプターのローターや、ジェット機の翼などの「自由な」曲面の削り出しなのです。
問題は、そのような曲面をどのように定義したらよいのか、ということでした。
2D-APT II 作成中のロスのレポートでは、これを「未解決の問題」として、問題提起しています。
そして、この問題は結局解決できず、自由曲面の削り出しを目標とした「3D-APT III」は完成しませんでした。
自由曲面の作成方法…。ロスはかなり悩んだようですが、実現することはできませんでした。しかし、提起されたこの問題は MIT や APT の枠を超えて…世界中の数学者が協力する問題となります。
「自由曲線」は数年後には実現します。
しかし、パーソンズがヘリコプターのローターを作った時のように、「曲面」は「曲線」の連続ではありませんでした。
自由曲面の実現アルゴリズムが開発されるのは、ロスの悩みから20年後。
実用的に使用できるソフトウェアの完成までには、それからさらに10年かかりました。