Initial commit

This commit is contained in:
2026-07-03 16:37:12 +07:00
commit 63b8c1ea8b
1931 changed files with 640587 additions and 0 deletions

View File

@@ -0,0 +1,97 @@
using RobotNet10.CANOpen.CiA402.Enums;
using RobotNet10.Shared.Geometry;
using System.Threading;
using System.Threading.Tasks;
namespace RobotNet10.RobotApp.Motion;
/// <summary>
/// Interface cho Inverse Kinematics - chuyển đổi vận tốc robot (Twist) thành vận tốc các bánh xe và điều khiển robot
/// Hỗ trợ state machine và operation modes tương tự CiA402
/// </summary>
public interface IInverseKinematics
{
/// <summary>
/// Gets the current state of the drive system (tương tự CiA402 state machine)
/// </summary>
bool IsOperationEnabled { get; }
/// <summary>
/// Tính toán vận tốc các bánh xe từ vận tốc robot
/// </summary>
/// <param name="twist">Vận tốc robot (linear X, angular Z)</param>
/// <returns>Tuple (leftWheelVelocity, rightWheelVelocity) - vận tốc bánh trái và bánh phải (encoder counts/s)</returns>
(int leftWheelVelocity, int rightWheelVelocity) CalculateWheelVelocities(Twist twist);
/// <summary>
/// Đặt vận tốc robot (Twist) - sẽ tự động tính toán và điều khiển các bánh xe
/// </summary>
/// <param name="twist">Vận tốc robot (linear X, angular Z)</param>
/// <param name="ct">Cancellation token</param>
Task SetVelocityAsync(Twist twist, CancellationToken ct = default);
/// <summary>
/// Enable drive system - convenience method để tự động transition qua các states
/// đến OperationEnabled. Gọi method này sẽ tự động thực hiện tất cả các bước cần thiết.
/// </summary>
void Enable();
/// <summary>
/// Enable 2 động cơ giống enable bằng tay trên device: gửi lệnh trực tiếp xuống từng servo,
/// await từng bước (SetOperationMode, SetProfileVelocity 0, SwitchOn, EnableOperation) rồi mới xong.
/// </summary>
Task EnableAsync(CancellationToken cancellationToken = default);
/// <summary>
/// Disable drive system - convenience method để tắt drive về trạng thái an toàn
/// </summary>
void Disable();
/// <summary>
/// Enable operation - chuyển từ SwitchedOn sang OperationEnabled (single step)
/// </summary>
void EnableOperation();
/// <summary>
/// Disable operation - chuyển từ OperationEnabled về SwitchedOn (single step)
/// </summary>
void DisableOperation();
/// <summary>
/// Quick stop - dừng khẩn cấp drive system
/// </summary>
void QuickStop();
/// <summary>
/// Fault reset - reset lỗi và đưa drive về trạng thái ban đầu
/// </summary>
void FaultReset();
/// <summary>
/// Set operation mode cho drive system (ProfileVelocity, ProfilePosition, etc.)
/// </summary>
/// <param name="mode">Operation mode to set</param>
/// <param name="ct">Cancellation token</param>
Task SetOperationModeAsync(OperationMode mode, CancellationToken ct = default);
/// <summary>
/// Get current operation mode của drive system
/// </summary>
/// <param name="ct">Cancellation token</param>
Task<OperationMode> GetOperationModeAsync(CancellationToken ct = default);
/// <summary>
/// Set profile acceleration cho drive system
/// </summary>
/// <param name="acceleration">Gia tốc tăng tốc (m/s²)</param>
/// <param name="ct">Cancellation token</param>
Task SetAccelerationAsync(double acceleration, CancellationToken ct = default);
/// <summary>
/// Set profile deceleration cho drive system
/// </summary>
/// <param name="deceleration">Gia tốc giảm tốc (m/s²)</param>
/// <param name="ct">Cancellation token</param>
Task SetDecelerationAsync(double deceleration, CancellationToken ct = default);
}