ロボット自主製作概論
Ver. 0.1.1

はじめに

近年ロボティクス技術が再注目されています。 2013年12月にDARPAロボティクスチャレンジ(DRC)予選大会が実施され、この時1位だった日本のSHAFTがGoogleに買収されたの は記憶に新しい所です。GoogleはSHAFTの他にもボストンダイナミクスなど何社ものロボティクス関連企業を買収しており かなり本気になってロボット開発に力を入れていることが分かります。 Google以外にもAmazonはAmazon Picking Challengeというロボットコンテストを開催していますし、倉庫管理や配達に ロボティクス技術を応用しようとするなど力を入れている企業の1つと言えるでしょう。 日本国内に目を向けると、2014年の初夏にはソフトバンクから感情認識ヒューマノイドロボット”Pepper”が発表されました。今年(2015年)には”Pepper”は販売も開始されており、初回出荷分の300台は1分足らずで売り切れています。企業だけでなく、一般の消費者に近い層からもそれだけ注目を浴びていると言えるでしょう。

しかしながらこう言った話だけを聞くと多くの方は自分達には関係ないのでは?と思うかもしれません。実際、Pepperは一般販売されているとはいえ、3年契約で総額100万円超の固定費が必要になります。しかし、時代の最先端を自宅で触れると言うところまではいきませんが、かなりのレベルのものが扱える様になってきています。

3DプリンタやNC工作機械がかなり手頃な値段で購入できる様になってきていますし、3Dプリントサービス等も個人が利用できます. ある程度工夫を必要となりますが、こう言った技術を利用することでかなりのものが製作できます. 以前は機械油や潤滑油まみれになるのを覚悟して工作機械を購入しなければならなかったのを考えると革新的です。 またこう言った話で避けては通れないのは、コンピューティング資源の低価格化が挙げられるでしょう。筆者がロボットに興味を持ち、自分で作ろうと動き出した00年代前半~中頃ではロボットの頭脳として利用できるようなCPUはかなり貧弱でかつ扱いが初心者には難しいものばかりでした。 これも2005年に登場したArduinoを皮切りに、mbed、RaspberryPi、BeagleBone などが利用できます。 これらは安いものでは2000円を切る価格で購入でき、かつUSBケーブルとPCさえあれば無償で開発・実行環境を用意することができます. それでいて計算性能は何倍も上と言うのですから良い時代になったものです.

こう言った要素は一つ一つを見れば関係無いように見えるかもしれませんが、 個人でロボティクスに触れようとした場合には重要な意味を持ってきます。

本書では、この辺について実践例を踏まえつつ紹介することを目指します。

本書のターゲットと目的

以上を踏まえて、筆者らは、大学・高等専門学校製や社会人でロボットを自力で作ってみたい人たちを対象に、 ロボットを作るのに何からはじめたら良いのか、どのようにはじめたら良いのかを掴める一助となるような 情報を提供することを目的として活動します。 とくに本書ではロボット製作入門と称して、 ロボットに使われている技術にはどのようなものがあるのかを筆者らが毎年参加している かわさきロボット大会向けのロボット設計例を引き合いにだしつつわかりやすく運用例を提示することを目指します。

ロボットを構成するもの

説明をはじめる前に

ロボティクス技術を話す前に、一度ロボットとは何か見つめ直してみましょう、 一口にロボットと言っても色々なものがあります。日本人に馴染みがあるもとしては ドラえもんやアトム(ちょっと古い?)、現実的なところでは本田技研工業のASIMOなど があるでしょうか。これらは見た目が人間に近いヒューマノイドロボットですので抵抗なく ロボットだと思えるかもしれません。 では図1の産業用ロボットや図2の掃除ロボットではどうでしょうか? 一番左端のロボットはアームロボットと言うだけあって人の腕の形に近く、ロボットとも 思えなくもないですが、他のものは外見上は想像していたロボットとはかけ離れているか もしれません。では、ロボットとは何なのでしょう?

図1 産業用ロボット
図2 Roomba

ここでWikipediaを見てみると、下記の様に記述されています[3]

ロボット(robot)は、人の代わりに何等かの作業を自律的に行う装置、もしくは機械のこと。
(中略)機械としてのロボットとは、主に以下の意味に大別される。
    1.ある程度自律的に連続、或いはランダムな自動作業を行う機械
    2.人や動物に近い形および機能を持つ機械。

ヒューマノイドロボットやそれに近いロボットは後者の2.に該当しますね。どうやら人や 動物の形や振る舞いを真似ているものだけではなく、自律動作して自動作業を行うもの も広義にはロボットと言える様です。それならば、先ほどの産業用ロボットや掃除ロボット 等もロボットだと思えてくるのでは無いでしょうか。

ロボットの構成要素

それでは、ロボティクス技術に触れる際に必要な技術要素について紹介していきます。 誤解を恐れずに言うと、大きく分けて機械要素、電気要素、ソフトウェア要素の3つににより 構成されると言えます。

例えば、でしぷろんぷとメンバが毎年参加しているかわさきロボット競技大会 (及びその派生大会)ではチームをメカ、エレキ、(とパイロット、キャプテン) のメンバで構成しなければないけません。これはかわさきロボット競技大会では、 少なくともメカとエレキの構成要素が必要であることが分かります。 またパイロットは自律的に動いてロボットのメカ、エレキを制御するので、見方によっては ソフトウェアと言えるかもしれません。

