(57)【要約】【課題】メモリ空間が圧迫される場合の対応を改善する。【解決手段】自律移動装置１００は、撮像部４１で撮影された画像を用いて地図の作成及び位置の推定を行う自律移動装置１００であって、自機を移動させる駆動部４２と、記憶部２０と、制御部１０と、を備える。記憶部２０には、撮像部４１で撮影された画像に関するデータが保存されるとともに、記憶部２０に保存された画像に関するデータを複数用いて制御部１０により推定された画像中の特徴点の位置に関するデータが保存される。制御部１０は、駆動部４２を制御して自機を移動させ、所定のタイミングで、記憶部２０に保存されている削除可能なデータを削除する。【選択図】図１
2019159354.tif 000002
【特許請求の範囲】
【請求項１】
撮像部で撮影された画像を用いて地図の作成及び位置の推定を行う自律移動装置であって、
自機を移動させる駆動部と、
記憶部と、
制御部と、
を備え、
前記記憶部には、前記撮像部で撮影された画像に関するデータが保存されるとともに、該記憶部に保存された画像に関するデータを複数用いて前記制御部により推定された前記画像中の特徴点の位置に関するデータが保存され、
前記制御部は、
前記駆動部を制御して自機を移動させ、
所定のタイミングで、前記記憶部に保存されている削除可能な前記データを削除する、
自律移動装置。
【請求項２】
前記制御部は、
前記撮像部で撮影された画像に関するデータを前記記憶部に保存し、
前記特徴点の位置に関するデータとして、前記特徴点の３次元位置に関するデータを前記記憶部に保存し、
前記記憶部に保存した画像に関するデータ及び特徴点の３次元位置に関するデータを用いて自機の位置の推定を行い、
前記記憶部に保存した画像に関するデータ又は特徴点の３次元位置に関するデータのうち削除可能なデータを選出し、
前記選出したデータを前記記憶部から削除する、
請求項１に記載の自律移動装置。
【請求項３】
前記選出したデータを削除する処理は、当該自律移動装置が動いていないときに行う、
請求項２に記載の自律移動装置。
【請求項４】
前記制御部は複数のスレッドの処理を並列して処理し、前記選出したデータを削除する処理を実行するスレッドは、他のスレッドで前記記憶部を使用していないときに前記削除する処理を実行する、
請求項２又は３に記載の自律移動装置。
【請求項５】
前記制御部は、
前記記憶部に保存した特徴点の３次元位置に関するデータの中から、前記３次元位置の誤差が基準誤差よりも大きな前記特徴点の３次元位置に関するデータを削除可能なデータとして選出する、
請求項２から４のいずれか１項に記載の自律移動装置。
【請求項６】
前記制御部は、
前記記憶部に保存した画像に関するデータの中から、前記画像を撮影した時の自機の姿勢が近い画像に関するデータを抽出し、
前記抽出した画像に関するデータの中の１つ以外を削除可能なデータとして選出する、
請求項２から５のいずれか１項に記載の自律移動装置。
【請求項７】
前記制御部は、
前記記憶部に保存した画像に関するデータの中から、前記画像を撮影した時の自機の、位置の差が基準類似判定距離未満かつ向きの差が基準類似判定角度未満の画像に関するデータを、自機の姿勢が近い画像に関するデータとして抽出する、
請求項６に記載の自律移動装置。
【請求項８】
前記制御部は、
前記記憶部に保存した画像に関するデータの中から、前記画像を撮影した時の自機の位置の差が基準類似判定距離未満であり、かつ、３次元位置が同一の特徴点が基準類似判定点数以上存在する画像に関するデータを、自機の姿勢が近い画像に関するデータとして抽出する、
請求項６に記載の自律移動装置。
【請求項９】
前記駆動部は移動した距離を計測する距離計測部を備え、
前記制御部は、
前記選出したデータを前記記憶部から削除している間は、前記記憶部に保存した画像に関するデータ及び特徴点の３次元位置に関するデータを用いた自機の位置の推定は行わず、前記距離計測部を用いて自機の位置を計測する、
請求項２から８のいずれか１項に記載の自律移動装置。
【請求項１０】
前記自律移動装置は移動を伴わない動作モードを含む複数の動作モードを持ち、
前記制御部は、
前記選出したデータを前記記憶部から削除する前に、前記動作モードを前記移動を伴わない動作モードに変更する、
請求項２から９のいずれか１項に記載の自律移動装置。
【請求項１１】
前記移動を伴わない動作モードは、充電器に接続して充電を行う充電モードである、
請求項１０に記載の自律移動装置。
【請求項１２】
前記自律移動装置は一定の時間後に停止する動作モードを含む複数の動作モードを持ち、
前記制御部は、
前記選出したデータを前記記憶部から削除する前に、前記動作モードを前記一定の時間後に停止する動作モードに変更する、
請求項２から１１のいずれか１項に記載の自律移動装置。
【請求項１３】
前記一定の時間後に停止する動作モードは、充電器に帰還する充電器帰還モードである、
請求項１２に記載の自律移動装置。
【請求項１４】
前記制御部は、
前記選出したデータを前記記憶部から削除している間は、前記駆動部を停止させて、移動しないようにする、
請求項２から１３のいずれか１項に記載の自律移動装置。
【請求項１５】
前記制御部は、
前記選出したデータを前記記憶部から削除した後に、前記記憶部の断片化を解消する、
請求項２から１４のいずれか１項に記載の自律移動装置。
【請求項１６】
撮像部で撮影された画像を用いて地図の作成及び位置の推定を行う自律移動装置の記憶部に記憶されているデータを整理するメモリ整理方法であって、
前記撮像部で撮影された画像に関するデータを前記記憶部に保存し、
前記保存した画像に関するデータを複数用いて前記画像中の特徴点の３次元位置を推定し、
前記推定した特徴点の３次元位置に関するデータを前記記憶部に保存し、
前記保存した画像に関するデータ又は特徴点の３次元位置に関するデータのうち削除可能なデータを選出し、
前記選出したデータを前記記憶部から削除する、
メモリ整理方法。
【請求項１７】
撮像部で撮影された画像を用いて地図の作成及び位置の推定を行う自律移動装置のコンピュータに、
前記撮像部で撮影された画像に関するデータを記憶部に保存し、
前記保存した画像に関するデータを複数用いて前記画像中の特徴点の３次元位置を推定し、
前記推定した特徴点の３次元位置に関するデータを前記記憶部に保存し、
前記保存した画像に関するデータ又は特徴点の３次元位置に関するデータのうち削除可能なデータを選出し、
前記選出したデータを前記記憶部から削除する、
処理を実行させるためのプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、自律移動装置、メモリ整理方法及びプログラムに関する。
【背景技術】
【０００２】
用途に応じて自律的に移動する自律移動装置が普及してきている。例えば、屋内の掃除のために自律的に移動する自律移動装置が知られている。一般的に、このような自律移動装置は、実空間の地図の作成と、実空間内での自己位置の推定を行う必要がある。
【０００３】
実空間の地図を作成するための手法としては、例えばＳＬＡＭ（Ｓｉｍｕｌｔａｎｅｏｕｓ  Ｌｏｃａｌｉｚａｔｉｏｎ  Ａｎｄ  Ｍａｐｐｉｎｇ）手法が知られている。ＳＬＡＭ手法では、カメラの撮影する動画像中の複数のフレームから、同一の特徴点を追跡することによって、自己位置（自機の３次元位置）と特徴点の３次元位置とを交互に推定する処理を行う。例えば特許文献１には、ＳＬＡＭ手法を用いて周囲の地図を作成しながら移動することができる移動式ロボットが開示されている。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開２０１６−５２５１５号公報
【発明の概要】
【発明が解決しようとする課題】
【０００５】
ＳＬＡＭ手法では、カメラで撮影した画像（フレーム）のうち３次元位置の推定に用いるフレーム（キーフレーム）や、３次元位置を推定した特徴点（Ｍａｐ点）をメモリに記憶しておくことによって、移動後の自己位置や新たな特徴点の３次元位置を推定可能にしている。そのため、ＳＬＡＭ手法を用いると、時間の経過と共にメモリに記憶しているキーフレームやＭａｐ点のデータが増えていき、自律移動装置のメモリ空間を圧迫してしまう。したがって、従来の自律移動装置では、メモリ空間が圧迫される場合の対応に改善の余地がある。なお、ＳＬＡＭ手法に限らず、自律移動装置がカメラで撮影した画像を用いて自己位置推定する技術には同様の課題がある。
【０００６】
本発明は、上記問題を解決するためになされたものであり、メモリ空間が圧迫される場合の対応を改善することを目的とする。
【課題を解決するための手段】
【０００７】
上記目的を達成するため、本発明の自律移動装置は、
撮像部で撮影された画像を用いて地図の作成及び位置の推定を行う自律移動装置であって、
自機を移動させる駆動部と、
記憶部と、
制御部と、
を備え、
前記記憶部には、前記撮像部で撮影された画像に関するデータが保存されるとともに、該記憶部に保存された画像に関するデータを複数用いて前記制御部により推定された前記画像中の特徴点の位置に関するデータが保存され、
前記制御部は、
前記駆動部を制御して自機を移動させ、
所定のタイミングで、前記記憶部に保存されている削除可能な前記データを削除する。
【発明の効果】
【０００８】
本発明によれば、メモリ空間が圧迫される場合の対応を改善することができる。
【図面の簡単な説明】
【０００９】
【図１】本発明の実施形態１に係る自律移動装置の機能構成を示す図である。
【図２】実施形態１に係る環境地図の一例を示す図である。
【図３】実施形態１に係るＳＬＡＭ処理のフローチャートである。
【図４】実施形態１に係る自機位置推定スレッドのフローチャートである。
【図５】実施形態１に係る地図作成スレッドのフローチャートである。
【図６】実施形態１に係るループクロージングスレッドのフローチャートである。
【図７】実施形態１に係るメモリ整理処理のフローチャートである。
【図８】実施形態１に係るメモリ監視スレッドのフローチャートである。
【図９】実施形態１に係る上位アプリケーションプログラムのフローチャートである。
【図１０】本発明の実施形態２に係るメモリ監視スレッドのフローチャートである。
【図１１】実施形態２に係る上位アプリケーションプログラムのフローチャートである。
【図１２】実施形態２に係る上位アプリケーションプログラムの充電器帰還モードのフローチャートである。
【図１３】本発明の実施形態３に係る上位アプリケーションプログラムのフローチャートである。
【発明を実施するための形態】
【００１０】
以下、本発明の実施形態に係る自律移動装置について、図表を参照して説明する。なお、図中同一又は相当部分には同一符号を付す。
【００１１】
（実施形態１）
本発明の実施形態１に係る自律移動装置１００は、周囲の地図を作成しながら、用途に応じて自律的に移動する装置である。この用途とは、例えば、警備監視用、屋内掃除用、ペット用、玩具用等である。
【００１２】
図１に示すように、本発明の実施形態１に係る自律移動装置１００は、制御部１０、記憶部２０、センサ部３０、撮像部４１、駆動部４２、通信部４３、を備える。
【００１３】
制御部１０は、ＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）等で構成され、記憶部２０に記憶されたプログラムを実行することにより、後述する各部（ＳＬＡＭ処理部１１、環境地図作成部１２、削除可能データ選出部１３、メモリ整理部１４、メモリ監視部１５、移動制御部１６）の機能を実現する。また、制御部１０は、タイマー（図示せず）を備え、経過時間をカウントすることができる。
【００１４】
記憶部２０は、ＲＯＭ（Ｒｅａｄ  Ｏｎｌｙ  Ｍｅｍｏｒｙ）、ＲＡＭ（Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）等で構成され、機能的に、フレームＤＢ（ＤａｔａＢａｓｅ）２１、Ｍａｐ点ＤＢ２２及び環境地図記憶部２３を含む。ＲＯＭには制御部１０のＣＰＵが実行するプログラム及びプログラムを実行する上で予め必要なデータが記憶されている。ＲＡＭには、プログラム実行中に作成されたり変更されたりするデータが記憶される。
【００１５】
フレームＤＢ２１には、撮像部４１により撮影された画像（フレーム）が記憶される。ただし、記憶容量を節約するために、撮影された全ての画像を記憶しなくてもよい。自律移動装置１００は、フレームＤＢ２１に記憶された複数の画像を用いて、ＳＬＡＭ処理により、ＳＬＡＭ処理用のデータ（後述するＭａｐ点のデータ）の生成及び自機位置の推定を行う。自機位置の推定に用いる画像はキーフレームと呼ばれ、フレームＤＢ２１には、キーフレームの画像の情報と共に、そのキーフレームを撮影した時の自機位置（自機の位置及び向き）の情報等も記憶される。
【００１６】
Ｍａｐ点ＤＢ２２には、フレームＤＢ２１に記憶されたキーフレームに含まれている特徴点のうち、３次元位置（Ｘ，Ｙ，Ｚ）が求められた特徴点（Ｍａｐ点と言う）の情報が記憶される。特徴点とは画像中の、エッジ部分やコーナー部分等、画像内の特徴的な部分の点のことを言う。特徴点は、ＳＩＦＴ（Ｓｃａｌｅ−Ｉｎｖａｒｉａｎｔ  Ｆｅａｔｕｒｅ  Ｔｒａｎｓｆｏｒｍ）やＳＵＲＦ（Ｓｐｅｅｄｅｄ  Ｕｐ  Ｒｏｂｕｓｔ  Ｆｅａｔｕｒｅｓ）等のアルゴリズムを用いて取得することができる。Ｍａｐ点ＤＢ２２には、特徴点の情報として、その３次元位置と、その特徴点の特徴量（例えばＳＩＦＴ等で得た特徴量）と、が紐付けられて記憶される。
【００１７】
ＳＬＡＭ処理では、フレームＤＢ２１に記憶されている複数のキーフレーム間で、同一の特徴点の対応を取得し、取得した対応特徴点の３次元位置をＭａｐ点ＤＢ２２から取得することによって、自機位置の推定を行う。
【００１８】
環境地図記憶部２３には、センサ部３０からの情報に基づいて環境地図作成部１２が作成した環境地図が記憶される。環境地図は、図２に示すように、床面を例えば５ｃｍ×５ｃｍのグリッドに分割し、グリッド単位でそのグリッドに対応する環境（床面、障害物等）の状態を記録したものである。環境の状態としては、例えば、障害物がなく自由に通過できる自由空間３０３、通過できない障害物３０２、状態が不明な不明空間３０４等がある。また、環境地図には、充電器３０１の位置も記録されている。
【００１９】
センサ部３０は、障害物センサ３１を備える。障害物センサ３１は、周囲に存在する物体（障害物）を検出し、該物体（障害物）までの距離を測定することができる距離センサであって、例えば、赤外線距離センサ、超音波センサである。なお、独立した障害物センサ３１を搭載せずに、撮像部４１を用いて障害物を検出するようにしても良い。この場合、撮像部４１が障害物センサ３１を兼ねることになる。また、障害物センサ３１として、距離センサではなく、他の物体に衝突したことを検知するバンパーセンサを備えても良い。この場合、自律移動装置１００は、バンパーセンサにより衝突を検知した位置に障害物が存在することを検出できる。
【００２０】
撮像部４１は、単眼の撮像装置（カメラ）を備える。撮像部４１は、例えば、３０ｆｐｓ（ｆｒａｍｅｓ  ｐｅｒ  ｓｅｃｏｎｄ）で画像（フレーム）を取得する。自律移動装置１００は、撮像部４１が逐次取得した画像に基づいて、ＳＬＡＭ処理により、自機位置と周囲環境とをリアルタイムに認識しながら、自律移動を行う。
【００２１】
駆動部４２は、独立２輪駆動の車輪とモータとを備え、制御部１０からの指示（制御）により自律移動装置１００を移動させる。自律移動装置１００は、２つの車輪の同一方向駆動により前後の平行移動（並進移動）を、２つの車輪の逆方向駆動によりその場での回転（向き変更）を、２つの車輪のそれぞれ速度を変えた駆動により旋回移動（並進＋回転（向き変更）移動）を、行うことができる。また、各々の車輪にはロータリエンコーダが備えられており、ロータリエンコーダで車輪の回転数を計測し、車輪の直径、車輪間の距離等の幾何学的関係を利用することによって並進移動量及び回転量を計算できる。
【００２２】
例えば、車輪の直径をＤ、回転数をＣとすると、その車輪の接地部分での並進移動量はπ・Ｄ・Ｃとなる。ここで、回転数Ｃは、駆動部に備えられたロータリエンコーダにより測定可能である。また、車輪の直径をＤ、車輪間の距離をＩ、右車輪の回転数をＣＲ、左車輪の回転数をＣＬとすると、向き変更の回転量は（右回転を正とすると）３６０°×Ｄ×（ＣＬ−ＣＲ）／（２×Ｉ）となる。この並進移動量及び回転量をそれぞれ逐次足し合わせていくことで、駆動部４２は、メカオドメトリとして機能し、自機位置（移動開始時の位置及び向きを基準とした位置及び向き）を計測することができる。駆動部４２に備えられたロータリエンコーダは、距離計測部として機能する。
【００２３】
なお、車輪の代わりにクローラを備えるようにしても良いし、複数（例えば二本）の足を備えて足で歩行することによって移動を行うようにしても良い。これらの場合も、二つのクローラの動き、足の動き等に基づいて、車輪の場合と同様に自機の位置及び向きの計測が可能である。
【００２４】
通信部４３は、外部装置と通信するためのモジュールであり、外部装置と無線通信する場合にはアンテナを含む無線モジュールである。例えば、通信部４３は、Ｂｌｕｅｔｏｏｔｈ（登録商標）に基づく近距離無線通信を行うための無線モジュールである。通信部４３を用いることにより、自律移動装置１００は、外部とデータの受け渡し等を行うことができる。また、自律移動装置１００は、外部のサーバ（図示せず）と通信部４３で通信することによって、制御部１０の機能の一部を外部のサーバで実行させるようにしてもよい。
【００２５】
次に、自律移動装置１００の制御部１０の機能的構成について説明する。制御部１０は、ＳＬＡＭ処理部１１、環境地図作成部１２、削除可能データ選出部１３、メモリ整理部１４、メモリ監視部１５、移動制御部１６、の機能を実現し、自律移動装置１００の移動制御等を行う。また、制御部１０は、マルチスレッド機能に対応しており、複数のスレッド（異なる処理の流れ）を並行して実行することができる。
【００２６】
ＳＬＡＭ処理部１１は、撮像部４１が撮影しフレームＤＢ２１に記憶された画像を複数用いて、それらの画像から得られる特徴点の情報に基づき、ＳＬＡＭ処理により自機の姿勢（位置及び向き）を推定する。このＳＬＡＭ処理を行う際には、画像に含まれる特徴点を抽出し、３次元位置を計算できた特徴点（Ｍａｐ点）について、Ｍａｐ点ＤＢ２２に該Ｍａｐ点の情報を記憶させる。なお、自律移動装置１００の姿勢（位置及び向き）の推定には、駆動部４２から取得できるメカオドメトリの情報を用いることもできる。したがって、ＳＬＡＭ処理を行える状況では主にＳＬＡＭ処理で推定された自機の位置及び向きの情報（これをビジュアルオドメトリとも言う）を用い、ＳＬＡＭ処理を行えない状況ではメカオドメトリの情報を用いる。
【００２７】
環境地図作成部１２は、ＳＬＡＭ処理部１１が推定した自機の位置及び向きの情報と、センサ部３０からの情報と、を用いて障害物３０２の位置を記録した環境地図を作成し、作成した環境地図の情報を環境地図記憶部２３に書き込む。
【００２８】
削除可能データ選出部１３は、フレームＤＢ２１及びＭａｐ点ＤＢ２２に記録されているデータのうち、削除可能なものを選出する。例えば、フレームＤＢ２１に記録されているキーフレームの中に撮影した時の自機の姿勢（位置及び向き）が近いキーフレームが複数ある場合、そのようなキーフレームは１つを残してそれ以外を削除してもＳＬＡＭ処理に支障は生じない。また、Ｍａｐ点ＤＢ２２に記録されているＭａｐ点の中で３次元位置の誤差が大きいものは、削除しないとＳＬＡＭ処理に悪影響を及ぼす。削除可能データ選出部１３は、このような、削除してもＳＬＡＭ処理に支障が生じないデータ及び、削除しないとＳＬＡＭ処理に悪影響を及ぼすデータを選出する。
【００２９】
メモリ整理部１４は、削除可能データ選出部１３が選出したデータをフレームＤＢ２１やＭａｐ点ＤＢ２２から削除する。メモリ整理部１４は、これらのデータを削除する際には、これらのデータがＳＬＡＭ処理で使用されないようにしてから削除する。このようにすることによって、メモリ整理部１４は、これらのデータを削除してもＳＬＡＭ処理に支障を来さないようにしている。
【００３０】
メモリ監視部１５は、フレームＤＢ２１及びＭａｐ点ＤＢ２２のメモリ使用量が基準容量を超えた場合や、メモリ整理部１４によって削除可能なデータを削除してから基準時間を超える時間が経過した場合に、メモリ整理部１４にメモリ整理要求（削除可能なデータの削除要求）を出す。
【００３１】
移動制御部１６は、後述する上位アプリケーションプログラムから目的地の指示を受けて、経路及び移動速度を設定し、設定した経路に沿って、自機を移動させるように駆動部４２を制御する。移動制御部１６が経路を設定する際には、環境地図作成部１２が作成した環境地図に基づき、自機の現在位置から目的地までの経路を設定する。
【００３２】
以上、自律移動装置１００の機能構成について説明した。次に、自律移動装置１００のＳＬＡＭ処理について、図３を参照して説明する。自律移動装置１００は、電源オフ時は充電器３０１（充電ステーション）に接続して充電されており、電源が投入されると、充電器３０１に接続された位置で、ＳＬＡＭ処理が開始される。なお、自律移動装置１００は電源が投入されると、このＳＬＡＭ処理以外に、用途に応じた上位アプリケーションプログラムが別途（別スレッドで）起動し、ＳＬＡＭ処理は、この上位アプリケーションプログラムから目的地の指示を受ける。上位アプリケーションプログラムについては後述する。
【００３３】
まず、自律移動装置１００の制御部１０は、記憶部２０に記憶されている各種データ（フレームＤＢ２１、Ｍａｐ点ＤＢ２２、環境地図記憶部２３）を初期化する（ステップＳ１０１）。環境地図の初期化については、自律移動装置１００は起動すると充電器３０１の位置から移動を開始するので、この時点では、環境地図は「自機が充電器の位置に存在する」ということを示す情報で初期化される。
【００３４】
次に、制御部１０は、ＳＬＡＭ処理のための各種スレッドを起動する（ステップＳ１０２）。具体的には、自機位置推定スレッド、地図作成スレッド、ループクロージングスレッドを起動する。これらのスレッドが並行して動作することにより、ＳＬＡＭ処理部１１は、撮像部４１が撮影した画像から特徴点を抽出して、自機位置の推定を行う。ＳＬＡＭ処理のための各スレッドの詳細の説明は後述する。
【００３５】
次に、制御部１０は、メモリ監視スレッドを起動する（ステップＳ１０３）。メモリ監視スレッドの詳細の説明は後述する。
【００３６】
次に、制御部１０は、動作終了（上位アプリケーションプログラムから動作終了指示を受けた）か否かを判定する（ステップＳ１０４）。動作終了（動作終了指示を受けた）なら（ステップＳ１０４；Ｙｅｓ）、ＳＬＡＭ処理を終了する。動作終了でない（動作終了指示を受けていない）なら（ステップＳ１０４；Ｎｏ）、環境地図作成部１２は、センサ部３０を用いて、環境地図の作成と更新を行う（ステップＳ１０５）。
【００３７】
次に、移動制御部１６は、上位アプリケーションプログラムから目的地の指示を受け、自機を移動させる（ステップＳ１０６）。次に、メモリ整理部１４は、メモリ整理を行う（ステップＳ１０７）。メモリ整理の詳細については、後述する。そして、ＳＬＡＭ処理は、ステップＳ１０４に戻る。
【００３８】
以上がＳＬＡＭ処理の流れである。次に、ＳＬＡＭ処理のステップＳ１０２で起動されるＳＬＡＭ処理のための各種スレッド（自機位置推定スレッド、地図作成スレッド、ループクロージングスレッド）について、順に説明する。
【００３９】
まず、自機位置推定スレッドについて図４を参照して説明する。このスレッドでは、ＳＬＡＭ処理部１１が、最初に自機位置推定の初期化処理を行い、その後自機位置推定（撮像部４１で取得した画像を用いてビジュアルオドメトリにより自機の姿勢（位置及び向き）を推定する）を行い続ける。
【００４０】
まず、ＳＬＡＭ処理部１１は、動作終了か否かを判定する（ステップＳ２０１）。動作終了なら（ステップＳ２０１；Ｙｅｓ）終了し、動作終了でないなら（ステップＳ２０１；Ｎｏ）、ＳＬＡＭ処理の停止が指示されているか否かを判定する（ステップＳ２０２）。ＳＬＡＭ処理の停止が指示されているなら（ステップＳ２０２；Ｙｅｓ）、ステップＳ２０１に戻る。ＳＬＡＭ処理の停止が指示されていないなら（ステップＳ２０２；Ｎｏ）、自機位置推定処理が初期化済であるか否かを判定する（ステップＳ２０３）。
【００４１】
初期化済でないなら（ステップＳ２０３；Ｎｏ）、次に述べる初期化処理を行う。初期化処理ではＳＬＡＭ処理部１１は、まず、撮像部４１で画像を取得し、取得した画像内から特徴点を取得する（ステップＳ２０４）。次に、ＳＬＡＭ処理部１１は、再度、撮像部４１で画像を取得し、取得した画像内から特徴点を取得する（ステップＳ２０５）。そして、ＳＬＡＭ処理部１１は、２つの画像（ステップＳ２０４で取得した画像とステップＳ２０５で取得した画像）の間で特徴点の対応（実環境上の同一の点がそれぞれの画像中に存在し、その対応が取れるもの）を取得する（ステップＳ２０６）。そして、特徴点の対応数が５未満か否かを判定する（ステップＳ２０７）。
【００４２】
特徴点対応数が５未満であれば（ステップＳ２０７；Ｙｅｓ）、後述する相対姿勢の推定ができないため、初期画像を取得し直すために、ステップＳ２０４に戻る。特徴点の対応数が５点未満でなければ（ステップＳ２０７；Ｎｏ）、Ｔｗｏ−ｖｉｅｗ  Ｓｔｒｕｃｔｕｒｅ  ｆｒｏｍ  Ｍｏｔｉｏｎ法を用いることによって、相対姿勢を推定する（ステップＳ２０８）。ここで推定されるのは、実際には、２つの画像間の姿勢（それぞれの画像を取得した位置の差分（並進ベクトルｔ）及び向きの差分（回転行列Ｒ））であるが、これは、最初の画像を取得した時の自機の位置及び向きを基準にした場合の、２枚目の画像を取得した時の自機の位置（並進ベクトルｔ）及び向き（回転行列Ｒ））であり、最初の画像を取得した時の自機の姿勢を基準にした場合の相対姿勢と考えることができる。ただし、ここで得られる並進ベクトルｔの各要素の値は実環境上での値とは異なるため、これらをＳＬＡＭ空間上での値とみなし、以下ではＳＬＡＭ空間上での座標（ＳＬＡＭ座標）を用いて説明する。
【００４３】
次に、ＳＬＡＭ処理部１１は、この２つの画像間で対応が取れている特徴点（対応特徴点）のＳＬＡＭ座標での３次元位置を求める（ステップＳ２０９）。この３次元位置の求め方は次の通りである。まず、ある１つの対応特徴点に着目する。ある特徴点の画像中の座標（フレーム座標：既知）を（ｕ，ｖ）とし、ＳＬＡＭ座標での３次元位置（未知）を（Ｘ，Ｙ，Ｚ）とすると、以下の関係式（１）で表すことができる。
（ｕ  ｖ  １）’〜Ｐ（Ｘ  Ｙ  Ｚ  １）’…（１）
ここで、「〜」記号は「非零の定数倍を除いて等しい」（つまり、等しいか又は定数（非零）倍になっている）ことを表し、「’」記号は「転置」を表す。
【００４４】
また、Ｐは３×４の透視投影行列で、撮像部４１のカメラの内部パラメータを示す３×３の行列Ａ（焦点距離と撮像素子サイズで決まる定数）と、その画像の姿勢を示す回転行列Ｒ及び並進ベクトルｔとから、以下の式（２）で表される。
Ｐ＝Ａ（Ｒ｜ｔ）…（２）
ここで、（Ｒ｜ｔ）は、回転行列Ｒの右に並進列ベクトルｔを並べた行列を表す。
【００４５】
すると、着目した対応特徴点の１つ目の画像中の座標（ｕ１，ｖ１）とＳＬＡＭ座標での３次元位置（Ｘ，Ｙ，Ｚ）との関係式を式（１）に基づいて立てると式（３）となる。
（ｕ１  ｖ１  １）’〜Ａ（Ｉ｜０）（Ｘ  Ｙ  Ｚ  １）’…（３）
ここで、Ｉは単位行列、０はゼロベクトル、（Ｉ｜０）は、単位行列Ｉの右に列ベクトルで表したゼロベクトルを並べた行列を表す。
【００４６】
また、該対応特徴点の２つ目の画像中の座標（ｕ２，ｖ２）とＳＬＡＭ座標での３次元位置（Ｘ，Ｙ，Ｚ）との関係式を式（１）に基づいて立てると式（４）となる。
（ｕ２  ｖ２  １）’〜Ａ（Ｒ｜ｔ）（Ｘ  Ｙ  Ｚ  １）’…（４）
【００４７】
上記の式（３）及び式（４）において、対応特徴点のＳＬＡＭ座標での３次元位置（Ｘ，Ｙ，Ｚ）は同一であるから、ｕ１，ｖ１，ｕ２，ｖ２それぞれについて、４つの式ができ、未知数はＸ，Ｙ，Ｚの３つなので、これらは、過剰条件の連立一次方程式となる。過剰条件の連立一次方程式は、一般には解が存在しないが、ＳＬＡＭ処理部１１は、最小二乗法を用いることにより、該対応特徴点の最も確からしいＳＬＡＭ座標での３次元位置（Ｘ，Ｙ，Ｚ）を求めることができる。
【００４８】
ＳＬＡＭ処理部１１は、対応特徴点のＳＬＡＭ座標での３次元位置（Ｘ，Ｙ，Ｚ）が求まったら、それをＭａｐ点として、Ｍａｐ点ＤＢ２２に登録する（ステップＳ２１０）。Ｍａｐ点ＤＢ２２に登録する要素には、少なくとも、「特徴点のＳＬＡＭ座標での３次元位置であるＸ，Ｙ，Ｚ」と、「その特徴点の特徴量」（例えばＳＩＦＴ等で得た特徴量）と、「マーキングフラグ」（後述する地図作成スレッドの処理において、削除可能なＭａｐ点をマーキングする際に用いる。例えば初期値は０で、マーキングされると１になる。）が含まれる。また、「タイムスタンプ」（後述するキーフレーム番号ＮＫＦの、Ｍａｐ点ＤＢ２２への登録時点での値等）をＭａｐ点ＤＢ２２への登録要素に含めてもよい。
【００４９】
対応特徴点は５点以上存在するため、ＳＬＡＭ処理部１１は、各対応特徴点について、ステップＳ２０９及びステップＳ２１０を繰り返す。
【００５０】
次にＳＬＡＭ処理部１１は、キーフレーム（ＳＬＡＭ処理用の各種スレッドでの処理対象となるフレーム）の番号を表す変数ＮＫＦを０に初期化し（ステップＳ２１１）、初期化済フラグをセットする（ステップＳ２１２）。そして、ＳＬＡＭ処理部１１は、ＳＬＡＭ座標と実環境座標とのスケール対応を得るために、メカオドメトリによる並進距離（実環境での座標で求められる）を、上記の処理で推定したＳＬＡＭ座標での並進距離ｄで除することによって、スケールＳを求める（ステップＳ２１３）。
【００５１】
次にＳＬＡＭ処理部１１は、２つ目の画像をキーフレームとしてフレームＤＢ２１に登録する（ステップＳ２１４）。フレームＤＢ２１に登録する要素は、「キーフレーム番号」（登録時点でのＮＫＦの値）、「姿勢」（その画像撮影時の自機のＳＬＡＭ座標での位置（並進ベクトルｔ）及び向き（回転行列Ｒ））、「メカオドメトリで計測した実環境上での姿勢」（実環境での駆動部４２による移動距離に基づいて求められる自機の位置及び向き）、「抽出した全ての特徴点」、「特徴点の中で３次元位置が既知となったＭａｐ点の３次元位置」、「キーフレーム自体の特徴」、「マーキングフラグ」である。
【００５２】
上記中、「メカオドメトリで計測した実環境上での姿勢」は、並進ベクトルｔと回転行列Ｒとで表すこともできるが、通常、本自律移動装置１００は２次元平面上を動くので、２次元データに単純化して、移動開始時の位置（原点）及び向きを基準にした２次元座標（Ｘ，Ｙ）及び向きφとして表しても良い。また、「キーフレーム自体の特徴」とは、キーフレーム間の画像類似度を求める処理を効率化するためのデータであり、例えば画像中の特徴点のヒストグラム等を用いることができるが、画像自体を「キーフレーム自体の特徴」としても良い。また、「マーキングフラグ」は、後述する地図作成スレッドの処理において、削除可能なキーフレームをマーキングする際に用いるもので、例えば初期値は０で、マーキングされると１になる。
【００５３】
次に、ＳＬＡＭ処理部１１は、キーフレームが生成された事を地図作成スレッドに知らせるために、地図作成スレッドのキーフレームキューに、キーフレームカウンタＮＫＦをセットする（ステップＳ２１５）。なお、キュー（Ｑｕｅｕｅ）は、先入れ先出しのデータ構造になっている。
【００５４】
そして、自機位置推定スレッドの処理は、ステップＳ２０１に戻り、ステップＳ２０２を経由して、ステップＳ２０３で初期化済であることが判定され（ステップＳ２０３；Ｙｅｓ）、ＳＬＡＭ処理部１１は、初期化済の場合の処理へ進む。
【００５５】
次に、初期化済の場合の処理を説明する。この処理が、自機位置推定スレッドの通常時の処理であり、逐次現在の自機の位置及び向き（ＳＬＡＭ座標内での並進ベクトルｔと回転行列Ｒ）を推定する処理である。
【００５６】
ＳＬＡＭ処理部１１は、撮像部４１で画像を撮影し、撮影した画像に含まれている特徴点を取得する（ステップＳ２２１）。次に、フレームＤＢ２１に登録されている以前のキーフレーム（例えばキーフレーム番号がＮＫＦである画像）の情報から、その画像の情報に含まれている特徴点のうち、３次元位置が既知である（Ｍａｐ点ＤＢ２２に登録されているＭａｐ点になっている）特徴点を取得し、今撮影した画像との間で対応が取れる特徴点（対応特徴点）を抽出する（ステップＳ２２２）。
【００５７】
そして、ＳＬＡＭ処理部１１は、対応特徴点の個数（特徴点対応数）が基準対応特徴点数（例えば１０）未満か否かを判定し（ステップＳ２２３）、基準対応特徴点数未満なら（ステップＳ２２３；Ｙｅｓ）、位置の推定は行わずにステップＳ２２１に戻る。ここで、すぐにステップＳ２２１に戻るのではなく、ステップＳ２２２に戻って、フレームＤＢ２１に登録されているキーフレームの中から対応特徴点の個数が基準対応特徴点数以上になるものを検索するようにしても良い。この場合は、フレームＤＢ２１に登録されているキーフレームの中に対応特徴点の個数が基準対応特徴点数以上のものが見つからなかった場合にステップＳ２２１に戻る。
【００５８】
ＳＬＡＭ処理部１１は、対応特徴点数が基準対応特徴点数以上なら（ステップＳ２２３；Ｎｏ）、対応特徴点それぞれの３次元位置（Ｘ，Ｙ，Ｚ）をＭａｐ点ＤＢ２２から取得する（ステップＳ２２４）。すると、ステップＳ２２１で取得した画像に含まれているｉ番目（ｉは１から対応特徴点数までの値を取る）の対応特徴点の該画像中の座標（ｕｉ，ｖｉ）は、以下の式（５）で表される（ｕｘｉ，ｖｘｉ）と理想的には一致するはずである。
（ｕｘｉ，ｖｘｉ，１）’〜Ａ（Ｒ｜ｔ）（Ｘｉ  Ｙｉ  Ｚｉ  １）’…（５）
ここで、（Ｘｉ，Ｙｉ，Ｚｉ）は、該対応特徴点の３次元位置であり、Ｒ及びｔはステップＳ２２１で画像を取得した時の自律移動装置１００の姿勢（回転行列Ｒ及び並進ベクトルｔ）である。
【００５９】
実際には（Ｘｉ，Ｙｉ，Ｚｉ）にも（ｕｉ，ｖｉ）にも誤差が含まれているため、（ｕｘｉ，ｖｘｉ）と（ｕｉ，ｖｉ）とが一致することはほとんどない。そして、未知数は姿勢を表す回転行列Ｒ及び並進ベクトルｔ（３次元空間ではＲもｔも３次元となり、未知数の個数は３＋３＝６である）であるが、数式は対応特徴点の個数の２倍存在する（対応特徴点１つに対して、フレーム座標のｕ，ｖそれぞれに対する式が存在するため）ことになるため、過剰条件の連立一次方程式になる。したがって、ＳＬＡＭ処理部１１は、最小二乗法を用いることにより、最も確からしい自律移動装置１００の姿勢（ＳＬＡＭ座標での並進ベクトルｔ及び回転行列Ｒ）を求めることができる（ステップＳ２２５）。
【００６０】
ＳＬＡＭ座標での現在の自機の姿勢（並進ベクトルｔ及び回転行列Ｒ）が求められたので、ＳＬＡＭ処理部１１は、これにスケールＳを乗算することで、ＶＯ（ビジュアルオドメトリ）を求める（ステップＳ２２６）。ＶＯは実環境での自機の位置及び向きとして利用できる。
【００６１】
次に、ＳＬＡＭ処理部１１は、自律移動装置１００の現在位置が、フレームＤＢ２１に登録されている直前のキーフレーム（キーフレーム番号がＮＫＦである画像）を撮影した時の位置から基準距離（例えば１ｍ）以上移動しているか否かを判定する（ステップＳ２２７）。基準距離以上移動しているなら（ステップＳ２２７；Ｙｅｓ）、ＮＫＦに１を加算する（ステップＳ２２８）。そして、ＳＬＡＭ処理部１１は、現フレームをキーフレームとしてフレームＤＢ２１に登録し（ステップＳ２２９）、ステップＳ２１５に進む。
【００６２】
自律移動装置１００が基準距離未満しか移動していないなら（ステップＳ２２７；Ｎｏ）、ステップＳ２０１に戻る。なお、基準距離と比較する自律移動装置１００の移動距離は、直前のキーフレームから現フレームまでの並進距離（両フレームの並進ベクトルの差の絶対値）をメカオドメトリから取得しても良いし、上述したＶＯ（ビジュアルオドメトリ）から求めても良い。また、キーフレーム番号を示す変数ＮＫＦ、スケールを示す変数Ｓ、フレームＤＢ２１及びＭａｐ点ＤＢ２２はスレッドをまたいで値を参照することができるように記憶部２０に記憶されている。
【００６３】
次に、地図作成スレッドについて、図５を参照して説明する。このスレッドでは、ＳＬＡＭ処理部１１が、自機位置推定スレッドによってフレームＤＢ２１に登録されたキーフレームの中の対応特徴点の３次元位置を計算して、Ｍａｐ点ＤＢ２２に登録する処理を行い続ける。
【００６４】
まず、ＳＬＡＭ処理部１１は、動作終了か否かを判定する（ステップＳ３０１）。動作終了なら（ステップＳ３０１；Ｙｅｓ）終了する。動作終了でないなら（ステップＳ３０１；Ｎｏ）、キーフレームキューが空か否かを判定する（ステップＳ３０２）。キーフレームキューが空なら（ステップＳ３０２；Ｙｅｓ）、ステップＳ３０１に戻る。キーフレームキューが空でなければ（ステップＳ３０２；Ｎｏ）、キーフレームキューからデータを取り出してＭＫＦ（地図作成スレッドで処理するキーフレームのキーフレーム番号を示す変数）にセットする（ステップＳ３０３）。次にＳＬＡＭ処理部１１は、ＭＫＦが０より大きいか否かを判定する（ステップＳ３０４）。ＭＫＦが０であるなら（ステップＳ３０４；Ｎｏ）、ステップＳ３０１に戻ってキーフレームキューにデータが入るのを待つ。そして、ＭＫＦが０より大きいなら（ステップＳ３０４；Ｙｅｓ）、以下の処理を行う。
【００６５】
ＳＬＡＭ処理部１１は、フレームＤＢ２１を参照し、前キーフレーム（キーフレーム番号がＭＫＦ−１のキーフレーム）の特徴点と現キーフレーム（キーフレーム番号がＭＫＦのキーフレーム）の特徴点とで対応が取れる特徴点（対応特徴点）を抽出する（ステップＳ３０５）。フレームＤＢ２１にはそれぞれのキーフレームの姿勢（並進ベクトルｔと回転行列Ｒ）も登録されているので、自機位置推定スレッドの初期化時の処理の時と同様の方法で対応特徴点の３次元位置を計算できる。ＳＬＡＭ処理部１１は、３次元位置が計算できた対応特徴点をＭａｐ点としてＭａｐ点ＤＢ２２に登録する（ステップＳ３０６）。そして、ＳＬＡＭ処理部１１は、フレームＤＢ２１に登録されているキーフレームのデータに対しても今回３次元位置を計算できた特徴点について３次元位置を登録する（ステップＳ３０７）。
【００６６】
なお、ＳＬＡＭ処理部１１が抽出した対応特徴点がすでにＭａｐ点ＤＢ２２に登録済だった場合は、３次元位置の計算をスキップして次の対応特徴点（Ｍａｐ点ＤＢに未登録のもの）に対する処理に進んでもよいし、改めて３次元位置の計算を行って、Ｍａｐ点ＤＢ２２に登録済の３次元位置や、フレームＤＢ２１中の対応特徴点に対する３次元位置を更新するようにしてもよい。
【００６７】
次に、ＳＬＡＭ処理部１１は、キーフレームキューが空かどうかを判定する（ステップＳ３０８）。キーフレームキューが空でなければ（ステップＳ３０８；Ｎｏ）、ＳＬＡＭ処理部１１は、ループクロージングスレッドのキーフレームキューにＭＫＦをセットして（ステップＳ３１２）、ステップＳ３０１に戻る。
【００６８】
キーフレームキューが空なら（ステップＳ３０８；Ｙｅｓ）、ＳＬＡＭ処理部１１は、全キーフレームの姿勢と全Ｍａｐ点の３次元位置に対して、バンドルアジャストメント処理を行って、精度向上を図る（ステップＳ３０９）。
【００６９】
バンドルアジャストメント処理とは、カメラ姿勢（キーフレーム姿勢）とＭａｐ点の３次元位置とを同時に推定する非線形最適化法であり、Ｍａｐ点をキーフレーム上に投影させたときに発生する誤差が最小になるような最適化を行うものである。このバンドルアジャストメントの処理を行うことで、キーフレーム姿勢とＭａｐ点の３次元位置の精度向上を図ることができる。
【００７０】
次に、削除可能データ選出部１３は、複数のキーフレームの姿勢と、そのキーフレーム上のＭａｐ点と、そのＭａｐ点の３次元位置と、に基づいてＭａｐ点の３次元位置の誤差を求め、誤差が基準誤差よりも大きなＭａｐ点をマーキングする（ステップＳ３１０）。姿勢と特徴点とを推定しないように固定させると、上述のバンドルアジャストメント処理等により該Ｍａｐ点の３次元位置のみを推定できるので、推定した３次元位置と、Ｍａｐ点ＤＢ２２に登録されている３次元位置とに基づいて、誤差を計算できる。なお、ステップＳ３１０は必ずしもステップＳ３０９と別個に行う必要はなく、ステップＳ３０９で行われるバンドルアジャストメント処理の中で、誤差の大きいＭａｐ点に対してマーキングするようにしてもよい。
【００７１】
次に削除可能データ選出部１３は、フレームＤＢ２１内で、姿勢が近いキーフレームが複数存在する場合、そのようなキーフレームのうちの１つを残してそれ以外のキーフレームをマーキングし（Ｓ３１１）、ステップＳ３１２に進む。
【００７２】
ここで、姿勢が近いキーフレームの判定について説明する。例えば、判定対象となる２つのキーフレームについて、それらのキーフレームを撮影した時の自律移動装置１００の位置の差（並進ベクトルｔ間の距離）が基準類似判定距離（例えば１ｍ）未満であり、かつ、その時の向きの差（回転行列Ｒから求まる角度の差）が基準類似判定角度（例えば５度）未満である場合に、それらのキーフレームは姿勢が近いと判定する。
【００７３】
また、２つのキーフレームの姿勢が近い場合、それらのキーフレームには、同じＭａｐ点が多数存在することになる。したがって、姿勢が近いキーフレームの判定は、それらのキーフレームを撮影した時の自律移動装置１００の位置及び向きの差の代わりに（又は、位置若しくは向きの差に加えて）、それらのキーフレームに存在する共通のＭａｐ点の個数を用いて判定してもよい。例えば、「同じＭａｐ点が基準類似判定点数（例えば１００個）存在し、位置の差（並進ベクトルの差）が基準類似判定距離（例えば１ｍ）未満」なら「姿勢が近い」と判定してもよい。
【００７４】
次にループクロージングスレッドについて、図６を参照して説明する。このスレッドでは、ＳＬＡＭ処理部１１が、ループクロージング処理が可能か否かをチェックし続け、可能な場合にはループクロージング処理を行う。なお、ループクロージング処理とは、以前来たことのある同じ場所に戻ってきたことを認識した場合に、以前この同じ場所にいた時の姿勢の値と現在の姿勢の値とのずれを用いて、以前来た時から今までの軌跡中のキーフレームや、関連するＭａｐ点の３次元位置を修正することを言う。
【００７５】
まず、ＳＬＡＭ処理部１１は、動作終了か否かを判定する（ステップＳ４０１）。動作終了なら（ステップＳ４０１；Ｙｅｓ）、終了する。動作終了でないなら（ステップＳ４０１；Ｎｏ）、キーフレームキューが空か否かを判定する（ステップＳ４０２）。キーフレームキューが空なら（ステップＳ４０２；Ｙｅｓ）、ステップＳ４０１に戻る。キーフレームキューが空でないなら（ステップＳ４０２；Ｎｏ）、キーフレームキューからデータを取り出してＬＫＦ（ループクロージングスレッドで処理するキーフレームのキーフレーム番号を示す変数）にセットする（ステップＳ４０３）。次にＳＬＡＭ処理部１１は、ＬＫＦが１より大きいかを判定する（ステップＳ４０４）。ＬＫＦが０又は１であるなら（ステップＳ４０４；Ｎｏ）、ステップＳ４０１に戻ってキーフレームキューにデータが入るのを待つ。そして、ＬＫＦが１より大きいなら（ステップＳ４０４；Ｙｅｓ）、以下の処理を行う。
【００７６】
ＳＬＡＭ処理部１１は、フレームＤＢ２１を参照し、現キーフレーム（キーフレーム番号がＬＫＦのキーフレーム）と「キーフレーム自体の特徴」の類似度が基準画像類似度以上になるキーフレームをフレームＤＢ２１から検索する（ステップＳ４０５）。ここで、この類似度は、画像（キーフレーム）の特徴を特徴ベクトルで表している場合は、比較対象の２つの画像の特徴ベクトルのノルムを１に正規化したもの同士の内積を、その２つの画像の類似度とすることができる。また、２つの画像の特徴ベクトルの距離（各要素の差の二乗和の平方根）の逆数を類似度としてもよい。
【００７７】
そして、ＳＬＡＭ処理部１１は、「キーフレーム自体の特徴」の類似度が基準画像類似度以上になるキーフレームが発見されたか否かを判定する（ステップＳ４０６）。発見されなければ（ステップＳ４０６；Ｎｏ）、ステップＳ４０１に戻り、発見されたら（ステップＳ４０６；Ｙｅｓ）、発見されたキーフレームから現キーフレームまでの軌跡中のキーフレームの姿勢と、軌跡中のキーフレームに含まれるＭａｐ点の３次元位置を修正し（ステップＳ４０７）、ステップＳ４０１に戻る。ステップＳ４０７では、例えば、ＳＬＡＭ処理部１１は、現キーフレームの姿勢を、発見されたキーフレームの姿勢と同じ姿勢に修正する。そして、発見されたキーフレームの姿勢と現キーフレームの姿勢との差分を用いて、発見されたキーフレームから現キーフレームまでの軌跡中の各キーフレームの姿勢に線形的に補正を加える。さらにこれらの各キーフレームに含まれるＭａｐ点の３次元位置についても各キーフレームの姿勢の補正量に応じて修正する。
【００７８】
次に、ＳＬＡＭ処理（図３）のステップＳ１０７で実行されるメモリ整理処理について図７を参照して説明する。この処理は、上述の地図作成スレッドでマーキングされたキーフレーム及びＭａｐ点を、ＳＬＡＭ処理に支障を与えずに削除する処理である。
【００７９】
まず、メモリ整理部１４は、上位アプリケーションプログラムからメモリ整理指示があったか否かを判定する（ステップＳ５０１）。メモリ整理指示が無ければ（ステップＳ５０１；Ｎｏ）、処理を終了する。メモリ整理指示があったら（ステップＳ５０１；Ｙｅｓ）、ＳＬＡＭ処理部１１にＳＬＡＭ処理の停止を指示する（ステップＳ５０２）。
【００８０】
次に、メモリ整理部１４は、ＳＬＡＭ処理が停止しているか否かを判定する（ステップＳ５０３）。上述したように、ＳＬＡＭ処理の各種スレッド（自機位置推定スレッド、地図作成スレッド、ループクロージングスレッド）は、自機位置推定スレッドがキーフレーム番号をキーフレームキューにセットすることによって並行動作している。そして、自機位置推定スレッドがＳＬＡＭ処理の停止の指示を受けてステップＳ２０２からステップＳ２０１に戻るようになると、新たなキーフレームが登録されることはなくなる。すると、地図作成スレッドはキーフレームキューが空の状態でステップＳ３０２からステップＳ３０１に戻るようになり、ループクロージングスレッドもキーフレームキューが空の状態でステップＳ４０２からステップＳ４０１に戻るようになる。この状態が、ＳＬＡＭ処理が停止している状態である。メモリ整理部１４は、ＳＬＡＭ処理部１１によるＳＬＡＭ処理がこのような停止状態になっているか否かを判定する。
【００８１】
ＳＬＡＭ処理が停止していないなら（ステップＳ５０３；Ｎｏ）、ステップＳ５０３に戻って停止状態になるまで待つ。ＳＬＡＭ処理が停止しているなら（ステップＳ５０３；Ｙｅｓ）、メモリ整理部１４は、フレームＤＢ２１から、マーキングされたキーフレームを削除する（ステップＳ５０４）。そして、メモリ整理部１４は、Ｍａｐ点ＤＢ２２から、マーキングされたＭａｐ点を削除する（ステップＳ５０５）。これらのデータが削除されたことによって、メモリの断片化が生じる可能性があるため、この断片化に対する対策として、メモリ整理部１４は、メモリのガーベジコレクションを行う（ステップＳ５０６）。そして、メモリ整理部１４は、メモリ整理が完了したことを上位アプリケーションプログラムに通知して（ステップＳ５０７）、処理を終了する。
【００８２】
メモリのガーベジコレクションは、例えば、以下のように行う。まず、全てのキーフレームをフレームＤＢ２１から記憶部２０内の空き領域に待避させた後に、フレームＤＢ２１をクリアする。その後、待避させたキーフレームのデータに基づいて、フレームＤＢ２１を再度構築する。Ｍａｐ点についても同様に、まず、全てのＭａｐ点をＭａｐ点ＤＢ２２から記憶部２０内の空き領域に待避させた後に、Ｍａｐ点ＤＢ２２をクリアする。その後、待避させたＭａｐ点のデータに基づいて、Ｍａｐ点ＤＢ２２を再度構築する。このようにすることにより、メモリの断片化を解消でき、メモリを有効利用できるようになる。
【００８３】
次に、ＳＬＡＭ処理（図３）のステップＳ１０３で起動されるメモリ監視スレッドについて図８を参照して説明する。このスレッドでは、ＳＬＡＭ処理のメモリ使用量を監視し、必要に応じてメモリ整理を指示する。なお、ＳＬＡＭ処理のメモリ使用量とは、フレームＤＢ２１及びＭａｐ点ＤＢ２２に登録されているデータ（マーキングされているものも含む）の量である。
【００８４】
まず、メモリ監視部１５は、動作終了か否かを判定する（ステップＳ６０１）。動作終了なら（ステップＳ６０１；Ｙｅｓ）、終了する。動作終了でないなら（ステップＳ６０１；Ｎｏ）、ＳＬＡＭ処理のメモリ使用量が基準容量より大きいか否かを判定する（ステップＳ６０２）。ＳＬＡＭ処理のメモリ使用量が基準容量より大きければ（ステップＳ６０２；Ｙｅｓ）、上位アプリケーションプログラムにメモリ整理を要求する（ステップＳ６０３）。
【００８５】
ＳＬＡＭ処理のメモリ使用量が基準容量より大きくないなら（ステップＳ６０２；Ｎｏ）、メモリ監視部１５は、前回メモリ整理を行ってから基準時間を超える時間が経過したか否かを判定する（ステップＳ６０４）。前回メモリ整理を行ってから基準時間を超える時間が経過したなら（ステップＳ６０４；Ｙｅｓ）、ステップＳ６０３に進む。前回メモリ整理を行ってから基準時間を超える時間が経過していないなら（ステップＳ６０４；Ｎｏ）、ステップＳ６０１に戻る。メモリ監視部１５がこの判定を行えるようにするために、制御部１０は、メモリ整理処理（図７）でメモリ整理完了を通知（ステップＳ５０７）する際に、その時点の時刻を記録するようにしてもよい。そうすれば、メモリ監視部１５は、記録された時刻と現在時刻との差分を求めることによって、前回メモリ整理を行ってから基準時間を超える時間が経過したか否かを判定することができる。
【００８６】
次に、上位アプリケーションプログラムについて説明する。上位アプリケーションプログラムとは、自律移動装置１００の用途に応じて決まるソフトウェアであり、例えば屋内掃除用アプリケーションプログラムである。上位アプリケーションプログラムは、用途に応じて様々なものが考えられるが、一般には状況に応じて動作モードを変更して、動作モードに基づいて自律移動装置１００を制御する。動作モードとは、自律移動装置１００の行動様式を定めるものであり、自律移動装置１００は、ランダムに移動する「お散歩モード」、充電器に帰還する「充電器帰還モード」、充電器に接続して充電を行う「充電モード」、環境地図の作成範囲を広げていく「地図作成モード」、移動を停止してユーザと会話を行う「会話モード」等の動作モードを持つ。
【００８７】
そして、自律移動装置１００は、状況に応じて動作モードを変更する。例えば、初期値は地図作成モードで、地図がある程度作成されたら（例えば地図作成モードで１０分経過したら）お散歩モードになり、電池残量が少なくなったら充電器帰還モードになるというように、予め動作モードを変更する条件が設定されていてもよいし、外部（ユーザ、外部サーバ等）からの指示により、設定されてもよい。
【００８８】
上位アプリケーションプログラムは、自律移動装置１００の主要な動作を制御するプログラムであり、様々な処理を含むが、ここでは、上位アプリケーションプログラムの処理のうち、メモリ整理が関連する部分に絞って、図９を参照して説明する。上位アプリケーションプログラムは、ＳＬＡＭ処理（図３）と同様に、自律移動装置１００の電源が投入されると開始される。
【００８９】
まず、制御部１０は、自律移動装置１００の動作を終了させるか否かを判定する（ステップＳ７０１）。例えば、自律移動装置１００は、ユーザから動作終了の指示を受けたり、外部のサーバ等から動作終了の指示を受けたりすると、動作を終了させる。動作を終了させるなら（ステップＳ７０１；Ｙｅｓ）、ＳＬＡＭ処理等の他のスレッドの処理に対して、終了を指示し（ステップＳ７０２）、処理を終了する。
【００９０】
動作を終了させないなら（ステップＳ７０１；Ｎｏ）、制御部１０は、メモリ監視スレッドからメモリ整理の要求があるか否かを判定する（ステップＳ７０３）。メモリ整理の要求があるなら（ステップＳ７０３；Ｙｅｓ）、動作モードを「充電器帰還モード」に設定し（ステップＳ７０４）、ステップＳ７０５に進む。メモリ整理の要求がなければ（ステップＳ７０３；Ｎｏ）、そのままステップＳ７０５に進む。
【００９１】
ステップＳ７０５では、制御部１０は、動作モードが「お散歩モード」であるか否かを判定する。「お散歩モード」であるなら（ステップＳ７０５；Ｙｅｓ）、目的地をランダムに設定し（ステップＳ７０６）、ステップＳ７０１に戻る。「お散歩モード」でないなら（ステップＳ７０５；Ｎｏ）、動作モードが「充電器帰還モード」であるか否かを判定する（ステップＳ７０７）。
【００９２】
動作モードが「充電器帰還モード」でないなら（ステップＳ７０７；Ｎｏ）、制御部１０は、動作モードに応じて目的地を設定し（ステップＳ７０８）、ステップＳ７０１に戻る。動作モードに応じた目的地設定には様々なものがあるため、具体例をいくつか説明する。例えば、動作モードが「地図作成モード」なら、環境地図を徐々に広げていくような場所（例えば、環境地図が作成できているところと作成できていないところの境目）を目的地に設定する。動作モードが「会話モード」なら、移動を停止してユーザと会話するので、自律移動装置１００の現在位置を目的地に設定する。
【００９３】
動作モードが「充電器帰還モード」なら（ステップＳ７０７；Ｙｅｓ）、制御部１０は、充電器の位置を目的地に設定する（ステップＳ７０９）。そして、制御部１０は、自律移動装置１００が、充電器に到着したか否かを判定する（ステップＳ７１０）。充電器に到着していなければ（ステップＳ７１０；Ｎｏ）、ステップＳ７０１に戻り、充電器に到着するまでステップＳ７１０の判定を繰り返す。充電器に到着したら（ステップＳ７１０；Ｙｅｓ）、制御部１０は、動作モードを「充電モード」に設定し（ステップＳ７１１）、ＳＬＡＭ処理部１１にメモリ整理を指示し（ステップＳ７１２）、ＳＬＡＭ処理部１１からメモリ整理完了の通知を受けるまで待つ。その後、制御部１０は、メモリ監視スレッドから受けたメモリ整理の要求を消去し（ステップＳ７１３）、ステップＳ７０１に戻る。
【００９４】
以上説明した各種処理により、自律移動装置１００は、ＳＬＡＭ処理のメモリ使用量が基準容量を超えた場合等に、削除可能なデータを削除することができる。したがって、自律移動装置１００のメモリリソースが少ない場合でも、長時間、あるいは広い領域で使用することが可能となる。
【００９５】
（実施形態１の変形例）
実施形態１では、メモリ整理処理（図７）は、充電モード時のみ行われるようになっているが、自律移動装置１００が移動しない動作モードになっているなら、充電モード時以外でメモリ整理処理を行ってもよい。このような実施形態１の変形例においては、上位アプリケーションプログラムは、メモリ監視スレッドからメモリ整理の要求を受けた場合、無条件に動作モードを「充電器帰還モード」に設定することはしない。例えば、その時点で動作モードが「会話モード」に設定されていた場合は、会話モードを維持したままメモリ整理処理を行う。自律移動装置１００は、会話モードでは、移動せずにユーザとの会話を行っているため、わざわざ充電器の位置まで移動しなくても、その場でメモリ整理を行うことが可能だからである。
【００９６】
また、既に十分に充電されていて、充電器に帰還するのが不自然な状況の場合には、動作モードを会話のためにユーザに接近するためのモード（「ユーザ接近モード」）に設定し、ユーザのそばに到着したら「会話モード」に設定して、メモリ整理を行ってもよい。また、その場ですぐにメモリ整理を行える動作モードとして、移動せずにその場で（例えば上体で）踊る「停止踊りモード」や、メモリ整理のために停止する「メモリ整理モード」を用意することも考えられる。
【００９７】
また、上位アプリケーションプログラム（図９）は、充電器の位置に移動する充電器帰還コスト（帰還するまでに要する予想時間及び予想メモリ使用量）や、会話するためにユーザに接近するユーザ接近コスト（接近するまでに要する予想時間及び予想メモリ使用量）を計算した上で、ユーザにできるだけ違和感を持たせない動作モードに移行してからメモリ整理を指示してもよい。
【００９８】
この場合、制御部１０はステップＳ７０４で、動作モードを、充電器帰還コストがユーザ接近コストよりも所定の基準コスト差以上小さければ充電器帰還モードに設定し、ユーザ接近コストが充電器帰還コストよりも所定の基準コスト差以上小さければユーザ接近モードに設定し、どちらのコストも所定の基準コスト閾値より大きければ、停止踊りモード又はメモリ整理モードに設定する。そして、動作モードをユーザ接近モードに設定した場合は、ユーザと接近したら動作モードを会話モードに設定し、その後メモリ整理を指示する。動作モードを停止踊りモード又はメモリ整理モードに設定した場合は、その場ですぐにメモリ整理を指示する。
【００９９】
また、例えば、センサ部３０が路面の穴や崖を検知するクリフセンサを備えている場合は、自律移動装置１００は移動すると危険な状況であるか否かを判断できる。この場合、上位アプリケーションプログラムは、自律移動装置１００が現在移動可能な状況か否かを判断し、移動可能な状況でない場合には、動作モードをメモリ整理モードに設定して、その場ですぐにメモリ整理を指示してもよい。
【０１００】
（実施形態２）
実施形態１では、メモリ整理処理（図７）は、充電モード時のみ行われるようになっているが、この場合、メモリ監視スレッドで上位アプリケーションプログラムにメモリ整理を要求してから、充電器に帰還するまでの間はメモリ整理が行われない。したがって、メモリ監視スレッドでは、少なくとも充電器に帰還するまでの間はメモリ使用量が限界値を超えないように、メモリ使用量に十分余裕がある状態で上位アプリケーションプログラムにメモリ整理を要求する必要がある。そこで、メモリ整理（緊急メモリ整理）を要求するとすぐにメモリ整理を行うことができる実施形態２について説明する。
【０１０１】
実施形態２に係る自律移動装置１０１の構成は、自律移動装置１００と同じであるが、メモリ監視スレッドと上位アプリケーションプログラムの処理内容が一部異なるため、これらの処理について説明する。
【０１０２】
自律移動装置１０１のメモリ監視スレッドの処理内容は図１０に示すように、自律移動装置１００のメモリ監視スレッド（図８）の処理内容に、ステップＳ６０５及びステップＳ６０６の処理を追加したものになっている。
【０１０３】
ステップＳ６０５では、メモリ監視部１５は、ＳＬＡＭ処理のメモリ使用量が第２の基準容量より大きいか否かを判定する。ここで、第２の基準容量とは、ステップＳ６０２での基準容量より大きく、メモリ使用量の限界値により近い値である。メモリ監視部１５は、ＳＬＡＭ処理のメモリ使用量が第２の基準容量より大きければ（ステップＳ６０５；Ｙｅｓ）、上位アプリケーションプログラムに緊急メモリ整理を要求し（ステップＳ６０６）、ステップＳ６０１に戻る。ＳＬＡＭ処理のメモリ使用量が第２の基準容量以下なら（ステップＳ６０５；Ｎｏ）、ステップＳ６０２に進む。
【０１０４】
自律移動装置１０１の上位アプリケーションプログラムの処理内容は図１１及び図１２に示すように、自律移動装置１００の上位アプリケーションプログラム（図９）の処理内容に、ステップＳ７２０、ステップＳ７２１、ステップＳ７２２及びステップＳ７２３の処理を追加したものになっている。
【０１０５】
ステップＳ７２０では、制御部１０は、メモリ監視スレッドから緊急メモリ整理の要求があるか否かを判定する。緊急メモリ整理の要求がなければ（ステップＳ７２０；Ｎｏ）、ステップＳ７０３に進む。緊急メモリ整理の要求があるなら（ステップＳ７２０；Ｙｅｓ）、制御部１０は駆動部４２を停止させることにより移動を停止させ、動作モードをメモリ整理モードに設定する（ステップＳ７２１）。そして、制御部１０は、ＳＬＡＭ処理部１１にメモリ整理を指示し（ステップＳ７２２）、ＳＬＡＭ処理部１１からメモリ整理完了の通知を受けるまで待つ。その後、制御部１０は、メモリ監視スレッドから受けた緊急メモリ整理の要求やメモリ整理の要求を消去し（ステップＳ７２３）、ステップＳ７０１に戻る。
【０１０６】
以上の処理により、自律移動装置１０１は、メモリ使用量が限界値に近づいた場合に、上位アプリケーションプログラムに「緊急メモリ整理」を要求することができる。そして、緊急メモリ整理の要求を受けた上位アプリケーションプログラムは、自律移動装置１０１をその場で停止させてメモリ整理モードに移行する。したがって、自律移動装置１０１は、すぐにメモリ整理を実行することでき、メモリリソースが少ない場合でも、長時間、あるいは広い領域で使用することが可能となる。
【０１０７】
（実施形態３）
上記実施形態１及び実施形態２においては、自律移動装置１００，１０１は、メモリ整理処理を行う場合には、移動を停止させている。そこで、移動を停止せずにメモリ整理処理を行うことができる実施形態３について説明する。
【０１０８】
実施形態３に係る自律移動装置１０２は、上述した動作モードとは別に自機位置推定モードとして、ＳＬＡＭモードとメカオドメトリモードの２つの自機位置推定モードを持つ。ＳＬＡＭモードは、自律移動装置１００と同様にＳＬＡＭ処理によって自機位置を推定するモードであり、メカオドメトリモードは、駆動部４２から得られるメカオドメトリに基づいて自機位置を推定する（ロータリエンコーダ等により自機位置を計測する）モードである。メカオドメトリモードではメカオドメトリによって自機位置を推定するので、ＳＬＡＭ処理による自機位置の推定の処理を停止させることができる。自機位置推定モードの初期値はＳＬＡＭモードになっている。また、自律移動装置１０２の構成は、自律移動装置１００と同じであるが、上位アプリケーションプログラムの処理内容が一部異なるので、この処理について説明する。
【０１０９】
自律移動装置１０２の上位アプリケーションプログラムの処理内容は図１３に示すように、自律移動装置１００の上位アプリケーションプログラム（図９）の処理内容に、ステップＳ７３０、ステップＳ７３１、ステップＳ７３２、ステップＳ７３３及びステップＳ７３４の処理を追加し、ステップＳ７０４、ステップＳ７１２及びステップＳ７１３の処理を削除したものになっている。
【０１１０】
自律移動装置１０２では、制御部１０は、ステップＳ７０３におけるメモリ整理の要求の有無の判定で、メモリ整理の要求がないなら（ステップＳ７０３；Ｎｏ）、ステップＳ７３３に進む。メモリ整理の要求があるなら（ステップＳ７０３；Ｙｅｓ）、制御部１０は、自機位置推定モードをメカオドメトリモードに変更し（ステップＳ７３０）、ＳＬＡＭ処理部１１にメモリ整理を指示する（ステップＳ７３１）。そして、制御部１０は、メモリ監視スレッドから受けたメモリ整理の要求を消去し（ステップＳ７３２）、ステップＳ７３３に進む。
【０１１１】
ステップＳ７３３では、制御部１０は、ＳＬＡＭ処理部１１からメモリ整理完了の通知を受けたか否かを判定する。メモリ整理完了の通知を受けたら（ステップＳ７３３；Ｙｅｓ）、制御部１０は、自機位置推定モードをＳＬＡＭモードに変更し（ステップＳ７３４）、ステップＳ７０５に進む。そして、制御部１０は、ステップＳ７１１の後は、ステップＳ７０１に戻る。
【０１１２】
メカオドメトリモードでは、ＳＬＡＭ処理による自機位置推定を行わなくても自機位置を推定（計測）できるので、以上の処理により、実施形態３に係る自律移動装置１０２は、移動を停止させることなく、メモリ整理を行うことができる。
【０１１３】
なお、自律移動装置１００，１０１，１０２の各機能は、通常のＰＣ（Ｐｅｒｓｏｎａｌ  Ｃｏｍｐｕｔｅｒ）等のコンピュータによっても実施することができる。具体的には、上記実施形態では、自律移動装置１００，１０１，１０２が行う自律移動制御処理のプログラムが、記憶部２０のＲＯＭに予め記憶されているものとして説明した。しかし、プログラムを、フレキシブルディスク、ＣＤ−ＲＯＭ（Ｃｏｍｐａｃｔ  Ｄｉｓｃ  Ｒｅａｄ  Ｏｎｌｙ  Ｍｅｍｏｒｙ）、ＤＶＤ（Ｄｉｇｉｔａｌ  Ｖｅｒｓａｔｉｌｅ  Ｄｉｓｃ）及びＭＯ（Ｍａｇｎｅｔｏ−Ｏｐｔｉｃａｌ  Ｄｉｓｃ）等のコンピュータ読み取り可能な記録媒体に格納して配布し、そのプログラムをコンピュータに読み込んでインストールすることにより、上述の各機能を実現することができるコンピュータを構成してもよい。
【０１１４】
以上、本発明の好ましい実施形態について説明したが、本発明は係る特定の実施形態に限定されるものではなく、本発明には、特許請求の範囲に記載された発明とその均等の範囲が含まれる。以下に、本願出願の当初の特許請求の範囲に記載された発明を付記する。
【０１１５】
（付記１）
撮像部で撮影された画像を用いて地図の作成及び位置の推定を行う自律移動装置であって、
自機を移動させる駆動部と、
記憶部と、
制御部と、
を備え、
前記記憶部には、前記撮像部で撮影された画像に関するデータが保存されるとともに、該記憶部に保存された画像に関するデータを複数用いて前記制御部により推定された前記画像中の特徴点の位置に関するデータが保存され、
前記制御部は、
前記駆動部を制御して自機を移動させ、
所定のタイミングで、前記記憶部に保存されている削除可能な前記データを削除する、
自律移動装置。
【０１１６】
（付記２）
前記制御部は、
前記撮像部で撮影された画像に関するデータを前記記憶部に保存し、
前記特徴点の位置に関するデータとして、前記特徴点の３次元位置に関するデータを前記記憶部に保存し、
前記記憶部に保存した画像に関するデータ及び特徴点の３次元位置に関するデータを用いて自機の位置の推定を行い、
前記記憶部に保存した画像に関するデータ又は特徴点の３次元位置に関するデータのうち削除可能なデータを選出し、
前記選出したデータを前記記憶部から削除する、
付記１に記載の自律移動装置。
【０１１７】
（付記３）
前記選出したデータを削除する処理は、当該自律移動装置が動いていないときに行う、
付記２に記載の自律移動装置。
【０１１８】
（付記４）
前記制御部は複数のスレッドの処理を並列して処理し、前記選出したデータを削除する処理を実行するスレッドは、他のスレッドで前記記憶部を使用していないときに前記削除する処理を実行する、
付記２又は３に記載の自律移動装置。
【０１１９】
（付記５）
前記制御部は、
前記記憶部に保存した特徴点の３次元位置に関するデータの中から、前記３次元位置の誤差が基準誤差よりも大きな前記特徴点の３次元位置に関するデータを削除可能なデータとして選出する、
付記２から４のいずれか１つに記載の自律移動装置。
【０１２０】
（付記６）
前記制御部は、
前記記憶部に保存した画像に関するデータの中から、前記画像を撮影した時の自機の姿勢が近い画像に関するデータを抽出し、
前記抽出した画像に関するデータの中の１つ以外を削除可能なデータとして選出する、
付記２から５のいずれか１つに記載の自律移動装置。
【０１２１】
（付記７）
前記制御部は、
前記記憶部に保存した画像に関するデータの中から、前記画像を撮影した時の自機の、位置の差が基準類似判定距離未満かつ向きの差が基準類似判定角度未満の画像に関するデータを、自機の姿勢が近い画像に関するデータとして抽出する、
付記６に記載の自律移動装置。
【０１２２】
（付記８）
前記制御部は、
前記記憶部に保存した画像に関するデータの中から、前記画像を撮影した時の自機の位置の差が基準類似判定距離未満であり、かつ、３次元位置が同一の特徴点が基準類似判定点数以上存在する画像に関するデータを、自機の姿勢が近い画像に関するデータとして抽出する、
付記６に記載の自律移動装置。
【０１２３】
（付記６）
前記駆動部は移動した距離を計測する距離計測部を備え、
前記制御部は、
前記選出したデータを前記記憶部から削除している間は、前記記憶部に保存した画像に関するデータ及び特徴点の３次元位置に関するデータを用いた自機の位置の推定は行わず、前記距離計測部を用いて自機の位置を計測する、
付記２から８のいずれか１つに記載の自律移動装置。
【０１２４】
（付記１０）
前記自律移動装置は移動を伴わない動作モードを含む複数の動作モードを持ち、
前記制御部は、
前記選出したデータを前記記憶部から削除する前に、前記動作モードを前記移動を伴わない動作モードに変更する、
付記２から９のいずれか１つに記載の自律移動装置。
【０１２５】
（付記１１）
前記移動を伴わない動作モードは、充電器に接続して充電を行う充電モードである、
付記１０に記載の自律移動装置。
【０１２６】
（付記１２）
前記自律移動装置は一定の時間後に停止する動作モードを含む複数の動作モードを持ち、
前記制御部は、
前記選出したデータを前記記憶部から削除する前に、前記動作モードを前記一定の時間後に停止する動作モードに変更する、
付記２から１１のいずれか１つに記載の自律移動装置。
【０１２７】
（付記１３）
前記一定の時間後に停止する動作モードは、充電器に帰還する充電器帰還モードである、
付記１２に記載の自律移動装置。
【０１２８】
（付記１４）
前記制御部は、
前記選出したデータを前記記憶部から削除している間は、前記駆動部を停止させて、移動しないようにする、
付記２から１３のいずれか１つに記載の自律移動装置。
【０１２９】
（付記１５）
前記制御部は、
前記選出したデータを前記記憶部から削除した後に、前記記憶部の断片化を解消する、
付記２から１４のいずれか１つに記載の自律移動装置。
【０１３０】
（付記１６）
撮像部で撮影された画像を用いて地図の作成及び位置の推定を行う自律移動装置の記憶部に記憶されているデータを整理するメモリ整理方法であって、
前記撮像部で撮影された画像に関するデータを前記記憶部に保存し、
前記保存した画像に関するデータを複数用いて前記画像中の特徴点の３次元位置を推定し、
前記推定した特徴点の３次元位置に関するデータを前記記憶部に保存し、
前記保存した画像に関するデータ又は特徴点の３次元位置に関するデータのうち削除可能なデータを選出し、
前記選出したデータを前記記憶部から削除する、
メモリ整理方法。
【０１３１】
（付記１７）
撮像部で撮影された画像を用いて地図の作成及び位置の推定を行う自律移動装置のコンピュータに、
前記撮像部で撮影された画像に関するデータを記憶部に保存し、
前記保存した画像に関するデータを複数用いて前記画像中の特徴点の３次元位置を推定し、
前記推定した特徴点の３次元位置に関するデータを前記記憶部に保存し、
前記保存した画像に関するデータ又は特徴点の３次元位置に関するデータのうち削除可能なデータを選出し、
前記選出したデータを前記記憶部から削除する、
処理を実行させるためのプログラム。
【符号の説明】
【０１３２】
１０…制御部、１１…ＳＬＡＭ処理部、１２…環境地図作成部、１３…削除可能データ選出部、１４…メモリ整理部、１５…メモリ監視部、１６…移動制御部、２０…記憶部、２１…フレームＤＢ、２２…Ｍａｐ点ＤＢ、２３…環境地図記憶部、３０…センサ部、３１…障害物センサ、４１…撮像部、４２…駆動部、４３…通信部、１００，１０１，１０２…自律移動装置、３０１…充電器、３０２…障害物、３０３…自由空間、３０４…不明空間
【図１】
2019159354.tif 000003
【図２】
2019159354.tif 000004
【図３】
2019159354.tif 000005
【図４】
2019159354.tif 000006
【図５】
2019159354.tif 000007
【図６】
2019159354.tif 000008
【図７】
2019159354.tif 000009
【図８】
2019159354.tif 000010
【図９】
2019159354.tif 000011
【図１０】
2019159354.tif 000012
【図１１】
2019159354.tif 000013
【図１２】
2019159354.tif 000014
【図１３】
2019159354.tif 000015