Nero Firmware Reference

August 26, 2026 · View on GitHub

Supplement to nero_api.md. Full version matrices and behavioral details. The main API manual keeps a short firmware section.

Switch to 中文


Version Evolution (newest first)

Read top to bottom: each row is what changed vs the previous SDK driver.

SDK driverConstantArm firmwareChanges vs previous driver
v121NeroFW.V121≥ 1.21Fixed: move_mit and move_cpv_vel keep the requested velocity sign on every joint. Inherits v120.
v120NeroFW.V1201.20Fixed: get_motor_states returns real velocity (no zeroing). Fixed: get_cpv_vel without joint velocity sign flip. Inherits v112 (CPV, IK, leader/follower, etc.). move_mit / move_cpv_vel still flip velocity sign on joints 1–7 except joint 6.
v112NeroFW.V1121.12New: get_ik_joint_angles; CPV (0x1810x187); set_motion_mode('cpv'). Changed: get_leader_joint_angles0x1550x170. Changed: leader/follower only (Piper-aligned); default follower; CAN push at power-up; set_normal_mode removed (SDK no-op). Inherits v111.
v111NeroFW.V1111.11New: calibrate_joint. Changed: move_mit 12-bit t_ff (±16 N·m all joints); MIT frame without CRC; motion mode encoding; move_p / get_flange_pose without 1.10 pose workaround; get_motor_states only forces velocity = 0 (no current flip).
defaultNeroFW.DEFAULT≤ 1.10Baseline: 8-bit t_ff; per-joint MIT torque ranges; 1.10 pose workaround on move_p / get_flange_pose; get_motor_states forces velocity = 0 and negates current; leader feedback on 0x5010x507. No calibrate_joint, no CPV public APIs.

How to Choose (quick lookup)

Your firmware (from get_firmware())firmeware_versionConstant
1.21 or later"v121"NeroFW.V121
1.20"v120"NeroFW.V120
1.12"v112"NeroFW.V112
1.11"v111"NeroFW.V111
1.10 or earlier"default" (or omit)NeroFW.DEFAULT

APIs with Firmware Requirements

All other public APIs in nero_api.md are available on every supported driver unless noted in their section.

API / groupMinimum SDK driverNotes
get_ik_joint_anglesNeroFW.V112Firmware ≥ 1.12; feedback after move_p / move_l / move_c
calibrate_jointNeroFW.V111Not on DEFAULT
CPV: move_cpv_*, get_cpv_*, set_cpv_*NeroFW.V112Joints 1–7 only; on V120 inherits V112
set_motion_mode('cpv')NeroFW.V112OPTIONS.MOTION_MODE.CPV on V112 / V120; not on DEFAULT / V111
move_mitAll (behavior differs)See MIT parameters by version
set_normal_modeAll (V112 differs)See nero_api.md — set_normal_mode()

MIT (move_mit) Parameters by Version

DriverJointst_ff input range (N·m)t_ff bitsOther
DEFAULT1–71–2: ±24; 3–4: ±16; 5–7: ±88Per-joint scaling before encode
V1111–7All: ±1612v_des sign flip except joint 6 (firmware workaround)
V1121–7Same as V11112Inherits v111 move_mit
V1201–7Same as V11212Inherits v112 move_mit (v_des sign flip except joint 6; not fixed in 1.20)
V1211–7Same as V12012No v_des sign flip

API Availability Matrix (full)

Legend: supported · not in driver · ⚠️ supported with version-specific behavior.

API / capabilityDEFAULT (≤ 1.10)V111 (1.11)V112 (≥ 1.12)
Connect / disconnect, enable / disable, reset
move_j / move_js
move_p / move_l / move_c
get_joint_angles, get_driver_states, limits / crash APIs, etc.
get_ik_joint_angles
move_mit
calibrate_joint
CPV (move_cpv_*, get/set_cpv_*)
get_leader_joint_angles
set_leader_mode / set_follower_mode
set_normal_mode⚠️

Version-Specific Behavior (full)