機械要素

機械要素とはロボットの見た目を物理的に構成しているものです。2足歩行ロボットであれば 腕であったり、胴体であったり、脚であったりそういったものです。さらに細かい所ですと、 関節や関節を構成するためのモータ等も機械要素に含まれます。

電気要素

電気要素とは、機械要素で構成されたロボットを駆動するために必要な電気的な構成要素 です。モータに電圧を印加し電流を流すためのアンプ(モータドライバとも言います)や アンプに電圧や電流の設定を行うCPU(マイコン等ですね)、CPU基板等がこれに当たります。 関節を動かすためには前述したモータに電流を流して回転させなければなりません。 電流が流れるという意味ではモータも電気要素だと言えるでしょう。

ソフトウェア要素

ソフトウェア要素とは電気要素で登場したCPU/CPU基板等を制御するためのコンピュータ プログラムに関連する要素です。少し細かい話をすると、純粋なロボット動作を計画・修正 するのを目的とした制御アルゴリズムソフトウェアと周辺機器とのコミュニケーションやそれらを制御アルゴリズムと接続するためのシステムソフトウェアがあります。ソフトウェア要素は ロボットの頭脳と言っても良いかもしれません。

ここまでのまとめ

本章ではロボットを構成する要素を機械(メカ)、電気、ソフトウェアの3要素に分解する と言う考え方を提示しました。本書ではこれらの3つの構成要素を扱う技術についてもう少し噛み砕いて説明していきます。この際、便宜上メカ設計(者)が全ての設計の先頭に立ってつ様な 説明になっていますが、実際には作成するロボットの性質によります。ロボットの電気的 側面を強調した機能をメインに作成する場合には電気設計(者)が主導権を握る場合もあります。ユーザインターフェースを全面に推したい場合や電気や機械要素単体では実現し得ない 全身を協調させるような制御にフォーカスを当てたい場合にはソフトウェアの設計(者) が主導権を握る場合もあります。説明されている手順は様々な変形例が考えられる ということを頭の隅におきつつ、本書を読んでいただけるとさいわいです。

機械要素

メカ設計

メカ(ハードウェア)設計とはロボットの機械要素を扱う行為です。ロボットを扱う企業 などでメカ屋さんと呼ばれる人たちがいたら、これを扱っていると考えれば良いでしょう。 ロボットの外装の設計したり(デザイナーさんが関与する場合もあります)、モータや センサ、部品の配置を実際に設計したりしたりします。構成部品を部品メーカから購入して 組み合わせて(アセンブリして)ロボットを設計する事が多いですが、必要があれば部品 自体も設計します。 本節では簡単にロボットのメカ設計の手順をなぞっていきます.

小目次
3.1 概念設計
3.2 基本設計
3.3 詳細設計
  1) 部品の設計
  2) 全体の設計
3.4 部品製作

概念設計

概念設計の基本

まずは作成したいロボットの方針を決めます。 仕事であればクライアントや組織間の駆け引き、すり合わせがあったり、落としどころを 見つけたりとここが一番面倒かもしれないところですね。しかし、趣味やサークル等で 少人数で製作する場合には自分が分かる様に自由形式で記述すれば良いです。 実際につくるロボットの図を書いても良いですし、ロボットのスペック(仕様)表を作成 しても良いです。競技大会に参加するためのロボットを作るのであれば、応募書類を 作成してみるのも良いかもしれません。

できるか分からないことはあらかじめ確認する

概念設計が終了すると、基本的にはその内容にしたがって製作を進めます。もちろん 製作している中で設計の不整合やミスがでてきたら都度修正を行います。が、修正は 発生するタイミングが遅ければ遅いだけ時間のロスにつながるので概念設計の段階で 実現可能なことのみに絞っておくのがベストです。 筆者も大学入学直後に製作したロボットではイメージ先行で作成に取りかかってしまい 大会直前になって構造に破綻があること気づき絶望したことがあります。 しかしこの段階では作業を机上で行っていますので、実現できるかどうか分からない場合も (特にノウハウが溜まっていないうちは)多いと思います。そのような場合には 以下の項目を頭の中で反芻してみてください。もし容易に答えが頭の中に浮かぶようでしたら 実現できるものとして先にすすみましょう。(もちろんイメージできたからといって その通りに製作できる保証はありませんが、確認しておく事でリスクを大きく減らす 事ができます。)

  1. ロボットを構成する部品が具体的に想像できるか

  2. ロボットの部品を具体的に加工する方法が想像できるか (特に手持ちの工具で加工できるか)

  3. ロボットの動きが頭の中で具体的に想像できるか

では、イメージが出来なかった場合にはどうしたら良いでしょうか。 1の様なケースでは想像できていない部分を抜き出して詳細を詰めてみると良いでしょう。 2の様なケースでは実際に1部品だけ加工できる形状まで分解してみるか、加工方法や 加工精度に自信が無い場合には実際に加工してみるのが吉です。 3の様なケースでは製作するロボットをより簡略したモデルに置き換えて考えて見てください。 それでもダメな場合にはモデルを実際に製作する等して実現の可否にある程度の辺りを つけておくとよいでしょう。これらを検討しても、どうしてもイメージ出来無い場合には、 今はまだ時期尚早だという確率が高いです。 時間に余裕がある場合には少しアイデアを寝かせてみる、そうでない場合には概念設計を みなす等の対策が必要です.

