Vi điều khiển / cpu cho lượng giác nhanh trong robot?


15

Điều này liên quan đến phần cứng nặng ít, bởi vì một robot đi bộ (cỡ mèo, 6 chân với 3 DOF) nên mang nó đi khắp nơi. Do việc đi bộ đó, nó sẽ cần thực hiện nhiều lượng giác (sử dụng toán học ma trận hay không tôi chưa chắc chắn) và đây là câu hỏi này xuất phát từ đâu.

PIC, Arduino hoặc AVR giá rẻ không đủ nhanh để tính toán mọi thứ 100 / giây và giữ những thứ như quán tính và tránh chướng ngại vật, hoặc thậm chí là những con đường / dáng đi tàn khốc.

  • Kế hoạch A là mang bộ não lên robot. Có thể là bộ vi xử lý, micro ITX, nettop hoặc loại khác; phần cứng hiệu quả để làm lượng giác / ma trận toán học nhanh là gì?

    Tôi đã tìm kiếm trực tuyến và dự kiến ​​sẽ tìm hiểu về các bộ vi điều khiển AVR, x86 hoặc ARM chuyên về vấn đề này nhưng không có may mắn ở đó.

  • Kế hoạch B là có một máy x86 được kết nối qua WiFi để thực hiện việc nâng vật nặng. Cũng tuyệt vời cho việc tạo mẫu, nhưng tôi muốn điều này được chuyển sang kế hoạch A cuối cùng khi phần cứng thu nhỏ. Nhưng ngay cả khi đó, CPU máy tính để bàn nào có thể thực hiện lượng giác nhanh nhất?

  • Kế hoạch C là phân phối tải và có một vi điều khiển / lõi hiệu quả năng lượng cho mỗi chân, mặc dù đó không phải là giải pháp tốt nhất vì nhiều lý do tôi thích khả năng mở rộng của nó.

Tôi chưa quyết định ngôn ngữ và / hoặc thư viện được sử dụng, nhưng thích Pascal và C ++ hơn.

(đề xuất cho các thẻ phù hợp hơn chào mừng, tôi mới ở đây)


11
toán học dấu phẩy động không phải là một điều bắt buộc. Bạn luôn có thể xây dựng các bảng sin (hoặc bất kỳ hàm nào khác), đặt chúng vào flash của một AVR và nội suy giữa các giá trị với các phép tính điểm cố định. Điều này có thể đủ nhanh cho nhu cầu của bạn.
Christoph

3
Thay vì làm mất các bài toán nặng trong thời gian thực, một giải pháp phổ biến là tính toán trước các bảng giá trị & sau đó tìm kiếm câu trả lời. Ý tưởng phân phối công việc giữa nhiều CPU cũng tốt, ví dụ một CPU chủ mạnh mẽ và sau đó một bộ xử lý trên mỗi chân.
John U

2
Bạn cũng có thể cân nhắc việc hỏi loại câu hỏi này trên trang web Robotics Stackexchange .
Rocketmagnet

1
Kế hoạch B sẽ thực hiện tính toán khá nhanh, nhưng giao tiếp qua WiFi rất có thể sẽ giết chết hiệu suất đạt được. Bạn đã cân nhắc sử dụng điện thoại Android được kết nối qua usb chưa? Đó là sức mạnh tính toán cao hơn rất nhiều mà không có độ trễ của wifi
stefan 13/03/13

1
Một bảng STM32F4 với Đơn vị dấu phẩy động dường như là đủ cho ứng dụng của bạn. Nó có 128k SRAM với 64k CCM. Nó có thể chạy ở 168 MHz. Phép nhân điểm động 32 bit chỉ mất 1 chu kỳ CPU ..
richieqianle

Câu trả lời:


16

Có vẻ như ứng dụng của bạn không thực sự chuyên sâu. Ví dụ, một DSPIC có thể thực hiện lệnh 400 k cho mỗi lần lặp của bạn. Đó là rất nhiều. Tuy nhiên, sẽ rất hữu ích khi có khả năng I / O ở mức độ thấp, máy phát PWM, bộ hẹn giờ và những thứ tương tự.

