droneforge/nimbus_sdk
GitHub: droneforge/nimbus_sdk
Nimbus SDK 是一个面向自主无人机的可视化 Agent 开发与实时部署平台,通过节点式编排和表达式编程让用户快速构建具备 AI 视觉感知能力的自主飞行行为。
Stars: 223 | Forks: 20
# Droneforge SDK -- App 体验
## 登录界面
首先是登录界面。您可以在一分钟内创建一个账户。我们要求您创建账户,以便您的 agent、运行记录和设置可以在不同设备和升级时同步。这也使得与社区共享 agent 并在稍后取回它们成为可能。
如果您已有账户,登录后即可进入主工作区。
## Build 选项卡
这是您创建 agent 的地方。左侧边栏是您的 agent 列表。“+”按钮用于添加新 agent。点击侧边栏中的任意 agent 可将其加载到编辑器中。如果您稍后想要飞行特定的 agent,请在部署前确保在此处选中了它。
## Build 按钮
您将在构建视图中看到一组简短的操作按钮。以下是它们的功能:
- Add node(添加节点):向您的 agent 添加一个新的构建块。
- Vision modes(视觉模式):您可以在此处专门选择要与您的 agent 实时运行的 AI 模型。它可以开启或关闭特定模型的推理。
- Download(下载):获取您的 agent 文件,以便您共享或备份。
- Save(保存):写入您的最新更改。请养成在切换选项卡之前进行保存的习惯。
## 表达式
表达式是您告诉 agent 该做什么的方式。将它们想象成简短、清晰的指令,将输入(如传感器)连接到输出(如控制)。如果您使用过电子表格或基本脚本编写,这会感觉很熟悉。
连接是节点之间的链接。当您将一个模块连接到另一个模块时,您是在说“将此输出用作该输入”。您将看到模块之间有一条线,因此您始终知道什么在向什么提供数据。
随着 SDK 的发展,语法和可用函数将不断扩展,但工作流程保持不变:创建一个模块,连接它,并在表达式中描述其行为。如果您不确定,可以从一个简单的表达式开始,然后逐步构建。
这是用简明语言编写的表达式指南,包含您可以引用的内容及其求值方式。
### 快速规则
- 表达式可以是单个公式,例如 `input * 0.5`,它将 `input` 值减半。
- 您也可以直接分配输出:`roll = 992; throttle = 200`。使用分号可以在一个模块中执行多个分配。
- 使用括号控制操作顺序,例如 `(a + b) * 2`。
### 输出命名(值的落脚点)
您可以通过两种方式写入输出:
- 使用您的端口名称:`ax = ...`、`out_roll = ...`,或任何模块输出被命名的名称。
- 使用标准控制名称:`roll`、`pitch`、`yaw`、`throttle`、`aux1`、`aux2`。
### 控制输出基础 (roll, pitch, yaw, throttle)
这四个是核心控制输出。它们都使用相同的 CRSF 范围:
- 范围是 172 到 1811。
- 低油门 (Throttle low) 为 172。
- Roll、pitch 和 yaw 以 992 为中心。
- 高于 992 的值向右/向前/顺时针推;低于 992 的值向左/向后/逆时针推。
### 输入和参数(您可以读取的内容)
输入按名称到达,因此您可以直接引用它们,例如 `speed` 或 `error`。您还可以获取:
- 您在 UI 中定义的任何模块参数(按键名)。
### 内置常量
- `pi` 或 `PI`
- 飞行模式值:`angle`、`horizon`、`acro` 必须在控制节点中设置为 aux2 声明。
### 时间和电池
- `time`(此节点开始运行以来的秒数)
- `battery` 或 `battery_level`(百分比)
- `battery_voltage`(伏特)
### 姿态和 IMU
- `attitude_roll`、`attitude_pitch`、`attitude_yaw`(度)
- `sensor_roll`、`sensor_pitch`、`sensor_yaw`(姿态的别名)
### 视觉目标(当前帧)
- `target_x`、`target_y`(目标中心)
- `target_width`、`target_height`、`target_diag`
- `target_confidence`
- `target_visible`(1 或 0)
### 视觉目标(历史记录)
- `target_x_last_n`、`target_y_last_n`
- `target_width_last_n`、`target_height_last_n`、`target_diag_last_n`
- `target_confidence_last_n`
- `target_visible_last_n`(1 或 0)
- `frames_since_detection`
### 高度估算 (VIHO)
- `floor_distance`、`ceiling_distance`
- `height_data_valid`(1 或 0)
- `viho_height`(天花板减去地板)
### 深度导航
- `nav_target_x`、`nav_target_y`、`nav_max_depth`
- `nav_grid_row`、`nav_grid_col`
- `nav_data_valid`(1 或 0)
- `nav_left_depth`、`nav_right_depth`、`nav_center_depth`
### 光流
- `flow_x`、`flow_y`、`flow_magnitude`、`flow_angle`
- `flow_valid`(1 或 0)
### 测距仪
- `rangefinder_distance`、`rangefinder_strength`
- `rangefinder_valid`(1 或 0)
### 速度、加速度、高度
- `vel_x`、`vel_y`、`vel_z`、`vel_valid`(1 或 0)
- `accel_x`、`accel_y`、`accel_z`、`accel_valid`(1 或 0)
- `altitude`、`altitude_valid`(1 或 0)
### 光学范围 (optrange)
- `optrange_distance`
- `optrange_velX`、`optrange_velY`、`optrange_vz_measured`
- `optrange_valid`(1 或 0)
### 可用运算符
- 数学:`+ - * /`
- 比较:`== != < <= > >=`
- 逻辑:`&&`(与),`||`(或)
### 函数(附简要说明)
- `if(condition, true_value, false_value)`
- `lin(start, end, duration)` 随时间从起始值斜坡变化到结束值
- `pid(setpoint, process_variable, kp, ki, kd [, max_output])`
- `mem(value [, condition [, reset [, edge_once]]])` 存储并保持一个值
- `once(expr)` 仅求值一次,然后将其缓存
- `acceleration(desired_accel [, motor_efficiency])` 返回达到该垂直加速度所需的油门值
- `rand()` 随机生成 0..1 之间的值
- `randn()` 随机生成正态分布值(均值为 0,标准差为 1)
- `randint(max)` 整数 0..max-1
- `randrange(max)` 浮点数 0..max
- `sin`、`cos`、`tan`、`sqrt`、`abs`、`floor`、`ceil`、`sign`、`min(a,b)`、`max(a,b)`
### 小型实用示例
将简单数学运算输出到输出 0(这会将输入减半):
```
input * 0.5
```
带有赋值的控制输出:
```
roll = 992; pitch = 992; yaw = 992; throttle = 200
```
在目标可见时将其居中:
```
yaw = pid(320, target_x, 0.8, 0.0, 0.1, 300)
```
2 秒内的平滑斜坡:
```
throttle = lin(172, 600, 2.0)
```
在目标第一次出现时锁存标志:
```
aux1 = mem(1800, target_visible, 0, 1)
```
随机悬停微调(仅求值一次):
```
roll = once(randrange(50)) - 25
```
## 部署您的 Agent
当您准备好飞行时,打开 Deploy 选项卡。您加载的 agent 显示在左上角。如果它不是正确的那个,请返回 Build 并选择它。
如果您通过表达式解锁无人机,请在按下播放键之前确保这些条件正确无误。
点击 Play 以部署加载的 agent。点击 Pause 以停止它。如果您有安全开关或紧急停止按钮,请始终将手放在其上。
## Deploy 选项卡
这是您的实时控制和监控视图。
- 视频画面:如果画面是黑色的,请跳至下面的 VRX Controls。
- Nimbus 连接指示灯:右上角。如果它不是绿色的,说明您未连接。
- 四通道状态:右侧。这确认您的控制通道已激活。
- 无人机配置文件:设置无人机的质量和 KV,以确保物理特性正确。
- Play 和 Pause:启动和停止活动的 agent。
## VRX 控制
使用这些控件将 Nimbus 连接到您的无人机。
- Bind(绑定):通过拔下并重新插入三次,使您的无人机进入绑定模式。您应该会看到快速闪烁三次。当您看到闪烁变为单次闪烁时,表示 Nimbus 已连接,点击 Bind。
- Scan(扫描):这将在 5.8 GHz 频段中循环,直到找到您无人机的传输信号。
## Flight 选项卡
使用此选项卡查看遥测数据和过去的飞行记录。您可以下载日志并使用它们来训练新模型或调试行为。
## 社区选项卡
这是您共享 agent 和浏览其他人构建的内容的地方。如果您发现有用的东西,可以下载它并将其变成您自己的。
## Build 选项卡
这是您创建 agent 的地方。左侧边栏是您的 agent 列表。“+”按钮用于添加新 agent。点击侧边栏中的任意 agent 可将其加载到编辑器中。如果您稍后想要飞行特定的 agent,请在部署前确保在此处选中了它。
## Build 按钮
您将在构建视图中看到一组简短的操作按钮。以下是它们的功能:
- Add node(添加节点):向您的 agent 添加一个新的构建块。
- Vision modes(视觉模式):您可以在此处专门选择要与您的 agent 实时运行的 AI 模型。它可以开启或关闭特定模型的推理。
- Download(下载):获取您的 agent 文件,以便您共享或备份。
- Save(保存):写入您的最新更改。请养成在切换选项卡之前进行保存的习惯。
## 表达式
表达式是您告诉 agent 该做什么的方式。将它们想象成简短、清晰的指令,将输入(如传感器)连接到输出(如控制)。如果您使用过电子表格或基本脚本编写,这会感觉很熟悉。
连接是节点之间的链接。当您将一个模块连接到另一个模块时,您是在说“将此输出用作该输入”。您将看到模块之间有一条线,因此您始终知道什么在向什么提供数据。
随着 SDK 的发展,语法和可用函数将不断扩展,但工作流程保持不变:创建一个模块,连接它,并在表达式中描述其行为。如果您不确定,可以从一个简单的表达式开始,然后逐步构建。
这是用简明语言编写的表达式指南,包含您可以引用的内容及其求值方式。
### 快速规则
- 表达式可以是单个公式,例如 `input * 0.5`,它将 `input` 值减半。
- 您也可以直接分配输出:`roll = 992; throttle = 200`。使用分号可以在一个模块中执行多个分配。
- 使用括号控制操作顺序,例如 `(a + b) * 2`。
### 输出命名(值的落脚点)
您可以通过两种方式写入输出:
- 使用您的端口名称:`ax = ...`、`out_roll = ...`,或任何模块输出被命名的名称。
- 使用标准控制名称:`roll`、`pitch`、`yaw`、`throttle`、`aux1`、`aux2`。
### 控制输出基础 (roll, pitch, yaw, throttle)
这四个是核心控制输出。它们都使用相同的 CRSF 范围:
- 范围是 172 到 1811。
- 低油门 (Throttle low) 为 172。
- Roll、pitch 和 yaw 以 992 为中心。
- 高于 992 的值向右/向前/顺时针推;低于 992 的值向左/向后/逆时针推。
### 输入和参数(您可以读取的内容)
输入按名称到达,因此您可以直接引用它们,例如 `speed` 或 `error`。您还可以获取:
- 您在 UI 中定义的任何模块参数(按键名)。
### 内置常量
- `pi` 或 `PI`
- 飞行模式值:`angle`、`horizon`、`acro` 必须在控制节点中设置为 aux2 声明。
### 时间和电池
- `time`(此节点开始运行以来的秒数)
- `battery` 或 `battery_level`(百分比)
- `battery_voltage`(伏特)
### 姿态和 IMU
- `attitude_roll`、`attitude_pitch`、`attitude_yaw`(度)
- `sensor_roll`、`sensor_pitch`、`sensor_yaw`(姿态的别名)
### 视觉目标(当前帧)
- `target_x`、`target_y`(目标中心)
- `target_width`、`target_height`、`target_diag`
- `target_confidence`
- `target_visible`(1 或 0)
### 视觉目标(历史记录)
- `target_x_last_n`、`target_y_last_n`
- `target_width_last_n`、`target_height_last_n`、`target_diag_last_n`
- `target_confidence_last_n`
- `target_visible_last_n`(1 或 0)
- `frames_since_detection`
### 高度估算 (VIHO)
- `floor_distance`、`ceiling_distance`
- `height_data_valid`(1 或 0)
- `viho_height`(天花板减去地板)
### 深度导航
- `nav_target_x`、`nav_target_y`、`nav_max_depth`
- `nav_grid_row`、`nav_grid_col`
- `nav_data_valid`(1 或 0)
- `nav_left_depth`、`nav_right_depth`、`nav_center_depth`
### 光流
- `flow_x`、`flow_y`、`flow_magnitude`、`flow_angle`
- `flow_valid`(1 或 0)
### 测距仪
- `rangefinder_distance`、`rangefinder_strength`
- `rangefinder_valid`(1 或 0)
### 速度、加速度、高度
- `vel_x`、`vel_y`、`vel_z`、`vel_valid`(1 或 0)
- `accel_x`、`accel_y`、`accel_z`、`accel_valid`(1 或 0)
- `altitude`、`altitude_valid`(1 或 0)
### 光学范围 (optrange)
- `optrange_distance`
- `optrange_velX`、`optrange_velY`、`optrange_vz_measured`
- `optrange_valid`(1 或 0)
### 可用运算符
- 数学:`+ - * /`
- 比较:`== != < <= > >=`
- 逻辑:`&&`(与),`||`(或)
### 函数(附简要说明)
- `if(condition, true_value, false_value)`
- `lin(start, end, duration)` 随时间从起始值斜坡变化到结束值
- `pid(setpoint, process_variable, kp, ki, kd [, max_output])`
- `mem(value [, condition [, reset [, edge_once]]])` 存储并保持一个值
- `once(expr)` 仅求值一次,然后将其缓存
- `acceleration(desired_accel [, motor_efficiency])` 返回达到该垂直加速度所需的油门值
- `rand()` 随机生成 0..1 之间的值
- `randn()` 随机生成正态分布值(均值为 0,标准差为 1)
- `randint(max)` 整数 0..max-1
- `randrange(max)` 浮点数 0..max
- `sin`、`cos`、`tan`、`sqrt`、`abs`、`floor`、`ceil`、`sign`、`min(a,b)`、`max(a,b)`
### 小型实用示例
将简单数学运算输出到输出 0(这会将输入减半):
```
input * 0.5
```
带有赋值的控制输出:
```
roll = 992; pitch = 992; yaw = 992; throttle = 200
```
在目标可见时将其居中:
```
yaw = pid(320, target_x, 0.8, 0.0, 0.1, 300)
```
2 秒内的平滑斜坡:
```
throttle = lin(172, 600, 2.0)
```
在目标第一次出现时锁存标志:
```
aux1 = mem(1800, target_visible, 0, 1)
```
随机悬停微调(仅求值一次):
```
roll = once(randrange(50)) - 25
```
## 部署您的 Agent
当您准备好飞行时,打开 Deploy 选项卡。您加载的 agent 显示在左上角。如果它不是正确的那个,请返回 Build 并选择它。
如果您通过表达式解锁无人机,请在按下播放键之前确保这些条件正确无误。
点击 Play 以部署加载的 agent。点击 Pause 以停止它。如果您有安全开关或紧急停止按钮,请始终将手放在其上。
## Deploy 选项卡
这是您的实时控制和监控视图。
- 视频画面:如果画面是黑色的,请跳至下面的 VRX Controls。
- Nimbus 连接指示灯:右上角。如果它不是绿色的,说明您未连接。
- 四通道状态:右侧。这确认您的控制通道已激活。
- 无人机配置文件:设置无人机的质量和 KV,以确保物理特性正确。
- Play 和 Pause:启动和停止活动的 agent。
## VRX 控制
使用这些控件将 Nimbus 连接到您的无人机。
- Bind(绑定):通过拔下并重新插入三次,使您的无人机进入绑定模式。您应该会看到快速闪烁三次。当您看到闪烁变为单次闪烁时,表示 Nimbus 已连接,点击 Bind。
- Scan(扫描):这将在 5.8 GHz 频段中循环,直到找到您无人机的传输信号。
## Flight 选项卡
使用此选项卡查看遥测数据和过去的飞行记录。您可以下载日志并使用它们来训练新模型或调试行为。
## 社区选项卡
这是您共享 agent 和浏览其他人构建的内容的地方。如果您发现有用的东西,可以下载它并将其变成您自己的。
标签:Agent开发, AI智能体, AI模型, Droneforge, Nimbus, 云同步, 传感器融合, 可视化编程, 实时推理, 工作空间, 开源, 无人机, 无人机控制, 机器人学, 登录界面, 社区分享, 自主系统, 节点编辑器, 表达式, 视觉模式, 计算机视觉, 飞控