基本設計

概念設計の次は基本設計を行います。基本設計ではロボット全体のメカ構成に破綻がないか を確認しつつ、部品がより具体的に見えてくる所までを下記の観点から行います。

1つ1つの部品を自分たちで作成するのか、どこからか購入するのかを決めるのもこの フェーズで行うことが多いです。(大会規程やクライアントからの要求、組織の方針 などで使用する部品に注文がついている場合は別です、例えばかわさきロボット競技大会 では使用するモータは大会指定のものを使用しなければなりません)。

まだ修正のための時間コストはまだそこまで高くはないので、試行錯誤を行う余地があります。 ロボットの一部の寸法を決めかねている様な場合にはここで、調整するのがよいでしょう。 ただし、概念設計時の様に実際にモデルを作ってみるのは時間がかかる事が多いので 同様のことを行う場合でもシミュレーション上で行うのが好ましいです。

下の図は私がかわさきロボット競技大会に参加する際に作成した機体の基本設計の図になります。ここでは細かい説明は省きますが、全体の寸法や使用するモータやバッテリ、機体の 動作機構についての簡単な説明を記載しています。私は普段3D-CADを使用して設計を行っ ていますので、この時もCADを利用して作成していますが、はじめての場合には手書きで 作成しても問題はありません。

概念設計

詳細設計

製作に配流前の最後に詳細設計を行います。 部品から全体構成まで全てが調和した完全なものを作成して、すぐに製作に取りかかれる 所までを行います。以下は便宜上詳細設計を3つに分割して説明していますが、 これらは状況に応じて、平行に作業を進めます。1つの部品設計が終わる度に全体設計 を更新するのは頻繁に行われます。あまり推奨はできませんが、複数人で行っている場合、 部品設計が終わった段階から順次製作にとりかかる場合もあります。

部品設計

部品単位で形状や寸法を全て明かにして、部品の設計や組み立て後の完成図は CAD(Computer Aided Design)ソフト(通常はCADと呼称します)を利用してロボットの モデルをコンピュータ上で作成します(図1.1)。 C具体的なデータ作成の手順は使用するCADにより手順が異なりますので、ここでは割愛します。

基本は機械要素の作成のみを考えれば充分ですが、より見積りの精度を挙げるためには CPUボードやモータアンプ等の電気要素についてもパーツデータ化します. 。場合によっては3Dモデルを公開しているサイトから入手できる場合もあります, 利用者数が多そうな部品を仕様する場合には下記のサイトを探して見ましょう。

fig1.2 CADを利用している様子
fig1.3 traceparts社サイト
fig1.4 grabcadサイト

全体設計

完成した部品データをロボットを構成する様に組み合わせます。これをアセンブリと言います。 部品間の干渉(意図せず部品同士が当たっていないか)、全体重量の再確認、シミュレーションを用いた動作確認なども行います。

fig1.5では3D-CAD上で重量の見積りを行っています。制限重量の3.50[kg]に対して、 見積り(基本特性の質量の部分)が3.45[kg]となっており、ぎりぎりではありますが 制限内の重量であることが分かります.

fig1.5 全体構成
fig1.6 重量の確認

製作準備

全てのパーツデータが完成したら製作(加工)準備にとりかかります。 準備はどんな手段で製作するかにより異なります。ここでは筆者が普段使用している NC工作機械、3Dプリンタ、その他工作機械を手動で使用する場合について説明します。

NC工作機械

NC工作機械は高速に回転させた刃物で素材を削りパーツを作成する機械です。 利用する際にはGコードと呼ばれるテキストデータを機械(もしくは工作機械を制御している PC)に読み込ませて動作させます。Gコードを作成するにはCAMと呼ばれる支援ソフト を利用するか、自分で作成する必要があります。CAMを利用する場合には、CAD側でCAM が読み込めるデータ形式に部品データを変換する必要があります。

筆者の環境では2.5次元加工ができるNC工作機械(フライス盤)なので、2.5次元加工向けのCut-2Dと呼ばれるCAMを利用しています。これはDXFとよばれる2次元図面用のデータ形式に 対応していますのでCAD側でDXFを作成、CAMでそれを元にGコードを作成します。 詳細は割愛しますが一連の操作は自動では行われず、工具の形状や切り込み量、工具の回転数、 素材のどちら側からどのくらいの速度で当てるかなど、かなり細かい部分まで自分で 操作する必要があります。

自分で作成する場合には以下に示すようなGコードファイルを作成する必要があります。 Gコードでは1行毎に完結した工作機械への命令を記述します。この例ではX軸を5.5mm オフセットした点を原点に設定しなおして(N1)、実際に工具を原点に移動せます(N2). その後工具を加速(N3)、Z軸方向(工具の真下方向)に5.0[mm]移動させ加工をはじめます (N5,N6). Gコードは基本的にシンプルな命令しか存在しない(工具を円軌道で動かす程度の多少 複雑な命令はあります)ので複雑な形状の部品を加工するときに自分で作成するのは あまり現実的ではありません。

