实时运动控制接口

1. robot_movej - 关节空间运动到目标位姿

方法: move_joint(socket_fd: int, move_cmd: MoveCmd)

功能描述: 通过裸数据直接下发控制指令,驱动机械臂所有关节实时、同步运动至指定的目标角度(在线点对点控制)。

参数:

  • socket_fd:已连接的机械臂控制器句柄,整型格式(int)。
  • move_cmd(底层输出参数):运动控制属性结构体容器(对应代码中的 nrc.MoveCmd())。由方法内部自动创建并配置以下核心数组成员,无需外部手工创建:
    • targetPosValue:实时关节角度向量。内部通过 resize(7) 强制扩容至 7 位空间(前 6 轴对应本体关节,第 7 轴预留作为外部扩展轴补零),以匹配底层通信帧结构。
    • coord:坐标系选择类型,固定赋值为 0(代表关节空间模式)。
    • velocity:实时运动速度百分比(1 ~ 100),整型(int),默认 20。
    • acc / dec:运动加减速因子,整型(int),默认 50。
    • pl:轨迹过渡平滑度等级,整型(int),默认 0。

返回值:

  • bool:执行结果布尔值
    • True:指令下发成功。底层接口返回 0,控制器成功接收并将数据写入伺服驱动层。
    • False:指令下发失败。句柄无效、轴数据超出物理软限位、控制器未正常上电或使能、底层接口返回非 0 错误码或触发通信异常。

使用示例:

Python
import nrc_interface as nrc
import time

# 1. 实例化官方定义的实时运动控制容器
move_cmd = nrc.MoveCmd()

# 2. 精准配置核心测试参数(以 6 轴本体无外部轴为例开辟 7 位空间)
move_cmd.targetPosValue.resize(7)
test_angles = [0.0, 15.0, -30.0, 0.0, 45.0, 0.0, 0.0]

for i in range(7):
    move_cmd.targetPosValue[i] = test_angles[i]

move_cmd.coord = 0                    # 核心设置:0 代表关节坐标系
move_cmd.velocity = 20                 # 实时控制速度
move_cmd.acc = 50
move_cmd.dec = 50
move_cmd.pl = 0                      # 精准到位不平滑过渡

# 3. 调用底层实时控制接口,直接驱动伺服
ret = nrc.robot_movej(socket_fd, move_cmd)

# 4. 校验指令下发结果并返回布尔状态
if ret == 0:
    print(f"成功: 实时运动指令成功传达,机械臂正运动至 {test_angles[:6]}")
    return True
else:
    print("错误: 实时运动控制下发失败")
    return False

time.sleep(10)

# 完整关节空间运动到目标位姿测试代码见示例3

2. robot_movel - 笛卡尔空间直线运动到目标位姿

方法: move_linear(socket_fd: int, move_cmd: MoveCmd)

功能描述: 通过裸数据直接下发控制指令,驱动机械臂末端工具中心点(TCP)在笛卡尔空间内,严格沿直线轨迹实时运动至指定的目标直角坐标点。

参数:

  • socket_fd:已连接的机械臂控制器句柄,整型格式(int)。
  • move_cmd(底层输出参数):运动控制属性结构体容器(对应代码中的 nrc.MoveCmd())。由方法内部自动创建并配置以下核心数组成员,无需外部手工创建:
    • targetPosValue:实时空间直角坐标向量。内部通过 resize(7) 强制扩容至 7 位空间(前 6 位对应直角坐标的 [X, Y, Z, Rx, Ry, Rz],第 7 位预留作为外部扩展轴并自动补零),以匹配底层实时通信帧结构。
    • coord:坐标系选择类型,固定赋值为 0(代表官方示例指定的基坐标系模式)。
    • velocity / velocitySync:实时直线运动速度与双保险同步控速参数,整型(int),默认 20。
    • acc / dec:运动加减速因子,整型(int),默认 50。
    • pl:轨迹过渡平滑度等级,整型(int),默认 0。

返回值:

  • bool:执行结果布尔值
    • True:指令下发成功。底层接口返回 0,控制器成功接收并将空间直线插补轨迹数据下发至伺服层。
    • False:指令下发失败。句柄无效、坐标超出物理工作空间(奇异点或不可达)、控制器未正常上电、底层接口返回非 0 错误码或触发通信异常。

使用示例:

Python
import nrc_interface as nrc
import time

# 1. 实例化官方定义的实时运动控制容器
move_cmd = nrc.MoveCmd()

# 2. 精准配置核心测试参数(以基坐标系下空间直线运动为例,开辟 7 位空间)
move_cmd.targetPosValue.resize(7)
# 测试目标直角坐标数据 [X, Y, Z, Rx, Ry, Rz]
test_coords = [350.0, -50.0, 280.0, 180.0, 0.0, 45.0, 0.0]

for i in range(7):
    move_cmd.targetPosValue[i] = test_coords[i]

move_cmd.coord = 0                    # 核心设置:0 代表基坐标系
move_cmd.velocity = 20                 # 实时直线运行速度
move_cmd.velocitySync = 20              # 控速双保险同步
move_cmd.acc = 50
move_cmd.dec = 50
move_cmd.pl = 0                      # 精准到位,直线终点不留过渡弧度

# 3. 调用底层实时直线控制接口
ret = nrc.robot_movel(socket_fd, move_cmd)

# 4. 校验指令下发结果并返回布尔状态
if ret == 0:
    print(f"成功: 实时直线运动指令成功传达,机械臂末端正奔向 {test_coords[:6]}")
    return True
else:
    print("错误: 实时直线运动控制下发失败")
    return False

time.sleep(10)

# 完整笛卡尔空间直线运动到目标位姿测试代码见示例4