TopicDEFAULT (≤ 1.10)V111 (1.11)V112 (1.12)V120 (1.20)V121 (≥ 1.21)
move_p / get_flange_pose1.10 pose workaround (send + receive)No workaroundInherits V111Inherits V112Inherits V120
get_motor_statesvelocity = 0; current negatedvelocity = 0 onlyInherits V111Real velocity; no workaroundsInherits V120
move_mit velocityFirmware-specificSign flip for joints ≠ 6Inherits V111Inherits V112No sign flip
move_cpv_vel velocitySign flip for joints ≠ 6Inherits V112No sign flip
get_cpv_velSign flip for joints ≠ 6No sign flipInherits V120
get_leader_joint_angles CAN0x5010x507 per jointSame as DEFAULT0x155 / 0x156 / 0x157 + 0x170Inherits V112Inherits V120
Leader–follower / CAN feedbacknormal + leader + follower; CAN push via set_normal_mode when enabledSame as DEFAULTleader + follower only (Piper-aligned); default follower; CAN push at power-up; set_normal_mode no-opInherits V112Inherits V120
CPVNot implementedNot implementedFull stack; 0x1810x187Inherits V112Inherits V120

Per-Version Quick Reference

Firmware ≥ 1.21 → use NeroFW.V121

  • Inherits all V120 APIs and feedback fixes.
  • move_mit and move_cpv_vel keep the requested velocity sign on every joint.

Firmware 1.20 → use NeroFW.V120

  • Inherits all V112 APIs (IK, CPV, leader/follower).
  • get_motor_states returns real joint velocity.
  • get_cpv_vel without SDK sign correction.
  • move_mit / move_cpv_vel still flip velocity sign on joints 1–7 except joint 6 (firmware not fixed in 1.20).

Firmware 1.12 → use NeroFW.V112

  • get_ik_joint_angles after move_p / move_l / move_c (CAN 0x2AA0x2AD).
  • Use CPV and set_motion_mode('cpv').
  • Leader angles from 0x155 / 0x156 / 0x157 / 0x170.
  • Leader/follower only; CAN push at power-up (see API manual table).

Firmware 1.11 → use NeroFW.V111

  • calibrate_joint available.
  • 12-bit MIT; fixed flange pose (no 1.10 workaround).
  • No CPV APIs.

Firmware ≤ 1.10 → use NeroFW.DEFAULT

  • 8-bit MIT; pose workaround on Cartesian APIs.
  • No calibrate_joint, no CPV.

Nero 固件参考

nero_api.md 的补充文档:完整版本矩阵与行为差异。主手册仅保留简短固件说明。

Switch to English


版本演进(从新到旧)

自上而下阅读:每行表示相对上一档 SDK 驱动的变化

SDK 驱动常量机械臂固件相对上一版的变化
v121NeroFW.V121≥ 1.21修复: move_mitmove_cpv_vel 对所有关节都保持调用者传入的速度符号。继承 v120
v120NeroFW.V1201.20修复: get_motor_states 返回真实 velocity(不再置 0)。修复: get_cpv_vel 不再做关节速度符号翻转。继承 v112(CPV、IK、主从等)。move_mit / move_cpv_vel 仍对 1–7 轴中除第 6 轴外做速度符号 workaround。
v112NeroFW.V1121.12新增: get_ik_joint_angles;CPV(0x1810x187);set_motion_mode('cpv')变更: get_leader_joint_angles0x1550x170变更: 仅主从模式(与 Piper 一致);默认从臂;上电 CAN 推送;取消 set_normal_mode(SDK no-op)。继承 v111
v111NeroFW.V1111.11新增: calibrate_joint变更: move_mit 12-bit t_ff(全关节 ±16 N·m);MIT 帧无 CRC;运动模式编码变更;move_p / get_flange_pose 无 1.10 位姿 workaround;get_motor_states 仅将 velocity 置 0(不再对 current 取反)。
defaultNeroFW.DEFAULT≤ 1.10基线: 8-bit t_ff;分关节 MIT 力矩范围;move_p / get_flange_pose 1.10 位姿 workaround;get_motor_statesvelocity 置 0 且 current 取反;主臂反馈 0x5010x507。无 calibrate_joint、无 CPV 公开 API。

如何选择(速查)