Sine và cosine thực sự không khó thực hiện trong một máy số nguyên như một DSPIC. Tôi đã làm điều đó một vài lần bản thân mình. Bí quyết là chọn đại diện phù hợp cho các góc. Radian có thể là tốt đẹp từ quan điểm lý thuyết, nhưng là bất tiện tính toán. Suy thoái là nhân tạo và chỉ ngớ ngẩn. Sử dụng phạm vi đầy đủ của bất cứ số nguyên nào có kích thước máy của bạn để thể hiện một vòng quay đầy đủ. Ví dụ, trên một DSPIC, là bộ xử lý 16 bit, một vòng quay đầy đủ là 65536 đếm, đó là độ chính xác và độ phân giải cao hơn mức bạn cần để điều khiển robot hoặc dù sao bạn cũng có thể đo được.

Một lợi thế của biểu diễn này là tất cả các gói xảy ra tự động chỉ do cách số nguyên không dấu cộng và trừ hoạt động. Một lợi thế đáng kể khác là đại diện này cho vay đặc biệt tốt khi sử dụng bảng tra cứu cho sin và cos. Bạn chỉ cần lưu trữ chu kỳ 1/4. Hai bit trên cùng của góc cho bạn biết bạn đang ở góc phần tư nào, điều này cho bạn biết nên lập chỉ mục vào bảng tiến hay lùi và liệu có nên phủ nhận kết quả hay không. N bit thấp hơn tiếp theo được sử dụng để lập chỉ mục vào bảng, với bảng có 2 N đoạn (2 N +1 điểm). Lưu ý rằng lập chỉ mục vào bảng sau đó chỉ là bổ sung cho các bit chỉ mục của bảng.

Bạn có thể cho bảng đủ điểm để chọn câu trả lời gần nhất là đủ tốt. Ví dụ: nếu bảng có 1024 phân đoạn thì sin và cos sẽ được tính theo 1/4096 gần nhất của một vòng tròn. Điều đó sẽ rất nhiều cho việc điều khiển một robot. Nếu bạn muốn độ chính xác cao hơn, bạn có thể làm cho bảng lớn hơn hoặc sử dụng các bit thấp hơn còn lại của góc để nội suy tuyến tính giữa các mục của bảng liền kề.

Dù sao đi nữa, vấn đề là dường như các yêu cầu của bạn đối với bộ xử lý này không phù hợp với vấn đề đã nêu. Tôi có thể sử dụng một DSPIC33F. Nó chắc chắn là nhỏ, trọng lượng nhẹ và hiệu quả năng lượng cao hơn nhiều so với quy trình tính toán cho mục đích chung hoàn toàn như x86 trên một máy tính bảng duy nhất.


Tôi luôn có ấn tượng rằng PIC sẽ chậm lại dù chỉ là động học nghịch đảo, nhưng tôi có thể cần phải xem xét lại. Có thể thực hiện chuyển động nghịch đảo trong 6legs 3DOF ít nhất 100 / giây không? Đó là động lực nghịch đảo 6x3x100 chỉ để có được các chuyển động chân sống. Dù sao tôi cũng cần các động học nghịch đảo xảy ra trên cùng một nền tảng khi thuật toán chạy, do đó tôi không phải thực hiện lại các phần này hai lần. Thuật toán sẽ đòi hỏi khắt khe hơn và chắc chắn sẽ không thể chạy trên bảng PIC hoặc Arduino-isch.
Barry Staes

9

Bạn sẽ đối phó với rất nhiều tín hiệu đầu vào. Bạn không nhất thiết cần một CPU có thông lượng cao; rất nhiều tín hiệu có thể được xử lý song song. Đây là lãnh thổ DSP điển hình. Tất nhiên, bạn cũng muốn chức năng CPU nói chung. Chuyện đó không thành vấn đề. Có rất nhiều CPU với DSP tích hợp.