// Gコード例
N1 G92 X5.5
N2 G28
N3 G1 F1500.0
N4 G1 Z5.0
N5 G1 X10.0 Y0.0 F3000.0
N6 G1 X10.0 Y10.0

筆者は使用した事がありませんがFusion360という個人で利用する限りは無償のCADが 3DCADベンダのAutodesk社が公開しています.このCADではCAM機能が内蔵されており Gコード作成まで出来るようです。商用のCADに比べると機能面では見劣りしますが、 低コストで環境を構築したい場合には候補になるかと思います.

3Dプリンタ

3Dプリンタを使用する場合はNC工作機械に比べて非常に簡単です。これは3Dプリンタの が広く利用されて来ている理由の一つだと筆者は考えています。最終的にGコードを作成 するという点では変わっていませんが、CAD側でSTL/OBJ形式のファイルを作成した後に 3Dプリンタメーカが公開しているCAMソフトでGコードに変換します。 以下にSTLもしくはOBJ形式のファイル出力に対応した代表的なCAD(とくに無償で 個人利用ができるもの)を挙げますので、検討材料の1つとしてご利用ください。

その他工作機械(手動)

準備と言う面では一番簡単です。(当たり前ですが)Gコードは必要ありません、業務 であればここの部品の図面を作成する所ですが、自前で加工する場合には、自分たちが 分かる形式で図面もどきの様なものを用意すれば問題ありません。

部品製作

最後に部品製作ですが、手順は製作環境に強く依存しますので今回は省略し、初心者 でも手を出し易い低価格モデルを中心に紹介を行います.

NC工作機械

個人向けのNC工作機械は日本国内に限定するとかなり限られます。 ローランドDGもしくはオリジナルマインドの製品が定番です。

3Dプリンタ

最近の3Dプリンタブームでメーカ、機種ともに無数に存在します。 個人向けでは古参となるMakerbotやCubify,SCOOVOなどは日本製という事もあってか 家電量販店で購入できます。ここに挙げた機種以外でも国内の家電量販店で購入できる モデルはいくつかあるので調べてみるとよいでしょう。

その他工作機械

その他の工作機械(旋盤、フライス盤)はかなり古くから個人向けのモデルが展開されて います、プロクソンや東洋アソシエイツの機械は秋葉原や東急ハンズで購入することが 可能です。

電気要素

電気設計

電気(ハードウェア)設計とはロボットの電気要素を扱う行為です。ロボットを制御するための CPUボード等やその周辺回路を開発・設計する人たちを電気屋さんと呼ぶことが多いです。 組織にもよりますがモータ単体の制御を行うソフトウェアプログラム等 (この場合ファームウェアとも言ったりします)を電気屋さんが開発することもあります。 本節では簡単にロボットの電気設計の手順をなぞっていきます.

小目次
4.1 概念設計
4.2 基本設計
4.3 詳細設計
 1) 回路図設計
 2) 配線図設計
4.4 基板製作

概念設計

メカの概念設計内容にしたがい、電気ハードウェアの構成を考えます。 基本的にはロボットの関節に割り当てるモータ(アクチュエータ)をどのような構成で 駆動させるのかをまとめます。ロボットにセンサを搭載する場合にはセンサからどの様な 構成で情報を取得するかもまとめます。フリーフォーマットでシステムや制御のブロック図を 書いてもよいでしょう. 筆者がかわさきロボットに参加した際に考えたロボットの構成をパワーポイントで記述 したものを次に示します。このロボットには大きく分けて脚、腕、補助機構の3つの機構 があります。脚機構は前後左右の計4つユニットが存在し、脚のユニット1つに対して 1つのモータが使用されています。一方で腕機構ではモータは脚ユニットと同じものを使用 していますが計4つ使用しています。これらのユニットは無線装置に連動して動作するため 受信機に接続されたモータアンプによりモータが駆動されます。

脚機構の制御構成
腕機構の制御機構

3つめの補助機構ユニットに ついては腕や脚のユニットは異なり、別種のサーボモータやジャイロセンサを使用して おり少し構成が異なります。この構成はジャイロセンサによりロボットの傾きや転倒を検知し、必要に応じて姿勢を安定化させる補助機構を動作させるために利用します。この補助機構 は無線装置とは連動させずに使用するため受信機とは接続せずに独立したCPU基板により 駆動されます.

補助機構の制御構成

基本設計

基本設計ではロボット全体の構成に破綻がでないように電気部品の構成を考えます。 使用するモータスペックと使用条件から必要な電気的な出力値を見積り、使用する モータアンプやモータアンプ回路(モータドライバ回路)の仕様を積めていきます。 市販のモータアンプでスペックを満たすものがあればそれを利用しますし、 市販のものでは十分な出力が得られない場合には自分でモータドライバ回路を作成します。 メカ設計側の仕様(制約)でサイズや重量に制限があり満足することが出来無い場合にも そうです。その他にもセンサや制御アルゴリズムをロボットに搭載する必要があれば センサとCPUが実装された基板の仕様決めを行います。

前節で提示したロボットでの作成例を以下に示します.

全体の制御構成

