以下、本発明の実施の形態について図面を参照しつつ説明する。以下の説明において、既に説明した構成及びこれに相当する構成については、同一の符号を付して同じ説明を繰り返さない。
本実施形態に係るロボット10は、図1に示すように、4つの体節1A、1B、1C、1Dと、2つのヘッド部2A、2Bと、制御部3と、を備えている。図1において、体節1A、1Bは、後述する伸縮アーム11が体軸方向に対して左に伸長し、体節1C、1Dは、伸縮アーム11が体軸方向に対して右に伸長する。なお、以下の説明では、4つの体節1A、1B、1C、1Dを体節1、2つのヘッド部2A、2Bをヘッド部2と総称することがある。
各体節1は、それぞれ、図1〜図3に示すように、伸縮アーム11と、3つの回転アーム12と、2つのプレート13、14と、を有している。なお、説明の便宜上、各体節1において、プレート13側を正面、又は前若しくは先、プレート14側を背面又は後という。図2及び図3においては、プレート13は省略し、プレート14の一部のみを示す。
伸縮アーム11は、図2及び図3に示すように、ロボット10の体軸方向に沿って伸縮可能であり、好ましくはリニアアクチュエータで構成されている。伸縮アーム11は、先端部111がプレート13に接続されるとともに、後端部112がプレート14に接続されている。
3つの回転アーム12は、図2に示すように、伸縮アーム11の周囲に等間隔で配置されている。各回転アーム12は、初期状態においては、伸縮アーム11が伸長する方向と同じ方向に延びている。各回転アーム12は、サーボモータ121と、ハンド部122と、ロボット10の体軸方向に約90度で交差する方向に延びる回転軸123と、を備えている。各サーボモータ121は、回転軸123周りにおいて双方向に回転する。ハンド部122は、中央部が膨らんだ円柱形状に形成されており、サーボモータ121の先端部に設けられた取付部124を介してサーボモータ121に取り付けられている。
プレート13は、図1に示すように、体節1の前端に設けられ、プレート本体131を有している。プレート本体131の後面には、伸縮アーム11の先端部111が接続されている。
プレート14は、図1に示すように、体節1の後端に設けられている。プレート14は、図1〜図3に示すように、プレート本体141と、伸縮アーム11とプレート本体141とを接続する接続部材142と、各回転アーム12とプレート本体141とを接続する3つの接続部材143と、を有している。
接続部材142は、図3に示すように、プレート本体141の前面中央部において正面視で略U字状に形成されており、伸縮アーム11の後端部112を把持している。3つの接続部材143は、図2及び図3に示すように、プレート本体141の前面において、接続部材142の周囲に等間隔で配置されている。各接続部材143は、プレート本体141の前面に固定される底部143aと、底部143aの前面から突出する壁部143bと、を有している。壁部143bは、隣り合う2つの回転アーム12の各サーボモータ121の側面に沿うように、約120度の角度をなすL字状に形成されている。壁部143bの両端部には、略U字状の溝143cが形成されており、各溝143cは隣り合う2つの回転アーム12の各回転軸123を支持している。
各体節1の間には、隣接する体節1同士が相対的に屈曲及び回転可能なよう、この体節1同士を連結する関節機構4が設けられている。各関節機構4は、図1に示すように、プレート本体131の前面及びプレート本体141の後面に取り付けられている。なお、本実施形態では、関節機構4としていわゆる球面軸受を採用しているが、これに限定されるものではない。各関節機構4は、ハウジング41と、ハウジング41内に収容されたリテーナ42と、隣接する関節機構4の連結部43と連結される連結部43と、を有している。リテーナ42は、内部に太陽球(図示省略)を収容するとともに内壁面にベアリング(図示省略)を保持しており、リテーナ42内で太陽球が傾いたり回転したりすることによって、隣接する体節1同士が相対的に屈曲及び回転する。制御部3において、体節1B、1Cと対向する面にも関節機構4が設けられており、制御部3は体節1B、1Cと相対的に屈曲及び回転する。なお、図1において、体節1A、1Dは、プレート本体141の後面上に関節機構4が設けられていないが、他の体節1B、1Cと同様に、プレート本体141の後面上に関節機構4が設けられていてもよい。
ヘッド部2A、2Bは、図1に示すように、ロボット10の両端部に設けられている。ヘッド部2A、2Bは、それぞれ、体節1A、1D側に関節(図示省略)を有しており、隣接する体節1A、1Dと相対的に屈曲することができる。なお、ヘッド部2の関節としては、関節機構4と同様のものを使用してもよいし、関節機構4と別のものを使用してもよい。また、ヘッド部2は、図4に示すように、2つのモータ21と、超音波距離計22と、を備えている。2つのモータ21のうち一方は、ヘッド部2をロボットの進行方向に対して上下に動かし、他方は、ヘッド部2を進行方向に対して左右に動かす。超音波距離計22は、発射した超音波が反射して戻ってくるまでの時間に基づいて、ヘッド部2とヘッド部2の前方に位置する物体との距離を算出する。
制御部3は、マイクロコンピュータが組み込まれており、体節1A〜1D及びヘッド部2A、2Bを制御する。制御部3は、図4に示すように、CPU基板(ユーザボード)31と、CPU基板(I/Fボード)32と、を備えている。制御部3は、無線モジュール51、52を介してコンピュータ6と通信可能であるとともに、体節1A〜1D及びヘッド部2A、2Bとも通信可能となっている。
ユーザボード31は、後述のロボット10の動作モードに関する指令信号をコンピュータ6から受信し、且つヘッド部2とヘッド部2の前方に位置する物体との距離信号を、I/Fボード32を介して超音波距離計22から受信する。ユーザボード31は、距離信号に基づいてロボット10が進行可能な空間が存在する方向を決定し、ロボット10の進行方向及び動作に関する指令信号をI/Fボード32に引き渡す。また、ユーザボード31は、後述のカウントT及び指示角度θを記憶する。
I/Fボード32は、ユーザボード31から受け取った指令信号を駆動信号に変換して、各体節1における伸縮アーム11及び回転アーム12のサーボモータ121、並びに各ヘッド部2の各モータ21に送信する。なお、各回転アーム12には、必要に応じて、RS232−RS432変換基板等のシリアル信号変換基板125が設けられていてもよい。
次に、上述のように構成されたロボット10の動作について説明する。
ロボット10は、コンピュータ6の指令信号に基づき、所定の動作モードで動作を行う。動作モードとしては、最速モード、安定モード、省エネモード、掻き出しモード、及び左右掻き出しモードを挙げることができる。以下、各動作モードでのロボット10の動作について詳細に説明する。なお、いずれの動作モードにおいても、初期位置では、体節1A〜1Dにおいて、各伸縮アーム11は収縮状態となっており、回転アーム12は伸縮アーム11が伸長する方向と同じ方向に延びた状態、つまり閉じた状態となっている(図示省略)。
(最速モード)
以下、ロボット10が最速モードで管P内を移動する場合の動作について、図5及び図6を参照しつつ説明する。
制御部3において、ユーザボード31は、最速モードで動作させるための指令信号をコンピュータ6から受信すると、体節1Dの各サーボモータ121を回転させるための指令信号を生成する。ユーザボード31は、この指令信号をI/Fボード32に引き渡し、I/Fボード32は、受け取った指令信号を駆動信号に変換して体節1Dの各サーボモータ121に送信する。この駆動信号によって、体節1Dの各サーボモータ121は、伸縮アーム11から離れるように回転軸123周りに回転する。これにより、図5及び図6(1)に示すように、体節1Dの各ハンド部122が管Pの内壁面に当接し、ロボット10は、管Pの内壁面上において、体節1Dの各回転アーム12によって支持される(ステップS101)。
次に、ユーザボード31は、体節1A〜1Dの各伸縮アーム11を伸長させるための指令信号を生成するとともにカウントTを0に初期化し、指令信号をI/Fボード32に引き渡す。I/Fボード32は、受け取った指令信号を駆動信号に変換して体節1A〜1Dの各伸縮アーム11に送信する。この駆動信号によって、図6(2)に示すように、体節1A〜1Dの各伸縮アーム11が伸長する(ステップS102)。このとき、体節1Dの各回転アーム12は、管Pの内壁面においてロボット10を支持したままである。これにより、体節1A〜1C、制御部3、及びヘッド部2Aは進行方向前方に移動する。
ユーザボード31は、カウントTが250を超えているか否か判断する(ステップS103)。カウントTが250以下である場合、ユーザボード31は、カウントTをインクリメントし(ステップS104)、体節1A〜1Dの各伸縮アーム11は、伸長動作が完了していない場合、伸長動作を継続する(ステップS102)。ここで、ユーザボード31の性能等にもよるが、通常、カウントTが0から250になるまでには約5秒間を要する。すなわち、体節1A〜1Dの各伸縮アーム11が伸長を開始してから約5秒間は、次のステップS105の処理が開始されない。このように、本実施形態では、各伸縮アーム11の動作開始から次の動作開始まで約5秒間の待機時間を確保することによって、各伸縮アーム11の動作が完了しないうちに次の動作が開始されるのを防止している。
カウントTが250を超えた場合、ユーザボード31は、体節1A、1Dの各サーボモータ121を回転させるための指令信号を生成し、この指令信号をI/Fボード32に引き渡す。I/Fボード32は、この指令信号を駆動信号に変換して体節1A、1Dの各サーボモータ121に送信する。この駆動信号によって、図6(3)に示すように、体節1Aにおいて、各サーボモータ121が伸縮アーム11から離れるように回転軸123周りに回転し、これにより、各ハンド部122が管Pの内壁面に当接する。一方、体節1Dにおいては、各サーボモータ121が伸縮アーム11に近づくように回転軸123周りに回転し、これにより、各ハンド部122が管Pの内壁面から離間する。この結果、ロボット10は、管Pの内壁面上において、体節1Aの各回転アーム12によって支持される(ステップS105)。
次に、ユーザボード31は、体節1A〜1Dの各伸縮アーム11を収縮させるための指令信号を生成するとともにカウントTを0に初期化し、この指令信号をI/Fボード32に引き渡す。I/Fボード32は、この指令信号を駆動信号に変換して体節1A〜1Dの各伸縮アーム11に送信する。体節1A〜1Dの各伸縮アーム11は、図6(4)に示すように、この駆動信号によって収縮する(ステップS106)。このとき、体節1Aの各回転アーム12は、管Pの内壁面上において、ロボット10を支持したままである。これにより、体節1B〜1D、制御部3、及びヘッド部2Bは、進行方向前方に移動し、ロボット10が管P内で前進する。
ユーザボード31は、カウントTが250を超えているか否か判断する(ステップS107)。カウントTが250以下である場合、ユーザボード31は、カウントTをインクリメントし(ステップS108)、体節1A〜1Dの各伸縮アーム11は、収縮動作が完了していない場合、収縮動作を継続する(ステップS106)。
カウントTが250を超えた場合、ユーザボード31は、コンピュータ6から動作終了の指令信号を受信しているか否かを判断する(ステップS109)。ユーザボード31が動作終了の指令信号を受信している場合、最速モードの動作は終了する。
ユーザボード31が動作終了の指令信号を受信していない場合、ユーザボード31は、体節1Aの各サーボモータ121を回転させるための指令信号を生成し、この指令信号をI/Fボード32に引き渡す。I/Fボード32は、この指令信号を駆動信号に変換して体節1Aの各サーボモータ121に送信する。この駆動信号によって、体節1Aにおいて、各サーボモータ121が伸縮アーム11に近づくように回転軸123周りに回転し、各ハンド部122が管Pの内壁面から離間する。これにより、体節1Aによるロボット1の支持が解除され、初期状態(図示省略)に戻る(ステップS110)。その後、ステップS101〜ステップS109の処理が再度行われる。
このように、最速モードにおいては、体節1A〜1Dの伸縮アーム11を同時に伸縮させるため、ロボット10を高速で前進させることができる。
(安定モード)
以下、ロボット10が安定モードで管P内を移動する場合の動作について、図7A、図7B、及び図8を参照しつつ説明する。
ユーザボード31は、安定モードで動作させるための指令信号をコンピュータ6から受信すると、体節1B〜1Dの各サーボモータ121を回転させ、且つ体節1Aの伸縮アーム11を伸長させるための指令信号を生成するとともにカウントTを0に初期化し、指令信号をI/Fボード32に引き渡す。I/Fボード32は、この指令信号を駆動信号に変換して体節1B〜1Dの各サーボモータ121、及び体節1Aの伸縮アーム11に送信する。この駆動信号によって、図8(1)に示すように、体節1B〜1Dにおいて、各サーボモータ121が伸縮アーム11から離れるように回転軸123周りに回転し、各ハンド部122が管Pの内壁面に当接する。また、図8(2)に示すように、体節1Aの伸縮アーム11が伸長する。これにより、管Pの内壁面上においてロボット10が体節1B〜1Dの各回転アーム12によって支持されるとともに、体節1A及びヘッド部2Aが進行方向前方に移動する(ステップS201)。
ユーザボード31は、カウントTが250を超えているか否か判断する(ステップS202)。カウントTが250以下である場合、ユーザボード31は、カウントTをインクリメントし(ステップS203)、体節1Aの伸縮アーム11は、伸長動作が完了していない場合、伸長動作を継続する(ステップS201)。
カウントTが250を超えた場合、ユーザボード31は、体節1A、1Bの各サーボモータ121を回転させるための指令信号を生成し、この指令信号をI/Fボード32に引き渡す。I/Fボード32は、この指令信号を駆動信号に変換して体節1A、1Bの各サーボモータ121に送信する。この駆動信号によって、図8(3)に示すように、体節1Aにおいて、各サーボモータ121が伸縮アーム11から離れるように回転軸123周りに回転し、これにより、各ハンド部122が管Pの内壁面に当接する。一方、体節1Bにおいては、各サーボモータ121が伸縮アーム11に近づくように回転軸123周りに回転し、これにより、各ハンド部122が管Pの内壁面から離間する。この結果、体節1Bの各回転アーム12によるロボット10の支持は解除され、ロボット10は、管Pの内壁面上において、体節1A、1C、及び1Dの各回転アーム12によって支持される(ステップS204)。
次に、ユーザボード31は、体節1A、1Bの各伸縮アーム11を伸縮させるための指令信号を生成するとともにカウントTを0に初期化し、この指令信号をI/Fボード32に引き渡す。I/Fボード32は、この指令信号を駆動信号に変換して体節1A、1Bの各伸縮アーム11に送信する。この駆動信号によって、図8(4)に示すように、体節1Aの伸縮アーム11は収縮し、体節1Bの伸縮アーム11は伸長する(ステップS205)。これにより、体節1Bが進行方向前方に移動する。
ユーザボード31は、カウントTが250を超えているか否か判断する(ステップS206)。カウントTが250以下である場合、ユーザボード31は、カウントTをインクリメントし(ステップS207)、体節1A、1Bの伸縮アーム11は、伸縮動作が完了していない場合、伸縮動作を継続する(ステップS205)。
カウントTが250を超えた場合、ユーザボード31は、体節1Bの各サーボモータ121を回転させるための指令信号を生成し、この指令信号をI/Fボード32に引き渡す。I/Fボード32は、この指令信号を駆動信号に変換して、この駆動信号を体節1Bの各サーボモータ121に送信する。この駆動信号によって、図8(5)に示すように、体節1Bにおいて、各サーボモータ121が伸縮アーム11から離れるように回転軸123周りに回転し、各ハンド部122が管Pの内壁面に当接する。これにより、ロボット10は、管Pの内壁面上において、体節1A〜1Dの各回転アーム12によって支持される(ステップS208)。
次に、ユーザボード31は、体節1B、1Cの各伸縮アーム11を伸縮させるための指令信号を生成するとともにカウントTを0に初期化し、この指令信号をI/Fボード32に引き渡す。I/Fボード32は、この指令信号を駆動信号に変換して体節1B、1Cの各伸縮アーム11に送信する。この駆動信号によって、図8(5)に示すように、体節1Bの伸縮アーム11は収縮し、体節1Cの伸縮アーム11は伸長する(ステップS209)。これにより、体節1Bと体節1Cとの間に配置された制御部3が進行方向前方に移動する。
ユーザボード31は、カウントTが250を超えているか否か判断する(ステップS210)。カウントTが250以下である場合、ユーザボード31は、カウントTをインクリメントし(ステップS211)、体節1B、1Cの伸縮アーム11は、伸縮動作が完了していない場合、伸縮動作を継続する(ステップS209)。
カウントTが250を超えた場合、ユーザボード31は、体節1Cの各サーボモータ121を回転させるための指令信号を生成し、この指令信号をI/Fボード32に引き渡す。I/Fボード32は、この指令信号を駆動信号に変換して体節1Cの各サーボモータ121に送信する。この駆動信号によって、図8(6)に示すように、体節1Cにおいて、各サーボモータ121は、伸縮アーム11から近づくように回転軸123周りに回転し、各ハンド部122が管Pの内壁面から離間する。これにより、体節1Cの各回転アーム12によるロボット10の支持が解除され(ステップS212)、ロボット10は、管Pの内壁面上において、体節1A、1B、及び1Dの各回転アーム12によって支持される。
次に、ユーザボード31は、体節1C、1Dの各伸縮アーム11を伸縮させるための指令信号を生成するとともにカウントTを0に初期化し、この指令信号をI/Fボード32に引き渡す。I/Fボード32は、この指令信号を駆動信号に変換して体節1C、1Dの各伸縮アーム11に送信する。この駆動信号によって、図8(6)に示すように、体節1Cの伸縮アーム11は収縮し、体節1Dの伸縮アーム11は伸長する(ステップS213)。これにより、体節1Cが進行方向前方に移動する。
ユーザボード31は、カウントTが250を超えているか否か判断する(ステップS214)。カウントTが250以下である場合、ユーザボード31は、カウントTをインクリメントし(ステップS215)、体節1C、1Dの伸縮アーム11は、伸縮動作が完了していない場合、伸縮動作を継続する(ステップS213)。
カウントTが250を超えた場合、ユーザボード31は、体節1C、1Dの各サーボモータ121を回転させるための指令信号を生成し、この指令信号をI/Fボード32に引き渡す。I/Fボード32は、この指令信号を駆動信号に変換して体節1C、1Dの各サーボモータ121に送信する。この駆動信号によって、図8(7)に示すように、体節1Cにおいて、各サーボモータ121が伸縮アーム11から離れるように回転軸123周りに回転し、これにより、各ハンド部122が管Pの内壁面に当接する。一方、体節1Dにおいては、各サーボモータ121が伸縮アーム11に近づくように回転軸123周りに回転し、これにより、各ハンド部122が管Pの内壁面から離間する。この結果、体節1Bの各回転アーム12によるロボット10の支持が解除され、ロボット10は、管Pの内壁面上において、体節1A〜1Cの各回転アーム12によって支持される(ステップS216)。
次に、ユーザボード31は、体節1Dの伸縮アーム11を収縮させるための指令信号を生成するとともにカウントTを0に初期化し、この指令信号をI/Fボード32に引き渡す。I/Fボード32は、この指令信号を駆動信号に変換して体節1Dの伸縮アーム11に送信する。この駆動信号によって、図8(7)に示すように、体節1Dの伸縮アーム11は収縮する(ステップS217)。これにより、体節1D及びヘッド部2Bが進行方向前方に移動し、ロボット10が管P内で前進する。
ユーザボード31は、カウントTが250を超えているか否か判断する(ステップS218)。カウントTが250以下である場合、ユーザボード31は、カウントTをインクリメントし(ステップS219)、体節1Dの伸縮アーム11は、収縮動作が完了していない場合、収縮動作を継続する(ステップS218)。
カウントTが250を超えた場合、ユーザボード31は、コンピュータ6から動作終了の指令信号を受信しているか否かを判断する(ステップS220)。ユーザボード31が動作終了の指令信号を受信している場合、安定モードの動作は終了する。
ユーザボード31が動作終了の指令信号を受信していない場合、ユーザボード31は、体節1Aの各サーボモータ121を回転させるための指令信号を生成し、この指令信号をI/Fボード32に引き渡す。I/Fボード32は、この指令信号を駆動信号に変換して体節1Aの各サーボモータ121に送信する。この駆動信号によって、体節1Aにおいて、各サーボモータ121が伸縮アーム11に近づくように回転軸123周りに回転し、各ハンド部122が管Pの内壁面から離間する。これにより、体節1Aによるロボット10の支持が解除される(ステップS221)。その後、ステップS201〜ステップS220の処理が再度行われる。なお、体節1B、1Cの各ハンド部122は既に管Pの内壁面に当接した状態となっているため、再度のステップS201では、体節1Dのサーボモータ121のみが回転軸123周りに回転する。
このように、安定モードにおいては、各体節1の伸縮アーム11を伸縮させるときに3つの体節1の回転アーム12によってロボット10を支持するため、ロボット10を安定して前進させることができる。ただし、各体節1における伸縮アーム11の伸縮に際しては、少なくとも2つの体節1の回転アーム12でロボット10を支持することができればよい。
(省エネモード)
以下、ロボット10が省エネモードで管P内を移動する場合の動作について、図9及び図10を参照しつつ説明する。
ユーザボード31は、省エネモードで動作させるための指令信号をコンピュータ6から受信すると、体節1Bの各サーボモータ121を回転させるための指令信号を生成し、この指令信号をI/Fボード32に引き渡す。I/Fボード32は、この指令信号を駆動信号に変換して体節1Bの各サーボモータ121に送信する。この駆動信号によって、図10(1)に示すように、体節1Bにおいて、各サーボモータ121が伸縮アーム11から離れるように回転軸123周りに回転し、各ハンド部122が管Pの内壁面に当接する。これにより、ロボット10は、管Pの内壁面上において、体節1Bの各回転アーム12によって支持される(ステップS301)。
次に、ユーザボード31は、体節1Aの伸縮アーム11を伸長させるための指令信号を生成するとともにカウントTを0に初期化し、この指令信号をI/Fボード32に引き渡す。I/Fボード32は、この指令信号を駆動信号に変換して体節1Aの伸縮アーム11に送信する。この駆動信号によって、図10(2)に示すように、体節1Aの伸縮アーム11は伸長する(ステップS302)。これにより、体節1A及びヘッド部2Aが進行方向前方に移動する。
ユーザボード31は、カウントTが250を超えているか否か判断する(ステップS303)。カウントTが250以下である場合、ユーザボード31は、カウントTをインクリメントし(ステップS304)、体節1Aの伸縮アーム11は、伸長動作が完了していない場合、伸長動作を継続する(ステップS302)。
カウントTが250を超えた場合、ユーザボード31は、体節1A、1Bの各サーボモータ121を回転させるための指令信号を生成し、この指令信号をI/Fボード32に引き渡す。I/Fボード32は、この指令信号を駆動信号に変換して体節1A、1Bの各サーボモータ121に送信する。この駆動信号によって、図10(3)に示すように、体節1Aにおいて、各サーボモータ121が伸縮アーム11から離れるように回転軸123周りに回転し、これにより、各ハンド部122が管Pの内壁面に当接する。一方、体節1Bにおいては、各サーボモータ121が伸縮アーム11に近づくように回転軸123周りに回転し、これにより、各ハンド部122が管Pの内壁面から離間する。この結果、体節1Bの各回転アーム12によるロボット10の支持は解除され、ロボット10は、管Pの内壁面上において、体節1Aの各回転アーム12によって支持される(ステップS305)。
次に、ユーザボード31は、体節1Aの伸縮アーム11を収縮させるための指令信号を生成するとともにカウントTを0に初期化し、この指令信号をI/Fボード32に引き渡す。I/Fボード32は、この指令信号を駆動信号に変換して体節1Aの伸縮アーム11に送信する。この駆動信号によって、図10(4)に示すように、体節1Aの伸縮アーム11は収縮する(ステップS306)。これにより、体節1B〜1D、制御部3、及びヘッド部2Bが進行方向前方に移動する。
ユーザボード31は、カウントTが250を超えているか否か判断する(ステップS307)。カウントTが250以下である場合、ユーザボード31は、カウントTをインクリメントし(ステップS308)、体節1Aの伸縮アーム11は、収縮動作が完了していない場合、収縮動作を継続する(ステップS306)。
カウントTが250を超えた場合、ユーザボード31は、コンピュータ6から動作終了の指令信号を受信しているか否かを判断する(ステップS309)。ユーザボード31が動作終了の指令信号を受信している場合、省エネモードの動作は終了する。
ユーザボード31が動作終了の指令信号を受信していない場合、ユーザボード31は、体節1Aの各サーボモータ121を回転させるための指令信号を生成し、この指令信号をI/Fボード32に引き渡す。I/Fボード32は、この指令信号を駆動信号に変換して体節1Aの各サーボモータ121に送信する。この駆動信号によって、体節1Aにおいて、各サーボモータ121が伸縮アーム11に近づくように回転軸123周りに回転し、各ハンド部122が管Pの内壁面から離間する。これにより、体節1Aの各回転アーム12によるロボット10の支持が解除され、初期状態(図示省略)に戻る(ステップS310)。その後、ステップS301〜ステップS309の処理が再度行われる。
このように、省エネモードにおいては、体節1A、1Bの動作によってロボット10を前進させ、体節1C、1Dを動作させないため、ロボット10を移動させるのに必要な電力等のエネルギーを節約することができる。
(掻き出しモード)
以下、ロボット10が、左右に壁面がない平面上を掻き出しモードで移動する場合の動作について、図11、及び図12を参照しつつ説明する。既に説明した各動作モードにおいては、体節1A、1Bと体節1C、1Dとが制御部3を挟んで向かい合っていたが、掻き出しモード及び後述の左右掻き出しモードにおいては、図11に示すように、体節1A〜1Dが全て同じ方向を向いている。また、掻き出しモード及び左右掻き出しモードでロボット10が動作する場合、体節1A〜1Dにおいて、1つの回転アーム12が伸縮アーム11のほぼ真上に位置し、他の2つの回転アーム12が伸縮アーム11の下方においてほぼ同じ高さに位置していることが好ましい。なお、図12では、体節1A〜1Dにおいて、伸縮アーム11のほぼ真上に位置する回転アーム12の図示は省略する。
ユーザボード31は、掻き出しモードで動作させるための指令信号をコンピュータ6から受信すると、体節1C、1Dの各サーボモータ121を回転させるための指令信号を生成するとともに指示角度θを所定の初期値で初期化し、この指令信号をI/Fボード32に引き渡す。I/Fボード32は、この指令信号を駆動信号に変換して体節1C、1Dの各サーボモータ121に送信する。この駆動信号によって、図12(2)に示すように、体節1C、1Dにおいて、各サーボモータ121は、伸縮アーム11から離れるように、回転軸123周りに指示角度θだけ回転する(ステップS401)。
ユーザボード31は、指示角度θが60度を超えているか否かを判断する(ステップS402)。ここでは、体節1C、1Dの各サーボモータ121が60度を超えて回転したときに、体節1C、1Dの各ハンド部122は、平面に衝突し、平面を進行方向前方から後方に掻き出すようにして、体節1C、1Dを進行方向前方に押し出すことができる。すなわち、指示角度θが60度を超えたとき、体節1C、1Dの各サーボモータ121の回転によってロボット10が前進する。ただし、指示角度θは、体節1C、1Dの回転アーム12が平面に衝突し、体節1C、1Dが前進する程度に回転する角度であればよく、そのような角度であれば、60度より小さい値に設定されていてもよいし、60度を超えた値(例えば90度以上)に設定されていてもよい。
指示角度θが60度以下の場合、ユーザボード31は、指示角度θをインクリメントし(ステップS403)、再度ステップS401の処理を行う。ただし、再度のステップS401の処理においては、指示角度θの初期化は行わない。
指示角度θが60度を超え、ロボット10が前進すると、ユーザボード31は、体節1A、1Bの各サーボモータ121を回転させるための指令信号を生成し、この指令信号をI/Fボード32に引き渡す。I/Fボード32は、この指令信号を駆動信号に変換して体節1A、1Bの各サーボモータ121に送信する。この駆動信号によって、図12(3)に示すように、体節1A、1Bにおいて、各サーボモータ121は、伸縮アーム11から離れるように回転軸123周りに回転し、2つのハンド部122が平面に当接する。これにより、ロボット10は、初期位置よりも前進した位置において、体節1A、1Bの回転アーム12によって平面上で支持される(ステップS404)。
次に、ユーザボード31は、体節1C、1Dの各サーボモータ121を初期位置に戻すための指令信号を生成し、この指令信号をI/Fボード32に引き渡す。I/Fボード32は、この指令信号を駆動信号に変換して体節1C、1Dの各サーボモータ121に送信する。ユーザボード31は、体節1C、1Dの各サーボモータ121を初期位置から指示角度θだけ回転した位置に移動させ(ステップS405)、指示角度θが0度であるか否か判断する(ステップS406)。指示角度θが0度でない場合、ユーザボード31は指示角度θをデクリメントし(ステップS407)、体節1C、1Dの各サーボモータ121を初期位置からデクリメント後の指示角度θだけ回転した位置に移動させる(ステップS405)。すなわち、指示角度θが徐々に小さくなることによって、体節1C、1Dの各サーボモータ121は、各伸縮アーム11に近づくように回転し、図12(4)に示すように、最終的には初期位置に到達する。
指示角度θが0度になると、ユーザボード31は、コンピュータ6から動作終了の指令信号を受信しているか否かを判断する(ステップS408)。ユーザボード31が動作終了の指令信号を受信している場合、掻き出しモードの動作は終了する。
ユーザボード31が動作終了の指令信号を受信していない場合、ユーザボード31は、体節1A、1Bの各サーボモータ121を回転させるための指令信号を生成し、この指令信号をI/Fボード32に引き渡す。I/Fボード32は、この指令信号を駆動信号に変換して体節1A、1Bの各サーボモータ121に送信する。この駆動信号によって、体節1A、1Bにおいて、各サーボモータ121は伸縮アーム11に近づくように回転軸123周りに回転し、平面に当接していた各ハンド部122が平面から離間し、初期状態(図示省略)に戻る(ステップS409)。その後、ステップS401〜ステップS408の処理が再度行われる。
このように、掻き出しモードにおいては、体節1C、1Dの回転アーム12が平面に衝突し、平面を掻き出すように動作するため、体節1C、1Dが前進する。そして、体節1C、1Dが前進した状態で体節1A、1Bの回転アーム12によって平面上でロボット10を支持するため、体節1C、1Dが前進した状態を維持することができ、平面上であってもロボット10を容易に前進させることができる。
(左右掻き出しモード)
以下、ロボット10が、平面上を左右掻き出しモードで移動する場合の動作について、図13及び図14を参照しつつ説明する。左右掻き出しモードでは、説明の便宜上、体節1A〜1Dにおいて、伸縮アーム11の下方に位置する2つの回転アーム12のうち、進行方向右側のものを回転アーム12Rとし、進行方向左側のものを回転アーム12Lとする。同様に、各体節の回転アーム12R及び112Lがそれぞれ有する各構成についても、符号の末尾に“R”、“L”を付して区別することとする。なお、図14では、体節1A〜1Dにおいて、伸縮アーム11のほぼ真上に位置する回転アーム12の図示は省略する。
ユーザボード31は、左右掻き出しモードで動作させるための指令信号をコンピュータ6から受信すると、体節1A、1Cの各サーボモータ121R、及び体節1B、1Dの各サーボモータ121Lを回転させるための指令信号を生成するとともに指示角度θを所定の初期値で初期化し、この指令信号をI/Fボード32に引き渡す。I/Fボード32は、この指令信号を駆動信号に変換して体節1A、1Cの各サーボモータ121R、及び体節1B、1Dの各サーボモータ121Lに送信する。この駆動信号によって、体節1A、1Cにおいて、各サーボモータ121Rが、伸縮アーム11から離れるように、回転軸123R周りに指示角度θだけ回転する。また、体節1B、1Dにおいて、各サーボモータ121Lが、伸縮アーム11から離れるように、回転軸123L周りに指示角度θだけ回転する(ステップS501)。
ユーザボード31は、指示角度θが60度を超えているか否かを判断する(ステップS502)。指示角度θが60度以下の場合、ユーザボード31は、指示角度θをインクリメントし(ステップS503)、再度ステップS501の処理を行う。ただし、再度のステップS501の処理においては、指示角度θの初期化は行わない。
指示角度θが60度を超え、体節1A、1Cの各回転アーム12Rが平面を進行方向前方から後方に掻き出すように動作したとき、体節1A、1Cは、図14(2)に示すように、進行方向に対して右側の部分が前方に押し出される。一方、指示角度θが60度を超え、体節1B、1Dの各回転アーム12Lが平面を進行方向前方から後方に掻き出すように動作したとき、体節1B、1Dは、進行方向に対して左側の部分が前方に押し出される。
指示角度θが60度を超えた場合、ユーザボード31は、体節1A、1Cの各サーボモータ121R、及び体節1B、1Dの各サーボモータ121Lを初期位置に戻すための指令信号を生成し、この指令信号をI/Fボード32に引き渡す。I/Fボード32は、この指令信号を駆動信号に変換して体節1A、1Cの各サーボモータ121R、及び体節1B、1Dの各サーボモータ121Lに送信する。ユーザボード31は、体節1A、1Cの各サーボモータ121R、及び体節1B、1Dの各サーボモータ121Lを初期位置から指示角度θだけ回転した位置に移動させ(ステップS504)、指示角度θが0度であるか否か判断する(ステップS505)。指示角度θが0度でない場合、ユーザボード31は指示角度θをデクリメントし(ステップS506)、体節1A、1Cの各サーボモータ121R、及び体節1B、1Dの各サーボモータ121Lを初期位置からデクリメント後の指示角度θだけ回転した位置に移動させる(ステップS504)。
指示角度θが0度になると、ユーザボード31は、体節1A、1Cの各サーボモータ121L、及び体節1B、1Dの各サーボモータ121Rを回転させるための指令信号を生成するとともに指示角度θを所定の初期値で初期化し、この指令信号をI/Fボード32に引き渡す。I/Fボード32は、この指令信号を駆動信号に変換して体節1A、1Cの各サーボモータ121L、及び体節1B、1Dの各サーボモータ121Rに送信する。この駆動信号によって、体節1A、1Cにおいて、各サーボモータ121Lが、伸縮アーム11から離れるように、回転軸123L周りに指示角度θだけ回転する。また、体節1B、1Dにおいて、各サーボモータ121Rが、伸縮アーム11から離れるように、回転軸123R周りに指示角度θだけ回転する(ステップS507)。
ユーザボード31は、指示角度θが60度を超えているか否かを判断する(ステップS508)。指示角度θが60度以下の場合、ユーザボード31は、指示角度θをインクリメントし(ステップS509)、再度ステップS507の処理を行う。ただし、再度のステップS507の処理においては、指示角度θの初期化は行わない。
指示角度θが60度を超え、体節1A、1Cの各回転アーム12Lが平面を進行方向前方から後方に掻き出すように動作したとき、体節1A、1Cは、図14(3)に示すように、進行方向に対して左側の部分が前方に押し出される。一方、指示角度θが60度を超え、体節1B、1Dの各回転アーム12Rが平面を進行方向前方から後方に掻き出すように動作したとき、体節1B、1Dは、進行方向に対して右側の部分が前方に押し出される。
指示角度θが60度を超えた場合、ユーザボード31は、体節1A、1Cの各サーボモータ121L、及び体節1B、1Dの各サーボモータ121Rを初期位置に戻すための指令信号を生成し、この指令信号をI/Fボード32に引き渡す。I/Fボード32は、この指令信号を駆動信号に変換して体節1A、1Cの各サーボモータ121L、及び体節1B、1Dの各サーボモータ121Rに送信する。ユーザボード31は、体節1A、1Cの各サーボモータ121L、及び体節1B、1Dの各サーボモータ121Rを初期位置から指示角度θだけ回転した位置に移動させ(ステップS510)、指示角度θが0度であるか否か判断する(ステップS511)。指示角度θが0度でない場合、ユーザボード31は指示角度θをデクリメントし(ステップS512)、体節1A、1Cの各サーボモータ121L、及び体節1B、1Dの各サーボモータ121Rを初期位置からデクリメント後の指示角度θだけ回転した位置に移動させる(ステップS510)。
指示角度θが0度になると、ユーザボード31は、コンピュータ6から動作終了の指令信号を受信しているか否かを判断する(ステップS513)。ユーザボード31が動作終了の指令信号を受信している場合、掻き出しモードの動作は終了する。ユーザボード31が動作終了の指令信号を受信していない場合、ステップS501〜S512の処理が再度行われる。
このように、左右掻き出しモードにおいては、各体節1が、進行方向に対して右半身と左半身とが交互に前に出るよう動作する。この結果、ロボット10は平面上であっても容易に前進することができる。
以上のように、本実施形態のロボット10において、各体節1の回転アーム12は、ロボット10の体軸方向と約90度で交差する方向に延びる回転軸123周りに回転し、ロボットの移動面に対して角度をもって当接する。このため、管Pだけでなく平面のような移動面であっても、回転アーム12と移動面との間に十分な摩擦力を発生させることができ、体節1が移動面に対して移動するのを防止することができる。また、各体節1の回転アーム12は、移動面を掻き出すように動作し、自身をロボット10の進行方向前方に押し出すこともできる。これらの結果、ロボット10は、移動面の形状にかかわらず、移動することができる。さらに、ロボット10においては、各体節1の伸縮アーム11及び回転アーム12がそれぞれ独立して動作するため、伸縮アーム11の伸長量と回転アーム12の回転量とが互いに制限され合うことがない。
以上、本発明の実施形態について説明したが、本発明は上記実施形態に限定されるものではなく、その趣旨を逸脱しない限りにおいて、種々の変更が可能である。
例えば、上記実施形態において、ロボット10は、4つの体節1A〜1Dを備えていたが、少なくとも2つの体節を備えていればよい。
また、上記実施形態においては、体節1A、1Bと体節1C、1Dとは、制御部3を挟んで向かい合い、あるいは全て同じ方向を向くように配置されていたが、体節の向きは必要に応じて適宜変更すればよい。
また、上記実施形態において、体節1の3つの回転アーム12は伸縮アーム11の周囲に等間隔に配置されていたが、回転アーム12間の間隔は適宜変更することができる。
また、上記実施形態において、体節1は、3つの回転アーム12を備えていたが、少なくとも1つの回転アーム12を備えていればよい。
また、上記実施形態において、回転アーム12の回転軸123は、ロボット10の体軸方向と約90度で交差する方向に延びていたが、体軸方向と回転軸が延びる方向との交差角度は特に限定されない。
また、上記実施形態では、各回転アーム12は、伸縮アーム11に近接する位置から管Pに当接又は平面に衝突する位置まで回転していたが、その向きが逆になるまで回転するよう構成することができる。すなわち、図15に示すように、伸縮アーム11の上方に位置し且つ伸縮アーム11が伸長する方向と同じ方向に延びている回転アーム12Maを、回転軸123周りに約180度回転させることによって逆向きにすることができる。また、伸縮アーム11の下方に位置する回転アーム12Maについては、平面Fによって回転が妨げられないように、ロボット10Ma又は体節1Maを体軸周りに回転させて伸縮アーム11の上方に移動させた後、同様に約180度回転させればよい。
また、上記実施形態において、各回転アームは折りたたみ式であってもよい。すなわち、図16に示すように、回転アーム12Mbに少なくとも1つの関節部126を設け、この関節部126で回転アーム12Mbを折り曲げたり伸ばしたりすることができるよう構成してもよい。このような回転アーム12Mbを備えた体節は、径が大きい管P1内をロボット10Mbが移動する場合であっても、回転アーム12Mbを伸ばしてハンド部122を管P1の内壁面に当接させることができる。径が小さい管P2内をロボット10Mbが移動する場合は、回転アーム12Mbを折り曲げたままの状態で回転させ、関節部126を管P2の内壁面に当接させればよい。
また、上記実施形態において、体節1の伸縮アーム11と回転アーム12とはプレート14を介して接続されていたが、プレート14以外の介在物を介して接続されていてもよいし、直接接続されていてもよい。