私の狙いの背景
私は、未知の領域の周りをナビゲートし、障害物を回避し、さまざまなタスクを実行するために音声入力を受信する必要がある移動自律ロボットを構築しています。また、顔やオブジェクトなども認識しなければなりません。Kinectセンサーとホイールオドメトリデータをセンサーとして使用しています。公式ドライバーとSDKがすぐに利用できるので、私はC#を主要言語として選択しました。ビジョンとNLPモジュールを完了し、ナビゲーション部分に取り組んでいます。
私のロボットは現在、Arduinoを通信用のモジュールとして使用し、ラップトップ上のIntel i7 x64ビットプロセッサをCPUとして使用しています。
これはロボットとその電子機器の概要です:
問題
エンコーダーからロボットの位置を取得するシンプルなSLAMアルゴリズムを実装し、Kinectを使用して(3D点群の2Dスライスとして)見えるものをマップに追加します。
これは私の部屋の地図が現在どのように見えるかです:
これは私の実際の部屋の大まかな表現です:
ご覧のとおり、それらは非常に異なり、非常に悪いマップです。
- これは推測航法だけを使用することから予想されますか?
- 私はそれを洗練して実装する準備ができている粒子フィルターを知っていますが、この結果を改善する方法は何ですか?
更新
私の現在のアプローチについて言及するのを忘れていました(以前は忘れていました)。私のプログラムは大まかにこれを行います:(私は動的テーブルを格納するためにハッシュテーブルを使用しています)
- Kinectから点群を取得
- シリアルオドメトリデータの受信を待つ
- タイムスタンプベースの方法を使用して同期する
- ウィキペディアの方程式とエンコーダーデータを使用してロボットのポーズ(x、y、theta)を推定する
- 点群の「スライス」を取得する
- 私のスライスは基本的にXおよびZパラメータの配列です
- 次に、ロボットのポーズとXおよびZパラメータに基づいてこれらのポイントをプロットします
- 繰り返す