この例では、前節で構成を決めた3ユニットを結合したシステムを設計しています。 まずスペックからそれに見合うアンプ、センサ、CPU基板をえいやで決めてしまいます。 その後それぞれの仕様書をもとに電源供給方法等の使用条件を調査します。この結果を 踏まえてロボットに搭載するバッテリで全ての電力をまかなうようにシステムを 設計しています。まずバッテリの出力である8.4V電源ラインを3端子レギュレータと モータアンプおよびサーボモータ入力しています。これは3端子レギュレータにより 5.0Vに降圧されれ、CPU基板(BeagleBoneBlackもしくはBBB)と受信機、モータアンプの ロジック回路側の電源ラインに供給されます。さらにCPU基板上のレギュレータにより 作られる3.3V系の電源ラインをジャイロセンサへ供給しています。以上により電気要素 すべてに電源を供給する構成が作成されました。 次に信号ラインの接続を行います。BBBにはPWM制御端子がありますのでこれをPPM端子 として利用することにしました。またSPI端子はジャイロセンサへの接続に利用しています。

曖昧さを残さない

基本設計を行う中で、どの電気部品を購入したら良いか分からなかったり、使い方が 分からず構成図が曖昧になってしまう事が出てきます。これを放置してしまうと、 製作フェーズで間違いに気づき設計変更をするハメになり得ます。さらに最悪ケースでは 基本設計や概念設計まで立ち戻って設計変更を行わなければならなくなります。 こう言った時間のロスを割けるため基本設計の初期段階で実現可能であることの確証 を得ておきましょう。例えばセンサを使用する場合には、採用予定のCPU基板でセンサ の値が正しく取得できるのかを確認するのがよいでしょう。 なぜならばCPU基板やセンサ側、もしくはCPU基板メーカが用意している開発ライブラリ にバグが潜んでいてそれが自分が利用する環境で悪さをしてしまう可能性等があるからです。 他にも、自分が仕様表の読み違いをしている可能性もあります。 (これは設計者自身のバグと言えるかもしれません) 筆者の経験談としてはデバイス仕様に”ハードウェアによる通信のフロー(旗振り)制御対応” と記載されているのを鵜呑みしてCPU基板を購入し、いざ組み込んでからプログラムを動かして みて正常に動作していないことが発覚して痛い目を見たことがあります.

この際、後述する様な設計手順を用いて試そうとすると時間がかかってしまいますので 簡易的な実験環境を作ることを推奨します。電気工作の世界ではこの様なことを行う場合 ブレッドボードを使用して動作の確認を行います。ブレッドを利用するとハンダ付けを 行うことなくCPU基板とセンサやモータアンプ等と接続して動作を確認することが出来ます。 使い方の詳細説明は様々な解説サイト等が存在していますので、そちらに譲ろうと思います。

ブレッドボード
   製品名:ブレッドボード EIC-343
   購入先:秋月電子
   URL : http://akizukidenshi.com/catalog/g/gP-00316/
   メーカ : E.I.C

ブレッドボード例

ブレッドボードの使用例

部品情報

今回利用した部品の購入先の情報を紹介します

CPU基板
   製品名:BeagleBoneBlack
   購入先:秋月電子
   URL : http://akizukidenshi.com/catalog/g/gM-06867/
   メーカ : TI, Digi-Key
   公式サイトURL: http://beagleboard.org/
BeagleBoneBlack
ジャイロセンサ
   製品名:L3GD20
   購入先:秋月電子
   URL : http://akizukidenshi.com/catalog/g/gK-06779/
   チップメーカ : STマイクロ
   データURL: http://akizukidenshi.com/download/ds/akizuki/ae-l3gd20.pdf

l3gd20

モータアンプ
   製品名:MC402CR
   購入先:フタバ産業
   URL :  http://www.f-sangyo.co.jp/shopdetail/082002000005/
   メーカ : 双葉電子工業
   メーカURL : http://www.rc.futaba.co.jp/dl_manual/data/esc/mc402cr.pdf

   製品名:EXSTRAIGHT N-MR
   購入先:楽天ショップ
   URL : http://item.rakuten.co.jp/hobinavi/4541283602360/
   メーカ: アキュバンス(旧キーエンス ホビー事業部)
   メーカURL: https://acuvance.co.jp/esc/exstraight/index.html
MC402CR
バッテリ
   製品名:京商 71194 8.4V-1800mAh ニッケル水素バッテリー
   購入先:フタバ産業
   URL : http://www.f-sangyo.co.jp/
                    shopdetail/076007000005/076/007/X/page1/brandname/
ニッケル水素バッテリ

詳細設計

設計フェーズの最後に詳細設計を行います。この際、購入した電気部品を組み合わせる だけでシステムが構成できる場合には本節は飛ばしてしまって構いません。 基板を作成する必要がある場合には、回路図と実体配線図(アートワーク)を作成します。 筆者の場合は回路図および実体配線図を作成可能はKiCADやEagle戸呼ばれる電気CADを 使用してこれらを作成します。以下はKiCADで回路図を作成した例になります。

回路図例

以下に詳細設計に利用可能なツールを紹介します.

電気CAD

KiCAD
   ツール名:KiCAD
   URL : http://kicad.jp/
   対応OS : Windows, Mac, Linux
   備考: 無償ツール
          回路図、配線図両方をターゲットとした統合開発環境
        オープンソースプロジェクトであり、複数のOS上で動作
