Làm cách nào tôi có thể cải thiện bản đồ trong Robot tự động di động của mình bằng KINECT


9

Một chút nền tảng của mục tiêu của tôi

Tôi đang trong quá trình xây dựng một robot tự động di động phải điều hướng xung quanh một khu vực không xác định, phải tránh chướng ngại vật và nhận đầu vào bằng giọng nói để thực hiện các nhiệm vụ khác nhau. Nó cũng phải nhận dạng khuôn mặt, vật thể, v.v. Tôi đang sử dụng cảm biến Kinect và dữ liệu đo hình bánh xe làm cảm biến. Tôi đã chọn C # làm ngôn ngữ chính của mình làm trình điều khiển chính thức và sdk có sẵn. Tôi đã hoàn thành mô-đun Vision và NLP và đang làm việc với phần Điều hướng.

Robot của tôi hiện đang sử dụng Arduino làm mô-đun để liên lạc và bộ xử lý Intel i7 x64 bit trên máy tính xách tay làm CPU.

Đây là tổng quan về robot và thiết bị điện tử của nó:

tổng quan về robot điện tử của robot


Vấn đề

Tôi đã triển khai một thuật toán SLAM đơn giản để có được vị trí robot từ các bộ mã hóa và thêm bất cứ thứ gì nó nhìn thấy bằng cách sử dụng động vật (như một lát 2D của đám mây điểm 3D) vào bản đồ.

Đây là bản đồ của phòng tôi hiện tại trông như sau:

phòng của tôi trông như thế nào Bản đồ khác phòng tôi

Đây là một đại diện thô của phòng thực tế của tôi:

nhập mô tả hình ảnh ở đây

Như bạn có thể thấy, chúng rất khác nhau và bản đồ rất xấu.

  • Đây có phải là dự kiến ​​từ việc sử dụng chỉ tính toán chết?
  • Tôi biết các bộ lọc hạt tinh chỉnh nó và sẵn sàng thực hiện, nhưng những cách tôi có thể cải thiện kết quả này là gì?

Cập nhật

Tôi quên đề cập đến cách tiếp cận hiện tại của tôi (mà trước đó tôi đã phải quên). Chương trình của tôi đại khái thực hiện điều này: (Tôi đang sử dụng hashtable để lưu trữ bản đồ động)

  • Lấy điểm đám mây từ Kinect
  • Đợi dữ liệu đo hình học nối tiếp đến
  • Đồng bộ hóa bằng phương pháp dựa trên dấu thời gian
  • Ước tính tư thế robot (x, y, theta) bằng các phương trình tại Wikipedia và dữ liệu mã hóa
  • Có được một "lát" của đám mây điểm
  • Lát của tôi về cơ bản là một mảng các tham số X và Z
  • Sau đó, vẽ các điểm này dựa trên tư thế robot và các thông số X và Z
  • Nói lại

Câu trả lời:


1

Đây có phải là những gì sẽ được mong đợi: về nguyên tắc có. Mặc dù bạn có thể cải thiện mô hình đo hình của mình, nhưng nói chung là không đủ để có được một bản đồ tốt. Không có một mô tả về hệ thống của bạn, thật khó để nói làm thế nào để cải thiện nó. Trên hầu hết các hệ thống ước tính dịch là tốt hơn so với luân chuyển. Bạn có thể thêm một con quay hồi chuyển và đo vòng quay. Điều này sẽ cải thiện kết quả của bạn đáng kể.

Thay vì tự thực hiện bộ lọc hạt, bạn có thể sử dụng triển khai SLAM, ví dụ như từ openslam . Điều này sẽ giúp bạn tiết kiệm rất nhiều thời gian, và rất có thể sẽ cho kết quả tốt hơn.


Bạn làm cho tôi cảm thấy tốt hơn bằng cách nói rằng điều đó được mong đợi: D, nhưng tôi thực sự tự tin rằng hình học của tôi rất tốt, ( đặc biệt là vòng quay của tôi : D). Tôi đã thêm một bản cập nhật mô tả ngắn gọn về hệ thống, (nếu điều đó là không đủ, tôi có thể cung cấp cho bạn mã hoặc bất kỳ thông tin nào khác). Tôi sẽ thử sử dụng một con quay vào ngày mai và sau đó cập nhật kết quả. Tôi rất thích sử dụng thuật toán của openslam, nhưng tôi đang sử dụng C # (để tôi có thể sử dụng SDK chính thức) và hầu hết các thư viện cho các tác vụ đó đều ở trong C ++ hoặc được cung cấp trong ROS (chỉ dành cho linux). Tôi chắc chắn sẽ thích sử dụng chúng nhưng tôi không thấy sắc nét!
Shreyas Kapur

tinyslam tuyên bố sử dụng 200 dòng mã c. Tôi đoán việc chuyển nó sang c # không nên quá khó.
Jakob

Ồ Nhưng tôi đoán nó không sử dụng bất kỳ bộ lọc hạt nào và làm điều tương tự như tôi đang làm. Nhưng tôi chắc chắn sẽ cố gắng thực hiện điều đó. Cảm ơn rất nhiều :-)
Shreyas Kapur

1

Tôi khuyên bạn nên thử bộ lọc hạt / EKF.

Những gì bạn hiện đang làm:

-> Xác định chết: Bạn đang nhìn vào vị trí hiện tại của mình mà không có bất kỳ tham khảo nào.

-> Bản địa hóa liên tục: Bạn đại khái biết bạn đang ở đâu trên bản đồ.

Nếu bạn không có tài liệu tham khảo và không biết bạn đang ở đâu trên bản đồ, bất kể bạn thực hiện hành động nào, bạn sẽ thấy thật khó khăn để có được một bản đồ hoàn hảo.

Ví dụ: Bạn đang ở trong một căn phòng hình tròn. Bạn tiếp tục tiến về phía trước. Bạn biết bước cuối cùng của bạn là gì. Bản đồ mà bạn nhận được sẽ là một cấu trúc giống như một hộp thẳng. Điều này sẽ xảy ra trừ khi và cho đến khi bạn có một số cách để bản địa hóa hoặc để biết chính xác bạn đang ở đâu trên bản đồ.

Việc bản địa hóa có thể được thực hiện thông qua EKF / Bộ lọc hạt nếu bạn có điểm tham chiếu bắt đầu. Tuy nhiên, điểm tham chiếu bắt đầu là phải.


Cảm ơn câu trả lời, ví dụ rất hay, tôi chắc chắn sẽ sử dụng EKF, nhưng vấn đề là tôi không giỏi môn toán, nhưng cũng không giỏi lắm, và tôi đang sử dụng C #, vì vậy tôi không có thư viện nào và thực hiện nó bản thân tôi sẽ đưa tôi nhiều tuổi Bất kỳ đề nghị về điều đó?
Shreyas Kapur

Sẽ tốt hơn nhiều nếu bạn tiếp tục học toán và tham gia một vài khóa học hơn là làm một cái gì đó mà bạn không hiểu và không thể gỡ lỗi. Tìm hiểu nó và thực hiện nó. Nó chắc chắn sẽ được sử dụng trong tương lai.
Naresh

Cũng tìm kiếm triển khai C # trên github. Công việc phổ biến hơn vẻ ngoài của nó.
Naresh

Cảm ơn những lời đề nghị, chắc chắn sẽ làm điều đó vào ngày mai. Tôi đang cố gắng hết sức để học toán và hy vọng sẽ làm được và chắc chắn rằng nó sẽ đi được một chặng đường dài. Tôi 13 tuổi, đó là nút cổ chai cho việc học ở đây, chúng tôi thậm chí chưa được giới thiệu về ma trận ở trường! :-(
Shreyas Kapur

Tôi biết rằng bạn 13 :) Internet không quan tâm. Bạn có thể nhận ma trận từ Khan Academy. Xác suất và thống kê là tốt.
Naresh

1

Bởi vì bạn đang sử dụng xác định chết các lỗi trong việc ước tính tư thế của robot tích lũy kịp thời. Từ kinh nghiệm của tôi, sau một thời gian, ước tính tư thế chết đã trở nên vô dụng. Nếu bạn sử dụng các cảm biến bổ sung, như Con quay hồi chuyển hoặc Gia tốc kế, ước tính tư thế sẽ được cải thiện nhưng vì bạn không có phản hồi tại một số điểm, nó sẽ phân kỳ như trước. Do đó, ngay cả khi bạn có dữ liệu tốt từ Kinect, việc xây dựng bản đồ chính xác là khó khăn vì ước tính tư thế của bạn không hợp lệ.

Bạn cần bản địa hóa robot của mình cùng lúc với việc bạn cố gắng xây dựng bản đồ của mình (SLAM!). Vì vậy, khi bản đồ được tạo ra, bản đồ tương tự cũng được sử dụng để bản địa hóa robot. Điều này đảm bảo rằng ước tính tư thế của bạn sẽ không phân kỳ và chất lượng bản đồ của bạn sẽ tốt hơn. Do đó, tôi khuyên bạn nên nghiên cứu một số thuật toán SLAM (ví dụ FastSLAM) và cố gắng thực hiện phiên bản của riêng bạn.


Cảm ơn câu trả lời của bạn :-). Tôi nhận ra rằng việc tính toán chết là sai lầm nhưng bản đồ tôi xây dựng ở quy mô rất nhỏ. Tôi di chuyển robot chậm và chậm để giảm thiểu càng nhiều lỗi càng tốt, robot không di chuyển nhiều. Tôi thực sự đã nghiên cứu rất nhiều thuật toán SLAM từ openslam, nhưng như tôi đã nói với Naresh, "Tôi không giỏi môn toán, nhưng cũng không giỏi lắm, và tôi đang sử dụng C #, vì vậy tôi không có thư viện nào và thực hiện nó bản thân tôi sẽ đưa tôi nhiều tuổi. " Bất kỳ đề nghị về điều đó?
Shreyas Kapur

Bạn có thực hiện bất kỳ xử lý bài với dữ liệu Kinect? Có thể dữ liệu chứa một số nhiễu và nếu bạn không xử lý nó có thể làm mất hiệu lực bản đồ của bạn. Cố gắng làm cho vấn đề đơn giản. Hãy để robot đứng yên và lập bản đồ các bức tường phía trước nó. Làm thế nào nó hoạt động bây giờ? Nếu bản đồ rõ ràng thì có nghĩa là vấn đề xảy ra do sự di chuyển. Nếu không, thì vấn đề là cơ bản hơn nhiều.
Demetris
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.