Đường cong chuyển động 'Phù hợp nhất' cho cấu hình không thể thực hiện được


7

Tôi có một chức năng riêng biệt đại diện cho vị trí 1d trong không gian theo thời gian. Tôi có một hệ thống chuyển động muốn đạt được đường cong này, nhưng, do các ràng buộc về độ giật (đạo hàm thứ 3) và gia tốc (đạo hàm bậc 2), nó thực sự không thể đạt được chuyển động. Điều này xảy ra do sự gián đoạn trong chức năng, nơi nó đi từ tín hiệu phẳng đến tăng mạnh.

Tôi đang tìm kiếm một thuật toán sẽ lấy chuỗi rời rạc và tạo ra một chuỗi mới gần đúng với nguyên bản, mà không vi phạm các giới hạn trên về cường độ của các đạo hàm thứ hai và thứ ba. Tôi không có định nghĩa chặt chẽ về cách tôi muốn giảm thiểu lỗi cho vị trí, nhưng mức độ phù hợp với bình phương trung bình tổng hợp có lẽ là hợp lý. Đối với đạo hàm, tôi xấp xỉ bằng cách sử dụng chênh lệch trung tâm tiêu chuẩnf(x+1)f(x1)(2Δt).

Tôi đã cố gắng đơn giản áp dụng các giới hạn và lái xe về vị trí mục tiêu càng nhanh càng tốt, nhưng điều này không ổn định (nó không xem xét đúng thời gian giảm tốc và giảm thời gian và do đó làm lu mờ mục tiêu và dao động.) Tôi đã xem xét áp dụng bộ lọc thông thấp lặp đi lặp lại cho đến khi các ràng buộc được đáp ứng, nhưng điều này có vẻ như là một chút hack và tôi không tin rằng nó sẽ mang lại cho tôi một sự phù hợp rất tốt. Có cách nào để tạo bộ lọc giới hạn cụ thể các dẫn xuất của tín hiệu không?


Một vài lưu ý bổ sung:

  1. Sê-ri mới phải có cùng độ dài với sê-ri gốc. Chuyển động này xảy ra cùng lúc với một hoạt động khác và cả hai được đồng bộ hóa nghiêm ngặt. Tuy nhiên, có thể chấp nhận được nếu không thể đạt được vị trí cuối cùng trong các ràng buộc; điều này chỉ có nghĩa là hoạt động song song quá mạnh để chuyển động theo sau. Điều này không nên xảy ra, trong thực tế, khi được cấu hình đúng.

  2. Tôi đã bắt đầu điều tra một phương pháp lặp để xác định một điểm vi phạm các ràng buộc, sau đó điều chỉnh lỗi và phân chia âm của lỗi giữa hai điểm lân cận, để tổng các giá trị hàm sẽ được giữ nguyên. Sau đó, nó sẽ tính toán lỗi ở hàng xóm và chuyển lỗi còn lại sang trái hoặc phải tương ứng. Nếu nó đạt đến cuối của chức năng và vẫn còn lỗi, nó chỉ cần cắt đến giới hạn. Tôi không biết cách tiếp cận này có bất kỳ nền tảng lý thuyết âm thanh nào không, nhưng tôi sẽ thử nghiệm và xem cách nó thực hiện với các tín hiệu của tôi.


Ghi chú thêm:

Thật hợp lý khi ước tính hàm jerk (đạo hàm thứ ba) như là một sự kết hợp tuyến tính của các bước không chồng chéo và các hàm xung. Đối với một loạt đầu vào điển hình, nó trông giống như thế này (màu xanh so với màu đỏ là nỗ lực hiện tại của tôi trong quá trình lọc; điều này chủ yếu chỉ để truyền đạt ý tưởng về hình dạng):

Dòng Jerk

Dưới đây là một hồ sơ tăng tốc điển hình:

Dòng Accel

Đây là một cấu hình vận tốc điển hình (việc leo lên lúc bắt đầu là nguyên nhân gây ra tất cả các vấn đề; tính chất vật lý của vấn đề khiến hệ thống muốn bắt đầu di chuyển gần với vận tốc vô hạn ngay từ khi đi, nhưng những cân nhắc thực tế có thể cản trở ):

Dòng vận tốc

Đối với những người quan tâm, đây là chuỗi dữ liệu được phân định bằng tab thô mà từ đó các đạo hàm khác biệt trung tâm được tính gần đúng để tạo ra các biểu đồ trên:

x   4.5 4.5 4.5 4.5 4.5 4.5 4.5 4.5 4.5 4.5 4.5 4.5 4.5 4.5 4.5 4.5 4.5 4.5 4.5 4.5 4.5 4.5 4.5 4.5 4.5 4.5 4.5 4.5 4.5 4.5 4.5 4.5 4.5 4.5 4.510544858 4.529570168 4.548595479 4.567620789 4.5866461   4.60567141  4.624696721 4.643722031 4.662747342 4.681772652 4.700797963 4.719823273 4.738848584 4.757873894 4.776899204 4.795924515 4.814949825 4.833975136 4.853000446 4.872025757 4.891051067 4.910076378 4.929101688 4.948126999 4.967152309 4.98617762  5.00520293  5.024228241 5.043253551 5.062278862 5.081304172 5.100329483 5.119354793 5.138380104 5.157405414 5.176430725 5.195456035 5.214481346 5.233506656 5.252531967 5.271557277 5.290582588 5.309607898 5.328633209 5.347658519 5.36668383  5.38570914  5.404734451 5.423759761 5.442785072 5.461810382 5.480714657 5.497626044 5.514537431 5.531448818 5.548360206 5.565271593 5.58218298  5.599094367 5.616005754 5.632917141 5.649828528 5.666739915 5.683651302 5.700562689 5.717474077 5.734385464 5.751296851 5.768208238 5.785119625 5.802031012 5.818942399 5.835853786 5.852765173 5.869676561 5.886587948 5.903499335 5.920410722 5.937322109 5.954233496 5.971144883 5.98805627  6.004967657 6.021879044 6.038790432 6.055701819 6.072613206 6.089524593 6.10643598  6.123347367 6.140258754 6.157170141 6.174081528 6.190992916 6.207904303 6.22481569  6.241727077 6.258638464 6.275549851 6.292461238 6.309372625 6.326284012 6.343195399 6.360106787 6.377018174 6.393929561 6.410840948 6.427752335 6.444663722 6.461575109 6.478486496 6.495397883 6.512309271 6.529220658 6.546132045 6.563043432 6.579954819 6.596866206 6.613777593 6.63068898  6.647600367 6.664511754 6.681423142 6.698334529 6.715245916 6.732157303 6.74906869  6.765980077 6.782891464 6.79783353  6.807698506 6.817563482 6.827428457 6.837293433 6.847158409 6.857023385 6.866888361 6.876753336 6.886618312 6.896483288 6.906348264 6.91621324  6.926078215 6.935943191 6.945808167 6.955673143 6.965538119 6.975403095 6.98526807  6.995133046 7.004998022 7.014862998 7.024727974 7.034592949 7.044457925 7.054322901 7.064187877 7.074052853 7.083917828 7.093782804 7.10364778  7.113512756 7.123377732 7.133242707 7.143107683 7.152972659 7.162837635 7.172702611 7.182567587 7.192432562 7.202297538 7.212162514 7.22202749  7.231892466 7.241757441 7.251622417 7.261487393 7.271352369 7.281217345 7.29108232  7.300947296 7.310812272 7.320677248 7.330542224 7.3404072   7.350272175 7.360137151 7.370002127 7.379867103 7.389732079 7.399597054 7.40946203  7.419327006 7.429191982 7.439056958 7.448921933 7.45668417  7.46311785  7.46955153  7.47598521  7.48241889  7.488852569 7.495286249 7.501719929 7.508153609 7.514587289 7.521020969 7.527454649 7.533888329 7.540322008 7.546755688 7.553189368 7.559623048 7.566056728 7.572490408 7.578924088 7.585357768 7.591791447 7.598225127 7.604658807 7.611092487 7.617471594 7.622952136 7.628432678 7.63391322  7.639393762 7.644874304 7.650354846 7.655835389 7.661315931 7.666796473 7.672277015 7.677757557 7.683238099 7.688718641 7.694199183 7.699679725 7.705160268 7.71064081  7.716121352 7.721601894 7.727082436 7.732562978 7.73804352  7.743524062 7.749004605 7.754485147 7.759965689 7.765446231 7.770926773 7.776407315 7.781828236 7.786267475 7.790706714 7.795145953 7.799585192 7.804024432 7.808463671 7.81290291  7.817342149 7.821781388 7.826220627 7.830659866 7.835099105 7.839538344 7.843977584 7.848416823 7.852856062 7.857295301 7.86173454  7.866173779 7.870613018 7.875052257 7.879491497 7.883930736 7.888369975 7.892809214 7.897248453 7.901687692 7.906126931 7.91056617  7.915005409 7.919444649 7.923883888 7.928323127 7.932762366 7.937201605 7.941640844 7.946080083 7.950519322 7.954958561 7.959397801 7.96383704  7.968276279 7.972715518 7.977154757 7.980384921 7.982851165 7.985317409 7.987783653 7.990249897 7.992716141 7.995182385 7.997648629 8.000114873 8.002581117 8.005047361 8.007513605 8.009979849 8.012446092 8.014912336 8.01737858  8.019844824 8.022311068 8.024777312 8.027243556 8.0297098   8.032176044 8.034642288 8.037108532 8.039574776 8.04204102  8.044507264 8.046973508 8.049439752 8.051905996 8.05437224  8.056838484 8.059304728 8.061633119 8.063606114 8.065579109 8.067552105 8.0695251   8.071498095 8.07347109  8.075444085 8.07741708  8.079390076 8.081363071 8.083336066 8.085309061 8.087282056 8.089255051 8.091228046 8.093201042 8.09410447  8.094332124 8.094559777 8.09478743  8.095015084 8.095242737 8.09547039  8.095698043 8.095925697 8.09615335  8.096381003 8.096608657 8.09683631  8.097063963 8.097291616 8.09751927  8.097746923 8.097974576 8.09820223  8.098429883 8.098657536 8.098885189 8.099112843 8.099340496 8.099568149 8.099795803 8.100023456 8.100251109 8.100478762 8.100706416 8.100934069 8.101161722 8.101389376 8.101617029 8.101844682 8.102072336 8.102299989 8.102527642 8.102755295 8.102982949 8.103210602 8.103438255 8.103665909 8.103893562 8.104121215 8.104348868 8.104576522 8.104804175 8.105031828 8.105259482 8.105487135 8.105714788 8.105942441 8.106170095 8.106397748 8.106625401 8.106853055 8.107080708 8.107308361 8.107536014 8.107763668 8.107991321 8.108218974 8.108446628 8.108674183 8.108899792 8.109120089 8.109331659 8.109531087 8.109714959 8.10987986  8.110022376 8.110139158 8.11022965  8.110297009 8.110344649 8.110375986 8.110394434 8.110403409 8.110406324 8.110406324

