1.lift_up - 升降上升
方法: ctrl.lift_up(spd)
C++ 签名: bool lift_up(float spd);
参数:
spd:速度值,float 类型,单位:mm/s,正速度表示上升
返回值:
使用示例:
C++
#include "fd_api/control.h"
#include <cstdio>
int main() {
fd_robot::Control ctrl;
fd_robot::Control::Options opts;
opts.node_name = "fd_api_control";
if (!ctrl.Init(opts)) {
return 1;
}
// 以速度 0.5 上升(单位 mm/s)
bool ok = ctrl.lift_up(0.5f);
if (ok) {
printf("上升指令发送成功\n");
} else {
printf("上升指令发送失败\n");
}
return 0;
}
注意: 速度模式下,升降驱动在约 1s 内未再收到速度命令会自行停止;上位机须 周期性调用(建议间隔 小于 500ms),单次调用不足以维持连续升降。
2.lift_down - 升降下降
方法: ctrl.lift_down(spd)
C++ 签名: bool lift_down(float spd);
参数:
spd:速度值,float 类型,单位:mm/s,负速度表示下降
返回值:
使用示例:
C++
#include "fd_api/control.h"
#include <cstdio>
int main() {
fd_robot::Control ctrl;
fd_robot::Control::Options opts;
opts.node_name = "fd_api_control";
if (!ctrl.Init(opts)) {
return 1;
}
// 以速度 0.3 下降(单位 mm/s)
bool ok = ctrl.lift_down(-0.3f);
if (ok) {
printf("下降指令发送成功\n");
} else {
printf("下降指令发送失败\n");
}
return 0;
}
注意: 与 lift_up 相同,速度模式下需周期性调用以维持连续下降。
3.lift_set_pos - 升降位置控制
方法: ctrl.lift_set_pos(spd, pos_mm)
C++ 签名: bool lift_set_pos(float spd, float pos_mm);
参数:
spd:速度值,float 类型,单位:mm/s
pos_mm:目标位置,float 类型,单位:毫米 (mm),为相对于原点的位置
返回值:
使用示例:
C++
#include "fd_api/control.h"
#include <cstdio>
int main() {
fd_robot::Control ctrl;
fd_robot::Control::Options opts;
opts.node_name = "fd_api_control";
if (!ctrl.Init(opts)) {
return 1;
}
// 以速度 0.2 移动到 100mm 位置
bool ok = ctrl.lift_set_pos(0.2f, 100.0f);
if (ok) {
printf("位置控制指令发送成功\n");
} else {
printf("位置控制指令发送失败\n");
}
return 0;
}
注意: 位置控制基于原点(可调用 lift_set_orig 设置)的相对位置,指定位置后电机在无中途打断的情况下移动到目标位置即停止。
4.lift_stop - 升降停止
方法: ctrl.lift_stop()
C++ 签名: bool lift_stop();
参数:
返回值:
使用示例:
C++
#include "fd_api/control.h"
#include <cstdio>
int main() {
fd_robot::Control ctrl;
fd_robot::Control::Options opts;
opts.node_name = "fd_api_control";
if (!ctrl.Init(opts)) {
return 1;
}
// 停止升降运动
ctrl.lift_stop();
printf("升降已停止\n");
return 0;
}
5.lift_set_orig - 升降设置原点
方法: ctrl.lift_set_orig(save_flash = false)
C++ 签名: bool lift_set_orig(bool save_flash = false);
说明: 将当前位置设置为原点(0 mm)。位置控制(lift_set_pos)基于该原点计算相对位置。
参数:
save_flash:是否保存到 Flash,bool 类型,默认 false。设为 true 时原点信息写入 Flash,断电重启后仍生效
返回值:
使用示例:
C++
#include "fd_api/control.h"
#include <cstdio>
int main() {
fd_robot::Control ctrl;
fd_robot::Control::Options opts;
opts.node_name = "fd_api_control";
if (!ctrl.Init(opts)) {
return 1;
}
// 将当前位置设置为原点(0mm)
bool ok = ctrl.lift_set_orig();
if (ok) {
printf("原点设置成功\n");
} else {
printf("原点设置失败\n");
}
// 设置原点并保存到 Flash,断电重启后仍生效
ctrl.lift_set_orig(true);
return 0;
}
注意: 设置原点后,后续 lift_set_pos 位置控制将基于新原点计算相对位置,请确保在合适的位置设置原点。
6.lift_status_cmd - 升降状态命令
方法: ctrl.lift_status_cmd(cmd)
C++ 签名: bool lift_status_cmd(const std::string &cmd);
说明: 向升降驱动发送状态字符串命令,如清除编码器故障等。具体支持的字符串命令请参见升降驱动文档。
参数:
cmd:状态命令字符串,std::string 类型。常用值:"encoder_exception_clear"(清除编码器故障)
返回值:
使用示例:
C++
#include "fd_api/control.h"
#include <cstdio>
int main() {
fd_robot::Control ctrl;
fd_robot::Control::Options opts;
opts.node_name = "fd_api_control";
if (!ctrl.Init(opts)) {
return 1;
}
// 清除编码器故障
bool ok = ctrl.lift_status_cmd("encoder_exception_clear");
if (ok) {
printf("状态命令发送成功\n");
} else {
printf("状态命令发送失败\n");
}
return 0;
}
注意: 本接口仅 C++ 提供,Python Control 暂未封装。清除故障前请先停止升降运动(lift_stop)。
7.lift_get_current_pos - 获取升降当前位置(同步读取)
方法: state.lift_get_current_pos(pos_mm)
C++ 签名: bool lift_get_current_pos(float &pos_mm) const;
参数:
pos_mm:出参,float & 类型,返回当前升降位置高度,单位:毫米 (mm)
返回值:
bool:表示是否已有有效缓存数据
true:已有数据,pos_mm 有效
false:尚未收到数据,pos_mm 不可信
使用示例:
C++
#include "fd_api/state.h"
#include <cstdio>
int main() {
fd_robot::State state;
if (!state.Init()) {
return 1;
}
// 读取当前升降高度
float pos_mm = 0.0f;
if (state.lift_get_current_pos(pos_mm)) {
printf("当前升降高度:%.2f mm\n", pos_mm);
} else {
printf("尚未收到升降位置数据\n");
}
return 0;
}
注意: 返回 false 表示尚未收到状态数据,此时 pos_mm 出参不可信,建议先订阅或等待数据到达后再读取。
8.lift_sub_current_pos - 订阅升降位置(异步回调)
方法: state.lift_sub_current_pos(cb)
C++ 签名: SubscriptionId lift_sub_current_pos(LiftPosCallback cb); // cb: void(float pos_mm)
参数:
cb:回调函数,std::function<void(float)> 类型,pos_mm 为 float,单位:毫米 (mm)。回调在线程池中执行。
返回值:
SubscriptionId:订阅ID,类型为 uint64_t。可用于后续取消订阅;空回调返回 0(失败)
使用示例:
C++
#include "fd_api/state.h"
#include <cstdio>
int main() {
fd_robot::State state;
if (!state.Init()) {
return 1;
}
// 订阅升降位置(回调在线程池中执行)
fd_robot::SubscriptionId sid = state.lift_sub_current_pos(
[](float pos_mm) {
printf("升降位置更新:%.2f mm\n", pos_mm);
});
if (sid != 0) {
printf("订阅成功,订阅ID:%llu\n", sid);
}
// 无需接收时取消订阅
state.unsubscribe(sid);
printf("已取消升降位置订阅\n");
return 0;
}
建议:
- 订阅的回调在线程池中执行,注意线程安全
- 无需接收位置更新时及时取消订阅,避免不必要的回调
- 可与
lift_get_current_pos 同步读取配合使用