Skip to content
🤖 AI 助手 / 自动化工具:先读 《AI 助手先读》 《Agent 开发指引》 《生成前信息采集清单》;机器可读入口 /llms.txt;技能包(SKILL)直链:SKILL.md

进阶应用 ​

进阶使用示例,全部通过 7000 端口(伺服跟踪数据通道) 下发点位。三个示例解决的是同一类问题——上位机实时给点、控制器跟着动,区别在于点位以什么组织形式交给控制器、以及由谁负责插补平滑。

⚠️ 安全提示: 本节的运动示例会导致机器人实际运动。请在使用前仔细阅读各页面顶部的安全警告,确保工作空间安全、急停可用。

示例列表 ​

#示例说明
1使用 servo_move() 来进行跟踪运动一次给一组带 timeStamp 的轨迹点,控制器按时间戳平滑下发
2使用 servo_point_position_motion_control() 来进行伺服控制运动逐周期把点位直接下发伺服,12 维(机器人 7 + 外部轴 5)
3使用 servoJ 进行关节控制逐周期下发 7 维目标关节角,控制器按 v/a/j 约束平滑跟随

三个示例的区别 ​

对比项1. servo_move()2. servo_point_position_motion_control()3. servoJ
给点方式一次给一批点(可分批传)每帧给若干点,sum / count 累加到齐才动每次给一个 7 维目标关节角
数据维度7(关节角或笛卡尔坐标,由 coord 决定)12(机器人 7 + 外部轴 5)7(关节角,固定作用于机器人 1)
是否带时间戳必需,每点给到达时间(ms)无无,靠下发周期
平滑由谁做控制器按 timeStamp 做平滑不做平滑,点位原样下发伺服控制器按 vmax / amax / jmax 约束平滑
外部轴不支持支持(后 5 维)不支持
进入 / 退出无模式开关,直接调 servo_move需先 enable_servo_position_motion_control(fd7000, 1)需先 open_servoJ,收尾必须 close_servoJ
额外前置条件示教器需运行含外部点指令的作业文件伺服点位运动控制已开启清错 → 伺服就绪 → 上电,get_servo_state 为 3
端口700070007000(数据)+ 6001(上下电 / 读坐标)
时机参考节奏由 timeStamp 决定(示例每点 5 ms)节奏由上位机通讯周期决定(示例每帧最多 600 点)官方示例 10 ms / 点

一句话概括 ​

  • servo_move:你给我一段带时间的轨迹,控制器自己按时间插补平滑。
  • servo_point_position_motion_control:你按周期把点原样透传给伺服,带外部轴,不平滑。
  • servoJ:你在关节空间逐周期喂点,控制器按速度 / 加速度 / 加加速度约束跟住。

分别用在什么场景 ​

servo_move():固定流程作业中夹杂实时生成的轨迹 ​

适用:

  • 现场有一条固定的工艺流程(回原点、取放料、IO 时序等),其中某一段轨迹需要实时生成(传感器、视觉或上位机算法给点):作业文件负责流程骨架,实时轨迹段由上位机经 servo_move() 下发
  • 已经算出整段轨迹点,每一点都能给出到达时刻(timeStamp,单位 ms),希望控制器负责插补平滑,上位机不必硬实时逐周期喂点(可以一次传完,也可以分批传)
  • 关节空间(coord = 0)或笛卡尔空间(coord = 1)都可以

不适用:需要机器人本体与外部轴联动;要求点位不经控制器插补、原样到伺服;或现场不允许有正在运行的作业文件(该接口必须靠作业里的外部点指令才会运动)。

关键参数(ServoMovePara,取值以头文件 nrc_interface_parameter.h 注释为准):

参数取值含义
targetMode0-独立点 / 1-连续轨迹点与点之间是否连成一条轨迹
sendMode0-一次传输完全部轨迹 / 1-一次传输部分点位整段一次给完,还是分批给
runMode0-接收完再运动 / 1-边接收边运动收齐再动,还是收到即动
clearBuffertrue / false是否清除之前发送的、未开始插补计算的点位
sum / count总传输次数 / 当前是第几次分批传输时的帧计数
coord0-关节 / 1-直角点位是关节角还是笛卡尔坐标
size本次传输的点位数与 pos、axisvel、axisacc、timeStamp 长度对应

注意:需与作业文件配合——示教器上运行写有外部点指令的作业,上位机下发的点位才会被执行。因此它一般不是"独立跑一段轨迹"的接口,而是嵌在固定流程作业里的实时轨迹段。

servo_point_position_motion_control():逐周期原样下发,需要外部轴 ​

适用:

  • 上位机每个通讯周期算出一帧点位,要求原样下发到伺服(不要在控制器侧再做一层插补平滑)
  • 机器人本体与外部轴(变位机、导轨等)要一起走,点位必须 12 维一把下发
  • 一帧点位较多时效率高(示例按每帧最多 600 点组织);也可以 sum = 1 单点逐帧发

注意:

  • 先调 enable_servo_position_motion_control(fd7000, 1) 开启伺服点位运动控制,再下发点位
  • sum 是总帧数、count 从 1 开始累加,只有 sum == count 时这批点位才开始运动;因此 sum = 1 才是"发一个走一个"
  • 出现「发送点位不运动」或「缓存区已满」时,用 end = 1 发一帧清掉未插补的点位

servoJ:关节空间逐周期跟随,要求平滑 ​

适用:

  • 视觉伺服、力控、传感器引导、遥操作、在线纠偏这类"外部实时给点"的关节空间跟随
  • 给点有噪声或周期有抖动时:控制器按 vmax / amax / jmax 约束平滑,实际运动比目标点更连续

注意:

  • 下发的是目标绝对关节角,增量在本地累加后再下发
  • 每周期增量要与约束匹配(vmax = 10°/s、周期 10 ms 时每周期不超过 0.1°)
  • 必须在独立线程里按固定周期发点,并且一定要 close_servoJ 收尾,否则机器人会停在跟踪模式
  • 该系列接口固定作用于机器人 1,没有 _robot 变体

选型速查 ​

你的情况用哪个
固定流程作业里要插入一段实时生成的轨迹(点位带时间戳)servo_move()
逐周期给点,且需要外部轴同步 / 要求点位原样透传servo_point_position_motion_control()
逐周期给关节角,要求平滑跟随(视觉、力控、遥操作、纠偏)servoJ
普通点到点、直线运动,不需要逐周期喂点robot_movj / robot_movel 等,见"基础应用"