Chào mừng đến với DSP.SE. Câu hỏi thú vị.
Jason R

Làm thế nào về một số biến thể của bộ điều khiển PID?
Jim Clay

@Jim, điều đó có thể hoạt động, nhưng có vẻ hơi phức tạp đối với tác vụ và sẽ yêu cầu điều chỉnh để làm cho nó hoạt động tốt. Tôi cũng không chắc nó sẽ tốt hơn nhiều so với bộ lọc thông thấp lặp lại đơn giản.
Dan Bryant

1
Tôi đang tự hỏi liệu lấy hệ thống được mô tả trong câu hỏi / câu trả lời này và, trong vòng lặp bộ lọc Kalman, buộc lực giật và gia tốc bị hạn chế như bạn muốn có thể làm đúng hay không. Tôi không có thời gian để chơi bây giờ; đó sẽ là cuối tuần trước khi tôi có cơ hội ... trạng thái mô hình sẽ cần được tăng lên để bao gồm cả cú giật, cũng như các ràng buộc.
Peter K.

Câu trả lời:


1

Đây chỉ là một ý tưởng. Không biết nó sẽ hoạt động. Trong phép nội suy spline khối, một đường cong được xây dựng bằng đa thức bậc ba mảnh

P(x)=a+bx+cx2+dx3

Các hệ số cho jth khối (kéo dài từ jth để (j+1)thđiểm) được tìm thấy bằng cách chỉ định trực tiếp các đạo hàm đầu tiên tại các nút và cũng chỉ định rằng đường cong phải đi qua các điểm. Tôi không ở đâu gần một chuyên gia trong việc này nhưng nó đi một cái gì đó như thế này

Pj(xj)=Pj1(xj)Pj(xj+1)=Pj+1(xj+1)Pj(xj)=Pj1(xj)Pj(xj+1)=Pj+1(xj+1)

Bây giờ sử dụng ý tưởng này cho vấn đề của bạn, có lẽ bạn có thể sử dụng 5th đa thức theo mẫu này

P(x)=x2(a+bx+cx2+dx3)

và sử dụng các ràng buộc trên các đạo hàm bậc hai và bậc ba như thế này

Pj(xj)=Pj1(xj)Pj(xj+1)=Pj+1(xj+1)Pj(xj)=Pj1(xj)Pj(xj+1)=Pj+1(xj+1)

Chỉnh sửa: Từ hàm rời rạc đại diện cho vị trí 1d trong không gian theo thời gian, các giá trị acc và jerk được tính toán (điều đó có khả thi trong trường hợp của bạn không?). Nếu chúng vượt quá một số giá trị tối đa, chúng sẽ bão hòa đến giá trị tối đa đó. Sau đó, bạn xây dựng hàm vị trí 1D liên tục có các giá trị acc và jerk tại các thời điểm bạn đã chỉ định. Sau đó, đường cong này được đánh giá tại thời điểm quan tâm và do đó bạn có một hàm riêng biệt mới đại diện cho vị trí 1d trong không gian theo thời gian nhưng với các giá trị acc và jer mong muốn. Tôi không biết nếu điều này có ý nghĩa hơn. Phải mất một số nỗ lực để kiểm tra nếu nó hoạt động. Nếu bạn muốn thử, tôi khuyên bạn nên tìm kiếm phép nội suy spline khối để tìm hiểu cách nó hoạt động với vị trí và vận tốc. Sau đó sử dụng các nguyên tắc tương tự nhưng chỉ trên acc và jerk.


Là ý định của việc này để tính toán một hàm liên tục từng phần phù hợp với các chuỗi rời rạc? Nếu vậy, bạn có ý tưởng làm thế nào để thực hiện thao tác giới hạn jerk / accel trên đa thức không? Nếu vậy, tôi có thể lấy mẫu lại từ hàm liên tục, nhưng tôi không rõ tôi sẽ sửa đổi các hệ số đa thức như thế nào để đạt được các ràng buộc giới hạn tối đa mong muốn.
Dan Bryant
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.