固件版本(get_firmware()firmeware_version常量
1.21 及更新"v121"NeroFW.V121
1.20"v120"NeroFW.V120
1.12"v112"NeroFW.V112
1.11"v111"NeroFW.V111
1.10 及更早"default"(或不填)NeroFW.DEFAULT

有固件要求的 API

nero_api.md 中其余公开 API 在各支持驱动上均可用(除非该 API 小节另有说明)。

API / 分组最低 SDK 驱动说明
get_ik_joint_anglesNeroFW.V112固件 ≥ 1.12move_p / move_l / move_c 后有反馈
calibrate_jointNeroFW.V111DEFAULT
CPV:move_cpv_*get_cpv_*set_cpv_*NeroFW.V112仅 1–7 轴;V120 继承 V112
set_motion_mode('cpv')NeroFW.V112V112 / V120OPTIONS.MOTION_MODEcpvDEFAULT / V111 不含
move_mit均有(行为不同)MIT 分版本参数
set_normal_mode均有(V112 不同)nero_api.md — set_normal_mode()

MIT(move_mit)分版本参数

驱动关节t_ff 输入范围(N·m)t_ff 位数其它
DEFAULT1–71–2:±24;3–4:±16;5–7:±88编码前分关节缩放
V1111–7全关节 ±1612除 6 轴外 v_des 取反(固件 workaround)
V1121–7V111 相同12继承 v111 move_mit
V1201–7V112 相同12继承 v112 move_mit(除第 6 轴外 v_des 取反;1.20 未修复)
V1211–7V120 相同12v_des 不取反

API 支持矩阵(完整)

图例: 支持 · 驱动未实现 · ⚠️ 支持但行为因版本而异。

API / 能力DEFAULT(≤ 1.10)V111(1.11)V112(≥ 1.12)
连接 / 断开、enable / disablereset
move_j / move_js
move_p / move_l / move_c
get_joint_anglesget_driver_states、限位 / 碰撞等
get_ik_joint_angles
move_mit
calibrate_joint
CPV(move_cpv_*get/set_cpv_*
get_leader_joint_angles
set_leader_mode / set_follower_mode
set_normal_mode⚠️

版本差异说明(完整)

主题DEFAULT(≤ 1.10)V111(1.11)V112(1.12)V120(1.20)V121(≥ 1.21)
move_p / get_flange_pose1.10 位姿 workaround(收发)无 workaround继承 V111继承 V112继承 V120
get_motor_statesvelocity = 0current 取反velocity = 0继承 V111真实 velocity;无 workaround继承 V120
move_mit 速度固件特定关节 ≠ 6 时取反继承 V111继承 V112不取反
move_cpv_vel 速度关节 ≠ 6 时取反继承 V112不取反
get_cpv_vel关节 ≠ 6 时符号翻转无符号翻转继承 V120
get_leader_joint_angles CAN0x5010x507 逐轴DEFAULT 相同0x155 / 0x156 / 0x157 + 0x170继承 V112继承 V120
主从 / CAN 反馈正常+主从;使能后 set_normal_mode 开 CAN 推送DEFAULT 相同仅主从(同 Piper);默认从臂;上电 CAN 推送;set_normal_mode no-op继承 V112继承 V120
CPV未实现未实现完整;0x1810x187继承 V112继承 V120

分版本用户速查

固件 ≥ 1.21 → NeroFW.V121

  • 继承 V120 全部 API 和反馈修复。
  • move_mitmove_cpv_vel 对所有关节保持调用者传入的速度符号。

固件 1.20 → NeroFW.V120

  • 继承 V112 全部 API(IK、CPV、主从)。
  • get_motor_states 返回真实关节速度。
  • get_cpv_vel 不再做 SDK 符号修正。
  • move_mit / move_cpv_vel 仍对 1–7 轴中除第 6 轴外做速度符号 workaround(1.20 固件未修复)。

固件 1.12 → NeroFW.V112

  • get_ik_joint_anglesmove_p / move_l / move_c 后可用(CAN 0x2AA0x2AD)。
  • 使用 CPV 及 set_motion_mode('cpv')
  • 主臂关节角来自 0x155 / 0x156 / 0x157 / 0x170
  • 仅主从模式;上电 CAN 推送(见 API 手册表格)。

固件 1.11 → NeroFW.V111

  • 可用 calibrate_joint
  • 12-bit MIT;笛卡尔位姿无 1.10 workaround。
  • 无 CPV API。

固件 ≤ 1.10 → NeroFW.DEFAULT

  • 8-bit MIT;笛卡尔 API 带位姿 workaround。
  • calibrate_joint、无 CPV。