linuxcnc中的运动模式

在LinuxCNC中,control.c源代码中使用了多个EMCMOT_MOTION_*状态,它们定义了运动控制的不同模式。这些模式用于控制运动组件的行为。以下是每个模式的详细解释:

1. EMCMOT_MOTION_FREE

EMCMOT_MOTION_FREE 表示自由运动模式。在这个模式下,每个关节都是分离的,允许关节自由移动。

代码示例
case EMCMOT_MOTION_FREE:
    // 所有关节运动,采用simple_tp轨迹规划
    for (joint_num = 0; joint_num < ALL_JOINTS; joint_num++) {
        // 规划位置
        simple_tp_update(&(joint->free_tp), servo_period );
    }
    // 将关节位置转换为笛卡尔坐标系位置
    kinematicsForward(positions, &emcmotStatus->carte_pos_cmd, &fflags, &iflags);
    break;

2. EMCMOT_MOTION_COORD

EMCMOT_MOTION_COORD 表示协调运动模式。在这个模式下,运动轴按照G代码指令协调运动。这是标准的运动控制模式,用于执行复杂的多轴运动,例如铣削或车削操作。

代码示例
case EMCMOT_MOTION_COORD:
    // 按照G代码指令协调运动
    while (cubicNeedNextPoint(&(joints[0].cubic))) {
    	/* run coordinated trajectory planning cycle */
    	tpRunCycle(&emcmotInternal->coord_tp, period);
		/* get new commanded traj pos */
		tpGetPos(&emcmotInternal->coord_tp, &emcmotStatus->carte_pos_cmd);
		/* OUTPUT KINEMATICS - convert to joints in local array */
        result = kinematicsInverse(&emcmotStatus->carte_pos_cmd, positions,
            &iflags, &fflags);
    }
    break;

3. EMCMOT_MOTION_TELEOP

EMCMOT_MOTION_TELEOP 表示遥控模式。在这个模式下,运动轴由手动控制设备(如手持控制器或操作面板)直接控制。这通常用于手动操作或调试机器。

代码示例
case EMCMOT_MOTION_TELEOP:
    // 从手动控制设备获取指令
    for (int i = 0; i < num_axes; i++) {
        // 读取手动控制输入
        axis_sync_carte_pos_to_teleop_tp(+1, pcmd_p); // teleop
        /* OUTPUT KINEMATICS - convert to joints in local array */
        result = kinematicsInverse(&emcmotStatus->carte_pos_cmd, positions, &iflags, &fflags);
    }
    break;

4. EMCMOT_MOTION_DISABLED

EMCMOT_MOTION_DISABLED 表示禁用运动模式。在这个模式下,所有运动功能被禁用,运动轴处于锁定状态。通常用于安全原因或系统初始化阶段。

代码示例
case EMCMOT_MOTION_DISABLED:
    	/* set position commands to match feedbacks, this avoids
        disturbances and/or following errors when enabling */
        emcmotStatus->carte_pos_cmd = emcmotStatus->carte_pos_fb;
        for (joint_num = 0; joint_num < ALL_JOINTS; joint_num++) {
            /* point to joint struct */
            joint = &joints[joint_num];
            /* save old command */
            joint->pos_cmd = joint->pos_fb;
            /* set joint velocity and acceleration to zero */
            joint->vel_cmd = 0.0;
            joint->acc_cmd = 0.0;
        }
    break;

总结

在LinuxCNC的control.c源代码中,这些EMCMOT_MOTION_*状态用于控制运动组件的行为:

  • EMCMOT_MOTION_FREE:自由运动模式,单独控制每个关节的运动。
  • EMCMOT_MOTION_COORD:协调运动模式,按照G代码指令进行多轴协调运动。
  • EMCMOT_MOTION_TELEOP:遥控模式,由手动控制设备直接控制运动轴。
  • EMCMOT_MOTION_DISABLED:禁用运动模式,所有运动功能被禁用。

每个模式都有其特定的用途和行为,确保系统在不同的操作条件下能够正确控制运动轴。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值