実体配線図例(KiCAD公式サイトより)
Eagle
   ツール名:Eagle
   URL : http://www.cadsoftusa.com/
   対応OS : Windows, Mac, Linux
   備考: 無償版あり(扱える基板サイズやレイヤ数等に制限あり)
          回路図、配線図両方をターゲットとした統合開発環境
        プロプライエタリなソフトウェアでかつ複数のOS上で動作
Eagle使用例(Eagle公式サイトより)

基板製作

詳細設計が終わったら基板製作に取りかかります。基板製作には大きく分けて、自作を する場合と外注を行う場合の2通りがあります本節ではこれらの手段について説明します。

基板を外注する

メカ部品を外注する場合は、かなり費用が高くなるため個人レベルやサークルレベルでは 利用する機械はまず無いと言ってよいと思います。(筆者は社会人に成り立てのころに工作機械を導入していないため、200x100xt2[mm]程度の板材の加工を業者に依頼した事がありますが、2枚の板材を加工するのに20万円超かかったと記憶しています)。 これに大して基板の外注はかなり現実的な価格でおこなうことが出来ます。 小さい基板でかつ業者を選べば1万円を切る価格で依頼することが出来ます。 筆者のまわりで利用されている業者は以下の2社があります。 できるだけ安く仕上げたい場合にはOlimexを利用することが多い様です。

   業者名:P板.com
   URL : http://www.p-ban.com/
   備考: 日本の会社
        1万円を切るのは厳しいかも
   業者名:Olimex
   URL : https://www.olimex.com/
   備考: ブルガリアの会社
       P板より安め
       注文には英語スキルがある程度必要

基板を自作する

外注するほど複雑でない基板であったり、製作数が少ない場合、予算が外注を許さない 場合には自作することになるかと思います。この場合には主に3つの手段があります。

前者になるほど、初期投資が必要になります。ただし、メカ加工様のNC工作機械を持っている場合、基板加工機それを使用できる可能性があります。目安としては作成する基板の穴間隔(ピッチ)より小さい径の工具(エンドミル)が使用出来ることと、工具の回転速度が10000[rpm]以上に設定できることが目安となります.

ソフトウェア要素

ソフトウェア設計

ソフトウェア設計とはロボットのソフトウェア要素を扱う行為です。(ようやく自分の 専門分野にたどり着きました。。。)。ソフトウェア設計ではロボットを制御する ためのソフトウェアプログラム全般を扱います。この中にはシステム要素だけでなく 何らかの制御を実現するアルゴリズム要素も含まれます。またプログラムは前章で挙げた CPU基板上で動作するものだけではなく、CPU基板とリモートで接続されるPC等で実行される ソフトウェア等も含まれます。 本章では簡単にロボットのソフトウェア設計手順をなぞっていきます。

小目次
5.1 概念設計
5.2 基本設計
5.3 詳細設計
5.4 実装(プログラミング)

概念設計

メカ及び電気ハードウェアの概念設計内容にしたがい、ソフトウェアの構成を考えます。 基本的にはロボットの外部仕様を決めればOKです。外部仕様とはロボットが何をトリガ として振る舞いを発生(変化)させるのか、ロボットが発生させる振る舞いとは何かという ことです。その上で、その因果関係を誤解の無いような形で表現します。 要求仕様書であったりUML(Unified Modeling Lauguage)で言うところのユースケース図 等の書類・図面におこしてもよいで章。個人レベルで実施する場合には手書きなどラフな形で作成しても良いです。機能が単純であれば省略してしまうという選択肢もあります。

ここでもかわさきロボット競技大会用のロボット製作を例にとってみましょう。 かわさきロボットでは操作者による無線操縦によりロボットが動作します、つまりこれがトリガとなります。ロボットは自律的に動くのか操作者がいるのかにより操作者がいる場合要求がどの様な形でおこなれるのかを洗い出します。

ユースケース図

UML作成ツール

ユースケース図 これらのツールほユースケース図以外にもUMLで頻繁に使われる様な図面は作成すること が可能です。特にPlantUMLはソースファイルをテキストで作成してコマンドラインツール からコンパイルすることでUML図を作成できるので、各種ソフトウェア資産との相性が とてもよいです。筆者は簡単なシーケンス図の場合にはPowerPointで済ませてしまうこと もありますが、PlantUMLを使用することが多いです.GUI付きの専用ソフトウェアを利用し たい人はastahの無償版を利用するのがよいでしょう.

PlantUML
   ツール名:PlantUML
   URL : http://ja.plantuml.com/
   対応OS : Windows, Mac, Linux
   備考: オープンソースプロジェクトで無償
          UML用の専門ツールで全般の作成が可能
        Javaで実装されているため複数のOS上で動作する。
PowerPoint
   ツール名:PowerPoint
   対応OS : Windows, Mac
   備考: マイクロソフトさまによるプロプライエタリソフトウェア
          馴染みがあるのでお手軽?
          一人前のパワーポッターに近づけるかも?
astah
   ツール名:http://astah.change-vision.com/ja/product/astah-community.html
   URL : http://ja.plantuml.com/
   対応OS : Windows, Mac, Linux
   備考: プロプライエタリソフトウェア'astah'の無償版
          バージョン7.0より、商用目的ではご利用いただけなくなりました.だと?

