# libfranka AsyncPositionControlHandler下readOnce阻塞无法。

> 原文链接：https://robotics.hellobike.com/pitfalls/2026-08-28-libfranka-220
> 频道：pitfalls | 更新日期：2026-08-28 | 标签：auto, github-issue, libfranka
> 核心摘要：异步位置控制期间readOnce失效，官方建议临时修改TargetFeedback结构体以透传机器人状态数据作为过渡方案。

# libfranka AsyncPositionControlHandler下readOnce阻塞无法。

::: v-pre
> 本文由 AI 根据公开内容整理，可能有误，请以原文为准：[Cannot retrieve robot state via readOnce() while using AsyncPositionControlHandler](https://github.com/frankarobotics/libfranka/issues/220)（GitHub frankaemika/libfranka #220）

**状态**：有绕过办法

## 问题

在Franka Research 3上使用libfranka 0.18.2的AsyncPositionControlHandler进行异步位置控制时，调用robot.readOnce()会阻塞或返回无效数据，导致无法在控制执行期间获取关节位置、速度及外部力矩等实时RobotState，且现有getTargetFeedback接口仅返回状态码与错误信息，不包含本体状态数据。

## 环境

机型：Franka Research 3；系统：Ubuntu 20.04；SDK：libfranka 0.18.2；控制模式：AsyncPositionControlHandler

## 解决办法

1. 确认当前libfranka版本未原生支持异步控制期间读取RobotState，避免在主线程继续调用readOnce以防阻塞。
2. 修改libfranka源码中TargetFeedback结构体定义，手动添加franka::RobotState类型成员变量用于承载本体状态。
3. 在异步控制回调内部获取当前RobotState，并将其赋值给扩展后的TargetFeedback结构体实例一并返回。
4. 上层业务通过getTargetFeedback接口读取扩展字段，间接获取异步控制循环中的实时机器人状态数据。
5. 注意此方法为官方维护者确认的临时绕过方案，需自行维护SDK补丁，待后续官方正式更新接口后迁移。

讨论原作者：@ChloeZ427 等，版权归原作者所有。
:::

## 原始参考来源 (Sources)

- [GitHub frankaemika/libfranka #220：Cannot retrieve robot state via readOnce() while using AsyncPositionControlHandler](https://github.com/frankarobotics/libfranka/issues/220)