Skip to content

ArmControlOptions(控制选项)#

控制选项(ArmControlOptions)中包含了机械臂控制过程中需要用到的所有参数,定义如下:

ArmControlOptions — 机械臂控制参数完整定义
@dataclass
class ArmControlOptions(ValidatedDataclass):
    """
    Configuration options for robotic arm control.
    """

    eff: list[float] = vec(
        lambda: [8.0],
        elem_min=0.0,
        elem_max=20.0,
        doc="Joint efforts, equals to joint current limits (PVT)",
    )
    torque: list[float] = vec(
        lambda: [10.0],
        elem_min=0.0,
        elem_max=20.0,
        doc="Joint torques (MIT)",
    )
    kp: list[float] = vec(
        lambda: [0.1],
        elem_min=0.0,
        elem_max=5000.0,
        doc="Joint kp (MIT)",
    )
    kd: list[float] = vec(
        lambda: [0.1],
        elem_min=0.0,
        elem_max=5000.0,
        doc="Joint kd (MIT)",
    )
    eef_pos: float = scalar(0.0, min=-0.10, max=1.10)
    eef_eff: float = scalar(8.0, min=0.0, max=20.0)
    eef_torque: float = scalar(10.0, min=0.0, max=20.0)
    eef_kp: float = scalar(0.1, min=0.0, max=5000.0)
    eef_kd: float = scalar(0.1, min=0.0, max=5000.0)
    motion_type: Literal["ptp", "rrt_connect"] = "ptp"
    min_blend_radius: float = scalar(0.005, min=0.001, max=0.1)
    sampling_time: float = scalar(0.01, min=0.01, max=0.5)
    allow_blend_fail: bool = True
    velocity_scaling_factor: float = scalar(0.4, min=0.01, max=1.0)
    acceleration_scaling_factor: float = scalar(0.3, min=0.01, max=1.0)
    force_calc_lin: bool = False
    lin_hard_threshold: float = scalar(10.0, min=0.0, max=1e6)
    lin_interpolate_num: int = scalar(150, min=5, max=1000)
    circ_is_center: bool = False
    allow_planning_time: float = scalar(0.5, min=0.01, max=60.0)
    blocking: bool = False

    def __str__(self) -> str:
        n_d = 4
        max_len = 10
        parts = [
            f"eff={_fmt_seq(self.eff, n_d, max_len)}",
            f"torque={_fmt_seq(self.torque, n_d, max_len)}",
            f"kp={_fmt_seq(self.kp, n_d, max_len)}",
            f"kd={_fmt_seq(self.kd, n_d, max_len)}",
            f"eef_pos={_fmt_float(self.eef_pos, n_d)}",
            f"eef_eff={_fmt_float(self.eef_eff, n_d)}",
            f"eef_torque={_fmt_float(self.eef_torque, n_d)}",
            f"eef_kp={_fmt_float(self.eef_kp, n_d)}",
            f"eef_kd={_fmt_float(self.eef_kd, n_d)}",
            f"motion_type={self.motion_type}",
            f"sampling_time={_fmt_float(self.sampling_time, n_d)}",
            f"min_blend_radius={_fmt_float(self.min_blend_radius, n_d)}",
            f"allow_blend_fail={self.allow_blend_fail}",
            f"velocity_scaling_factor={_fmt_float(self.velocity_scaling_factor, n_d)}",
            f"acceleration_scaling_factor={_fmt_float(self.acceleration_scaling_factor, n_d)}",
            f"force_calc_lin={self.force_calc_lin}",
            f"lin_hard_threshold={_fmt_float(self.lin_hard_threshold, n_d)}",
            f"lin_interpolate_num={self.lin_interpolate_num}",
            f"circ_is_center={self.circ_is_center}",
            f"allow_planning_time={_fmt_float(self.allow_planning_time, n_d)}",
            f"blocking={self.blocking}",
        ]
        return f"ArmControlOptions({', '.join(parts)})"
参数名称 相关控制模式 备注
eff (ARM) PVT 机械臂电机电流阈值
torque (ARM) MIT 机械臂电机力矩
kp (ARM) MIT 机械臂电机kp
kd (ARM) MIT 机械臂电机kd
eef_pos (ARM) SERVO 末端执行器位置
eef_eff (EEF) PVT 末端执行器电流阈值
eef_torque (EEF) MIT 末端执行器力矩
eef_kd (EEF) MIT 末端执行器kd
eef_kp (EEF) MIT 末端执行器kp
motion_type PTP/RRT 选择Planning模式下的规划策略
sampling_time PTP / LIN / WAYPOINT / CIRC / RRT 轨迹采样周期(秒)
allow_blend_fail WAYPOINT 混合失败是否继续规划
velocity_scaling_factor PTP / LIN / WAYPOINT / CIRC / RRT 速度缩放比例
acceleration_scaling_factor PTP / LIN / WAYPOINT / CIRC / RRT 加速度缩放比例
force_calc_lin LIN 遇到奇异点,强制返回 Cartesian 轨迹,可能无法到达
lin_hard_threshold LIN 直线偏差硬阈值
lin_interpolate_num LIN 直线插值点数
circ_is_center CIRC CIRC 中 path 是否为圆弧的圆心
allow_planning_time PTP / LIN / WAYPOINT / CIRC / RRT 最大规划时间
blocking ALL 是否阻塞式运行