基本設計

基本設計ではロボット全体の構成に破綻がでないようにソフトウェアの構成を考えます。 この段階ではロボットの内部仕様に少し踏み込んだ設計を行います。内部を制御単位 (モータ等のアクチュエータですね)や観測単位(センサ等)、要求発行者単位 (操作者、送信機、受信機)で分解してその間のコミュニケーションがどの様に行われる のかを明らかにします。前節と同じ表現を用いるのであれば単位毎の外部仕様を決定します。 これは依存関係、順序関係、状態変化の関係と言うかたちで 記述できればよいでしょう。またそれを実現うえで必要な外部要素があればここで決めて 置くべきでしょう、外部のライブラリやドライバ、ロボット側に搭載するOSなどが必要か 堂かを検討しましょう。 前者に関してはUMLを利用する事が出来ます、この時クラス図、シーケンス図、ステートマシン図を作成すること二なるかと思います。 後者に関しては作成するソフトウェアと外部要素との依存関係を明確にしておくべきです。 これにはソフトウェアスタック図などに書き起こして置けば後々有用でしょう。 ここでも、記述するないようが自明なものばかり出会ったり、シンプルな内容であるならば 省略してしまっても良いかと思います。例えば、OSレス環境でドライバも何もベタに記述 してしまって機能を実現するのがベストであるならスタック図は不要でしょう。 なお、なにかしらのツールを使用する場合には概念設計で提示したものがそのまま利用できます。

Non-OS vs OS

このフェーズでよく話題になるのがロボット側の実行環境にOSを載せるのか載せないのかと いう議論です。それぞれ言い分はありますが、Nos-OS側のメリットとしてはOSをいれない分 より(割り込みルーチンの)応答性が上がったり、設計時の見通しが立て易い、省メモリで すむなど様々なメリットがあります。しかしOSにはそれを補って余りある魅力があるのも 事実です。(とくにリッチな)OSが搭載されていれば、さまざまな資産が利用できます。 デバイスドライバであったり、各種ライブラリ、デバッグツール、タスク管理や並列 処理を実現するシステムコールなどさまざまな恩恵を受けることができます。 (もちろん業務で開発する場合にはそんなに単純な話ではないのですが。。。) 趣味やサークルで利用する範囲では思い切ってソフトウェアの開発効率を優先して、リッチなOSを載せることを絶対条件としてハードウェアへの要求をあげるのもアリだと思います。 まさにソフトウェア主導によるハードウェアの設計というわけですね。 (とはいっても、筆者自身は状況によって両者を使い分けて利用しています)。

ここで電気設計で登場したBeableBoneBlackで利用できるOSを紹介します。 ここであげるもの以外にもいくつも利用できるOSはありますので調べてみるとよいでしょう。

Debian

Linux系のOS(正確にはディストリビューション)です。 私は実行環境側(ロボット側)でよく利用します。 保守的に構成されているので安定性のあるLinux実行環境を求めるのであればDebianを 選ぶのがよいでしょう.

Android

みなさまお馴染みのAndroidです。 ディスプレイをつないでAndroidアプリを動かしたい、流用したいなどの要求がある場合には 選んでもいいかもしれません。中身はLinuxなので各種Unix系のリソースが仕様できるのも うれしいですね.

Ubuntu

UbuntuですDebianの弟分みたいなものですが、中身はDebiaんに比べてアグレッシブ なので新しい機能、デバイスにいち早く対応したい場合には選んでも良いかと思います。 私は実行環境側ではなく開発環境として利用しています。

詳細設計

詳細設計では実装をはじめるのに十分なところまで設計を詳細化し(落とし込み)ます。 前節で挙げた各単位毎に内部の設計を完成させます。観測単位であればセンサとは どの様な通信プロトコルで通信するのか、その時の通信確立からセンサ値の受け渡しは どの様な手順で行われるのかといったところを明確にしていきます。アクチュエータや 送受信機などでも同様です。またこの時の通信手段に応じてCPU基板側のプログラムでは どの様にCPU基板内部のペリフェラル機能(CPUの演算機能以外の機能の事で通信機能や周辺 デバイスへのアクセス機能などのことを言います。)をどの様に利用するかも明かにします。 ここでもUMLを前2節と同様にUMLのクラス図等を利用する事が出来ます。

実装(プログラミング)

ここまできたら楽しい楽しい実装フェーズです。 ここではプログラムを記述するためのプログラミング言語を駆使することになります。 さらにこれを解釈して実際のプログラムを生成するコンパイラ等のツールや それをサポートする統合開発環境、プログラムのバグを潰す作業(デバッグ作業) に利用するデバッガなどを仕様することになります。 思い思いの開発環境、プログラミング言語、デバッグ環境を使って開発を行えばよいと 思いますが、参考のためBeableBoneBlack(BBB)でLinux系のOS(ディストリビューション)を 利用した際にロボット向けのソフトウェア開発に利用できる言語をいくつか挙げておきます。 当然ここであげるもの以外にもいくつも利用できる言語は無数に存在しますので調べてみるとよいでしょう。

BBB上のLinuxで利用できるプログラミング言語(一部)

C言語

