2012-04-16 33 views
5

Tôi đang thực hiện trình điều khiển cho máy nghiền CNC và tôi gặp sự cố khi triển khai lệnh G-code arc.Tính đường dẫn hồ quang n chiều

Tôi đã tìm thấy một số triển khai của thuật toán vòng tròn điểm giữa, nhưng nó không thực sự có thể sử dụng được.

Vấn đề với bản ngã điểm giữa như tôi thấy, là 2D và vẽ tất cả các octants cùng một lúc, trong khi tôi cần các bước tuần tự thông qua đường dẫn 3D, được cho bởi điểm bắt đầu, kết thúc và điểm giữa .

Tôi đã tìm thấy một số nice multidimensional equivalent of Bresenham’s line drawing algo sử dụng các thao tác dấu phẩy động. Có lẽ một điều tương tự tồn tại để vẽ một vòng cung?

Tôi có thể bẻ cong bản ngã này theo ý muốn của mình bằng cách sử dụng rất nhiều suy nghĩ và thử nghiệm, nhưng vì vẽ một vòng cung không phải là một vấn đề chưa được giải quyết, và các máy CNC đã được thực hiện trước đó. ?

+0

Bạn đang cố gắng tìm đường đi dọc theo đường cong 1D trong không gian 3D hoặc đường dẫn bao phủ bề mặt cong 2D trong không gian 3D? – Beta

Trả lời

0

Gói python được sử dụng để xử lý các tệp DXF cho một máy cắt 2D không thông minh có chức năng phân chia một cung thành các đoạn thẳng trong 2D. Bạn có thể sử dụng mã này và sau đó sử dụng các biến dạng tọa độ 3D để tùy ý đặt điều này trong không gian 3D. Ví dụ về các biến đổi tọa độ có thể được tìm thấy trong gói py-stl của tôi.

0

Trong LinuxCNC, tạo vị trí được tách riêng với thế hệ bước. Trong vòng lặp tạo vị trí, hệ thống theo dõi khoảng cách nó đã di chuyển dọc theo dòng nguyên thủy (dòng hoặc xoắn) hiện tại và sử dụng một công thức đơn giản để lấy vị trí là khoảng cách D dọc theo nguyên thủy đó. (Thông thường, điều này được thực hiện một lần mỗi mili giây). Vị trí này có thể được sử dụng theo nhiều cách khác nhau tùy thuộc vào việc bạn có servos, tạo bước phần cứng hay tạo bước phần mềm.

Trong hệ thống tạo bước phần mềm, sự khác biệt giữa vị trí lệnh cũ và vị trí lệnh mới được xác định dọc theo mỗi trục và điều này được sử dụng để cập nhật tốc độ của trình tạo sóng kỹ thuật số bằng phương pháp tổng hợp trực tiếp.). Sau đó, với tốc độ cao hơn (thường là 20-50µs), DDS xác định cho mỗi trục cho dù một bước có được tạo ra tại thời điểm đó hay không.

Đây là thiết kế khác với thiết kế của bạn, nhưng nó là thiết kế linh hoạt hơn. Ví dụ, bằng cách tách thế hệ vị trí khỏi tạo bước, bạn có thể sửa đổi thuật toán kết hợp trong mã tạo vị trí của bạn mà không cần sửa đổi thế hệ bước; và bạn có thể thay thế thế hệ bước phần mềm bằng cách tạo bước phần cứng hoặc điều khiển servo bằng các thuật toán như PID. Trong thiết kế của bạn, bạn có thể ước lượng phương pháp tôi mô tả ở trên bằng cách đơn giản là dicing vòng xoắn ốc của bạn thành các đoạn thẳng như được Roland mô tả, và sử dụng chúng như đầu vào vào mã thế hệ bước của bạn. Trong một nghĩa nào đó, điều này không quá khác so với những gì LinuxCNC làm, ngoại trừ việc đường cong nguyên thủy trở nên được lấy mẫu theo khoảng cách thay vì theo thời gian.

Các vấn đề liên quan