Một thiết kế chip điển hình cho các ứng dụng như vậy là Cortex-M4. Điều này đi kèm với một DSP tích hợp và các phiên bản -M4F cũng có một FPU. Điều này có thể không cần thiết, lượng giác có thể dễ dàng được thực hiện trong toán học điểm cố định.


Toán học ma trận sẽ có lợi thế trên Cortex-M4F? (trong trường hợp tôi mạo hiểm ở đó, tạo mẫu)
Barry Staes

3
Chỉ là một chút tầm thường - Lõi bộ xử lý Cortex-M4 không có DSP tích hợp, nó có một mức độ khả năng DSP được tích hợp vào lõi bộ xử lý chính của nó. Các phần mở rộng DSP là việc bổ sung các hướng dẫn nhân / tích lũy, tạo điều kiện thuận lợi cho các chức năng DSP điển hình như lọc và biến đổi.
uɐɪ

6

Một vài nhận xét:

  1. Bạn không cần xử lý các hoạt động lượng giác trên cùng một CPU thực hiện việc tránh chướng ngại vật. Bạn có thể phân chia các nhiệm vụ giữa hai bộ vi điều khiển và sử dụng giao thức giao tiếp để khiến chúng nói chuyện.

  2. Đối với một thử nghiệm, tôi đã triển khai thuật toán AHRS với bộ lọc Kalman trong bộ vi điều khiển ARM Cortex M0 (đó là STM32, không nhớ chính xác phần còn lại nhưng tôi nghĩ rằng nó là 32 MHz) và sử dụng toán học điểm cố định tôi có thể chạy nó ở khoảng 40 mẫu / giây. Với bộ điều khiển nhanh hơn, bạn sẽ có thể mang nó dễ dàng, và tất nhiên bạn có thể thử cách thức của FPGA hoặc DSP.

  3. Tôi muốn nói rằng việc điều khiển hai chân không cần nhiều CPU và bạn có thể điều khiển tất cả các chân với nhau, có thể tách biệt với các hoạt động tránh lượng giác và tránh chướng ngại vật (xem 1)


Các servo được điều khiển nối tiếp thông qua bộ điều khiển hoặc bus pixel, do đó về cơ bản đã được tải. Vấn đề là phần mềm cần thực hiện nhiều cách tính toán động học ngược hơn là chỉ cần cho tư thế / dáng đi trực tiếp.
Barry Staes

5

Lượng giác là khó khăn, nhưng có những phím tắt. Nếu bạn nhẹ về khả năng xử lý, hãy xem xét thuật toán CORDIC.

Về cơ bản, nó là một bảng các giá trị cho [ví dụ] sin. Các góc có thể được tính bằng độ, radian, bất cứ điều gì bạn thích. Vấn đề là, SINE của các giá trị này là 1/2 (0,5), 1/4 (0,25), 1/8, 1/16 ..... đến bất kỳ phần nào của mức độ mà robot của bạn có thể sử dụng.

Nhập góc của bạn, trừ giá trị bảng đầu tiên, đặt kết quả của bạn thành kết quả đầu tiên (0,5). Nếu, bằng cách trừ, góc của bạn trở nên âm, thì THÊM giá trị tiếp theo (và trừ 0,25). Nếu không, tiếp tục trừ các góc và thêm kết quả.

Khi bạn đến cuối bảng, tất cả những gì bạn đã làm là cộng và trừ nhưng bạn vẫn rất gần gũi. Có một "yếu tố bí ẩn" cuối cùng để nhân lên.

Độ chính xác [và tốc độ] của kết quả phụ thuộc vào kích thước [và độ phân giải] của bảng tra cứu.


CORDIC có vẻ tốt nhưng tôi sẽ chỉ sử dụng nó nếu nó làm cho robot nhanh hơn (đó là một yêu cầu).
Barry Staes

3