組み込みの大定番ですね。LinuxもC言語で実装されています。 言語自体の機能は貧弱なので、ある意味マゾ向けの言語かもしれません。 メモリ空間を意識したプログラミングをやるには良い言語かと思います。 熟練者になればOSのコードも読めるようになります、きっと。

C++

Cを変態拡張した言語です。極めると闇の軍団に入れるらしいです。 筆者はもそれなりに好んで仕様します。C言語の良いところを味わいつつ 便利機能(テンプレート、クラス、C++11的な機能)を使いたい場合に非常に便利です。 C言語とバイナリレベルで互換性があるのも良いです。 Boost:Pythonを利用するとPythonとの連携が比較的簡単に行えます.

python

最近は科学技術系の数値演算にも利用されているようで、Matlab等と比較されることもあります。たしかにNumpyやMatplotlib等のライブラリを仕様することでかなりMatlabに近い感覚で 行列演算やグラフ描画が出きるようになっています。 複数の実行環境がありますが、筆者はLinux標準のPython環境(フロントエンド)ではなくて IPythonを利用しています。IPythonのフロントエンド機能は各種関数や変数、定数 などの補完機能など非常に強力な強化が盛り込まれています。

haskell

参照透明な海を守りつつ、λ娘と仲良くなれます。 わたしも海を守れる立派な防人になりたいです。

実装環境向けホストPC

プログラミング以外の実装方法

楽しくプログラミングしましょうと言った直後で何ですが、プログラミング言語を 利用せずにロボットのためのソフトウェアを作成することも出来ます。 Matlab (+ Simlink + Roboticsツールボックス)を利用すれば出来るらしいです。 (筆者は試したことはありません。)

99 Wikipedia ファナック, https://ja.wikipedia.org/wiki/ファナック#/media/File:Arc-welding.PNG, 2015>年12月21日閲覧 Wikipedia Roomba, https://upload.wikimedia.org/wikipedia/commons/2/27/Робот_пылесос_Roomba_780.PNG, 2015>年12月21日閲覧 FreeCAD 公式HP, http://www.freecadweb.org, 2015>年12月21日閲覧 traceparts社サイト公式HP, http://www.freecadweb.org, 2015>年12月21日閲覧 grabcad社サイト公式HP, http://www.freecadweb.org, 2015>年12月21日閲覧 Wikipedia ブレッドボード, https://upload.wikimedia.org/wikipedia/commons/thumb/7/73/400_points_breadboard.PNG/1024px-400_points_breadboard.PNG, 2015年12月21日閲覧 Wikipedia ブレッドボード, https://upload.wikimedia.org/wikipedia/commons/thumb/6/68/Breadboard_counter.PNG/1024px-Breadboard_counter.PNG, 2015年12月21日閲覧 秋月電子通商 オンラインショップ, http://akizukidenshi.com/img/goods/C/M-06867.PNG, 2015年12月21日閲覧 秋月電子通商 オンラインショップ, http://akizukidenshi.com/img/goods/C/M-06779.PNG, 2015年12月21日閲覧 双葉電子工業 公式HP, https://www.rc.futaba.co.jp/esc/img/img_04.PNG, 2015年12月21日閲覧 双葉産業 オンラインショップ, http://www.f-sangyo.co.jp/shopimages/futasanNET/0760070000052.PNG, 2015年12月21日閲覧

KiCAD公式サイト, http://kicad.jp/wp-content/uploads/2011/02/kicad_brd1.PNG, 2015年12月21日閲覧 EAGLE公式サイト, http://www.cadsoftusa.com/eagle-pcb-design-software/about-eagle, 2015年12月21日閲覧

おわりに

最後までお読みいただきありがうございました。

筆者が学生自体にロボットに興味を持ちはじめたころ周囲ではPIC16F84AやH8-3048等が 電子工作の定番でした。開発環境1式を揃えるだけで1万は軽く超えるような出費が必要で、開発環境も(知識がなかったのと言うのもありますが)選択肢が限られていました。C言語を使用したい場合にはコンパイラを購入しなければならなかったりもしました。 それが今やmbed,Arduino,BeableBone,RaspberryPi,Edisonなど多種多様な選択肢があり、使用するOSや言語、開発環境も同様です。本当に良い時代になったものです。

さらに部品製作手段に関しては、KickStarter等のクラウドファウンディングの力をかりたおもしろい動きが見られるようになり、その中で3Dプリンタの次の新たな流がおこりつつあるのを感じています。特にここ2、3年であるプロジェクトが動き出しました。個人利用をターゲットとした5軸NCフライス盤であるPocketNCで、ちょうど今月から出荷が開始された様です。日本での購入は現在のところ難しいですが、世の中に広がれば個人レベルでの製作物に飛躍的進化が見られると期待しています。

ああ、早く欲しいなPocketNC。

— @takarakasai 2015/12/30 PM11:59

発行

でし・ぷろんぷと \ 2015 年 12 月 30 日 初版 発行

Web

http://kohya.net/

http://deshi-prompt.github.io/

Mail

ada.robo1@gmail.com

クリエイティブ・コモンズ・ライセンス
deshi-pro note No.001クリエイティブ・コモンズ 表示 - 非営利 - 継承 4.0 国際 ライセンスの下で提供されています。