FF SDKNavi Docs v0.1.0a0
Quadruped Platform · 四足

Navi 四足机器人 SDK

Navi 是 FF 紧凑型四足机器人产品线(Dev / Mini 多变体)。除了标准的运动与状态能力, 它最大的特色是 session.navi.* 专属命名空间:上百个扩展动作 (鞠躬 / 招手 / 转圈 / 舞蹈)、可深度调节的步态与运动参数、表情与外设控制。

target: NV-<sn> Python ≥ 3.10 134 扩展动作 三变体

01概览与能力矩阵

能力域方法状态说明
motioncmd_vel()✅ live速度控制
stand() / damping()✅ live站立 / 阻尼(内部映射扩展动作)
do_preset()✅ livestand / damping / passive 等模式名
statebattery() / status() / joint_states()✅ live全套遥测
pose()无 SLAM,CapabilityNotSupported
navido_action() / set_gait() / play_emoji()✅ live平台专属扩展,见 扩展动作库
displayset_led()🟡 部分灯效(屏幕走 navi.set_screen()
navigationgoto()🟡 部分对接中
audio / vision / arm / checkin音量走 navi.set_volume();其余本形态不适用
两层 API 怎么选 跨机器人代码用标准能力(motion / state)和 ff_sdk.skills.*Navi 专属玩法(扩展动作 / 步态调参 / 表情)用 session.navi.* —— 后者明确是 platform-specific,换平台不可移植。

02安装

shell — 安装
# 在机器人上(aarch64)
pip install wheels/ff_sdk-0.1.0a0-cp310-cp310-linux_aarch64.whl

# 在 Linux 开发机上(x86_64)
pip install wheels/ff_sdk-0.1.0a0-cp310-cp310-linux_x86_64.whl

python -c "import ff_sdk; print(ff_sdk.__version__)"

Navi 经 WebSocket 与机器人通信,开发机与机器人同一局域网即可控制 —— 这是四个平台里 远程开发体验最顺的一个。

03快速开始

hello_navi.py — 标准能力 + 专属扩展
import asyncio, ff_sdk

async def main():
    async with await ff_sdk.connect("NV-DEMO") as dog:
        print(dog.diagnose())

        # —— 标准能力(跨平台同一套写法)——
        await dog.motion.stand()                 # 站立就绪
        await asyncio.sleep(6)

        await dog.motion.cmd_vel(linear=0.2)     # 前进
        await asyncio.sleep(2)
        await dog.motion.stop()

        battery = await dog.state.battery()
        print(f"电量 {battery.percent:.0%}")

        # —— Navi 专属扩展 ——
        nv = dog.navi
        actions = await nv.list_actions()        # 全部可用扩展动作
        await nv.do_action(20542)                # 招手
        await nv.play_emoji("happy")             # 表情

        await dog.motion.damping()               # 收尾

asyncio.run(main())
解锁顺序 刚开机的机器人先 damping()(阻尼复位)再 stand()(站立就绪), 之后才能行走和做扩展动作。跳过这一步,运动指令可能被底层状态机忽略。

04连接 / 变体 / 配置

变体与 target 前缀

Navi 产品线有三个变体,API 相同,通过 target 前缀(或配置)选择:

变体target 写法说明
Dev(默认 ⭐)NV-<sn>NV-A100-<sn>开发者版四足,扩展动作 / 参数调节全量开放
DevQ(旧款开发版)NV-DevQ-<sn>走兼容控制路径
Mini(消费版)NV-Mini-<sn>面向消费场景的紧凑款

环境变量

变量默认说明
FF_SDK_NAVI_HOST机器人默认地址机器人 IP(接入你的局域网时填)
FF_SDK_NAVI_PORT9090控制通道(WebSocket)端口
FF_SDK_DRY_RUN1 干跑模式
FF_SDK_TRANSPORT_TIMEOUT5.0单次操作超时(秒)
python — Config 指定变体与地址
from ff_sdk import Config

cfg = Config.from_env()
cfg.extra["navi_host"] = "192.168.1.77"
cfg.extra["navi_variant"] = "a100_dev"     # a100_dev | devq | mini
dog = await ff_sdk.connect("NV-DEMO", config=cfg)

05Session 与生命周期

成员类型说明
session.motion / .state / …能力访问器不支持时 raise CapabilityNotSupported
session.navi扩展命名空间仅 Dev 变体;其他变体为 None
session.capabilities()set[str]支持的能力域集合
session.diagnose()DiagnosticReport健康体检(控制通道连通性)
await session.e_stop(reason)紧急停止
await session.close()断开连接
python — navi 命名空间的防御性访问
nv = dog.navi
if nv is None:
    print("此变体不提供扩展命名空间(Mini / DevQ)")
else:
    await nv.do_action(20542)

06motion · 运动控制

方法说明
await motion.cmd_vel(linear, angular, lateral)速度控制(m/s, rad/s)
await motion.stand()站立就绪(内部映射扩展动作,约 6s)
await motion.damping()阻尼 / 软急停(同时清零速度)
await motion.stop()停止移动
await motion.do_preset(name)stand / stand_up / damping / passive / estop 等模式名
python — 行走方阵
import math

await dog.motion.stand()
await asyncio.sleep(6)

for _ in range(4):                              # 走一个正方形
    await dog.motion.cmd_vel(linear=0.25)       # 直行
    await asyncio.sleep(3)
    await dog.motion.cmd_vel(angular=math.pi/4) # 原地转 90°
    await asyncio.sleep(2)

await dog.motion.stop()

07state · 状态遥测

方法状态说明
await state.battery()percent(0–1) / voltage / is_charging
await state.status()RobotStatus 状态机
await state.joint_states()标准关节遥测(names / positions / velocities / efforts
await state.pose()无 SLAM,CapabilityNotSupported

08navi.do_action · 扩展动作库 ★

async navi.do_action(action_id: int, *, hold_time: float = 3.0, priority: int = 25) -> dict async navi.list_actions() -> AvailableActions

Navi 内置 134 个扩展动作(动作库随固件更新可能增减)。 list_actions() 返回当前这台机器的权威动作清单(ID + 名称)—— 写代码前先跑一次它。

常用动作 ID

action_id动作说明
0阻尼 / 急停关节松软,安全态
4站立就绪起立并进入可行走状态
20510鞠躬
20525原地转身 180°周围留空间
20542招手
20567抖肩舞
ID 以运行时为准 不同固件版本动作 ID 可能调整。硬编码 ID 前先 list_actions() 验证; 跨固件代码建议按动作名称查找 ID 再调用。
python — 按名称安全调用动作
actions = await dog.navi.list_actions()

def find_id(actions, keyword: str) -> int | None:
    for act in actions.items:          # (id, name) 列表
        if keyword in act.name:
            return act.id
    return None

wave_id = find_id(actions, "wave")
if wave_id is not None:
    result = await dog.navi.do_action(wave_id, hold_time=4.0)
    print(result)

参数

参数默认说明
hold_time3.0动作保持 / 执行时长(秒),长动作(舞蹈)按需加大
priority25动作优先级,高优先级可抢占进行中的低优先级动作

09navi.set_* · 运动参数调节 ★

实时调节步态与运动风格 —— 这是 Navi 区别于其他平台的“可玩性”所在:

方法参数说明
await navi.set_gait(gait_id)int切换步态
await navi.set_foot_height(height_m)抬脚高度(越高越能跨障,越费电)
await navi.set_user_mode(mode)int用户模式
await navi.set_collision_protect(enabled)bool碰撞保护开关
await navi.set_friction(friction)float地面摩擦系数估计(光滑地面调低防打滑)
await navi.set_jump_distance(distance_m)跳跃距离
await navi.set_jump_angle(angle_rad)弧度跳跃角度

进阶 setter(标注:待真机回归确认)

以下参数接口已定义,消息结构在持续真机验证中 —— 使用时建议小步调整并观察: set_ground_model / set_free_leg / set_swing_traj_type / set_controller_type / set_model_scale / set_swaying_duration / set_swing_duration / set_velocity_decay / set_decelerate

set_raw —— 逃生口

async navi.set_raw(topic: str, msg_type: str, msg: dict) -> None

对 SDK 尚未封装的底层接口直接发原始消息。仅在你明确知道消息结构时使用, 错误结构可能被底层忽略或产生预期外行为。

python — 草地行走调参示例
# 草地:抬高脚 + 保守速度
await dog.navi.set_foot_height(0.08)
await dog.navi.set_collision_protect(True)
await dog.motion.cmd_vel(linear=0.15)

10navi 便利方法 ★

方法说明
await navi.play_emoji(name, hold_time=2.0)播放表情
await navi.set_volume(volume)音量(整数档位)
await navi.self_charging(hold_time=60.0)自主回充
await navi.do_dog_behavior(behavior, hold_time=3.0, **extra)行为模式(撒娇 / 打滚等,按 list_actions 清单)
await navi.set_walking_style(style, **extra)行走风格
await navi.set_motion_params(**params)批量运动参数
await navi.set_screen(**params)屏幕显示控制
await navi.set_fan(duty_cycle=…, enable=…)散热风扇
await navi.smart_action(name, **extra)智能行为入口
python — 表演一段
nv = dog.navi
await nv.play_emoji("happy")
await nv.do_action(20542, hold_time=4.0)    # 招手
await nv.do_action(20567, hold_time=8.0)    # 抖肩舞
await nv.do_action(20510, hold_time=4.0)    # 鞠躬谢幕
await dog.motion.damping()

11跨平台 Skills

python
from ff_sdk import skills

await skills.wave(dog)        # Navi 上自动映射为扩展动作“招手”
await skills.bow(dog)         # → 扩展动作“鞠躬”
await skills.greet(dog, "朋友")

skills 在 Navi 上内部走 navi.do_action(),但调用方完全不用关心 —— 同一行代码换到 Aegis / Futurist 照样跑。

12异常与诊断

异常什么时候抛
FfSdkError所有 SDK 异常的根类
ConnectionError / TransportError / TimeoutErrorWebSocket 连接 / 线路 / 超时
PlatformError底层错误翻译
CapabilityNotSupported能力 / 变体不支持(如 Mini 上访问部分扩展)
EStopActiveError / StateError急停激活 / 状态不允许
python — diagnose 先行
report = dog.diagnose()
print(report)   # 控制通道连通性、变体识别结果

13示例索引

示例内容
01_hello_connect.py第一次连接 + 诊断 + 紧急停止
02_diagnose.py体检报告详解
03_estop.py紧急停止 + 回调 + 重置
cookbook/context_manager.pyasync with 上下文管理
cookbook/safety_watchdog.py安全看门狗
cookbook/multi_robot.py多机器人并发控制
cookbook/graceful_shutdown.py优雅关闭

14FAQ / 排错

现象可能原因解决
动作指令被忽略没走解锁顺序damping()stand(),等站稳后发动作
dog.naviNone变体不是 Dev扩展命名空间仅 Dev 变体提供;用标准 motion 能力
do_action(id) 没反应ID 在该固件不存在 / 被低优先级抢占list_actions() 验证 ID;必要时提高 priority
连不上不在同一局域网 / 端口不通核对 FF_SDK_NAVI_HOST / FF_SDK_NAVI_PORT,ping 通再连
state.pose() 报错无 SLAM预期行为,捕获 CapabilityNotSupported