Bạn có thể cân nhắc sử dụng bảng Raspberry Pi chạy hệ thống GNU / Linux cho mục đích chung. Raspberry Pi có một số chân GPIO có thể được sử dụng để kết nối các rô-bốt robot hoặc bảng mở rộng.

http://www.youtube.com/watch?v=RuYLTudcOaM

Mô hình A Raspberry Pi có thể thực hiện tính toán điểm nổi có mục đích chung lên đến 24 GFLOP bằng cách sử dụng GPU của nó bằng OpenGL ES 2 trong khi vẫn duy trì dưới mức ngân sách 2,5W.

http://elinux.org/RPi_Hardware

Ví dụ: thiết lập robot chạy bằng pin được triển khai bằng Raspberry Pi.

http://www.homofaciens.de/technics-robots-R3-con cản_en_navion.htmlm

Ví dụ 2: robot 6 chân được điều khiển bởi pi mâm xôi:

http://www.youtube.com/watch?v=Yhv43H5Omfc

Ví dụ 3: một robot con lắc ngược 2 bánh tự cân bằng được điều khiển bởi một quả mâm xôi pi:

http://www.youtube.com/watch?v=n-noFwc23y0


2

Đối với robot có chân, bạn có thể tạo một số chuỗi di chuyển chân được xác định trước và "chơi chúng". Tránh chướng ngại vật thời gian thực có thể được thực hiện với fuzzy logicviệc thực hiện nhẹ trong đó mọi thứ lại ở định dạng bảng và tất cả những gì bạn cần làm là chọn đúng giá trị từ nó và sử dụng nó cho defuzzyficationquá trình.

Tất cả mọi thứ có thể được thực hiện trong C trên bộ xử lý nhanh hơn như thế nào ARM7. Tôi đã thử nó AVRvà thất bại, sau khi dành nhiều thời gian để chuyển đổi mọi thứ thành fixed point arithmetics.


Chơi hoạt hình dáng đi là chính xác những gì tôi không muốn. Thuật toán tôi muốn tự mình thực hiện các con số phải làm gì với đôi chân của mình và thuật toán đó là lý do tại sao tôi cần lượng giác nhanh. Tôi thiếu để làm rõ điều đó trong câu hỏi của tôi tuy nhiên. Và thấy rằng rất nhiều tiếng chuông trong này, tôi sẽ lãng phí khi chỉnh sửa câu hỏi. Tôi sẽ hỏi và cụ thể hơn, trong thời gian tới.
Barry Staes

Trong trường hợp đó tôi sẽ đi cho hệ thống chân servo. Mỗi chân có bộ điều khiển riêng. Phương pháp dựa trên đại lý.
Gossamer

1

Theo mặc định, nền tảng Texas Stellaris có một đơn vị điểm nổi trên tàu. Không chắc bộ điều khiển ARM có xung nhịp 80 MHz có đủ nhanh cho ứng dụng của bạn hay không, nhưng bảng phát triển LaunchPad khá rẻ: http://www.ti.com/ww/en/launchpad/stellaris_head.html

Nó được lập trình thông qua USB, các bộ công cụ miễn phí có sẵn cho ít nhất Windows và Linux, có kích thước khoảng 4 × 6 cm và có hơn 30 chân GPIO (nếu tôi đếm đúng).


0

Bạn có thể nhúng bo mạch CPU pc điện x86 vào ứng dụng robot của mình với sự trợ giúp của AVR để điều khiển các ổ đĩa của robot dưới dạng thẻ giao tiếp. Giải pháp nhanh nhất và rẻ nhất cho vấn đề của bạn. Nhưng vâng, bạn phải nhầm rất nhiều mã hóa vào kiến ​​trúc x86, nhưng may mắn thay, bạn có thể nắm được rất nhiều mã hóa từ các mã hệ điều hành nguồn mở. (Nếu cấu trúc cơ khí của bạn có thể chịu được trọng lượng này)


4
"x86" và "power pc" là hai kiến ​​trúc cạnh tranh hoàn toàn khác nhau (và ít nhất là tại một số điểm trong lịch sử).
Chris Stratton
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.