c++ 真实的阅读NAO机器人中的传感器

icnyk63a  于 2023-06-07  发布在  其他
关注(0)|答案(1)|浏览(177)

我正在与机器人NAO的真实的应用程序工作,我需要快速读取关节传感器,从ALMemory获取数据的功能太慢了。我已经看到了modue almemoryfastaccess的例子,但是当我运行. exe时出现了错误。
我已经阅读了有关almemoryfastaccess模块的信息,但当我尝试使用函数ConnectToVariables(getParentBroker(),fSensorKeys,false)连接到传感器时,我在函数getDataPtr中收到以下错误:“未捕获的错误指针序列化未实现”。有人在这方面有工作吗?谢谢。
我不能从ALMemory中获取数据,因为它对我的应用程序来说太慢了。
代码是这样的。它编译得很好,但当我运行.exe时,出现错误:

#include <almemoryfastaccess/almemoryfastaccess.h>
#include <boost/shared_ptr.hpp>
#include <string>
#include <vector>
#include <alcommon/albroker.h>
#include <qi/log.hpp>

using namespace AL;
using namespace std;

boost::shared_ptr<AL::ALMemoryFastAccess> fMemoryFastAccess;
vector<string> fSensorKeys;
fSensorKeys.clear();
fSensorKeys.resize(3);
fSensorKeys[0] = "Device/SubDeviceList/HeadPitch/Position/Sensor/Value";
fSensorKeys[1] = "Device/SubDeviceList/HeadYaw/Position/Sensor/Value";
fSensorKeys[2] = "Device/SubDeviceList/LAnklePitch/Position/Sensor/Value";
fMemoryFastAccess->ConnectToVariables(getParentBroker(), fSensorKeys, false); //in this line the error appears.
ff29svar

ff29svar1#

这个“快速访问”API仅在您的模块与NAOqi在同一进程中运行时才有效。
当从远程客户端(此处为Windows PC)运行代码时,不可能实现实时数据收集。
有替代方案:

  • 交叉编译你的模块并让它被NAOqi加载。您将创建一个库而不是可执行文件(请参阅此处qi_create_lib的用法)。我不知道如何找到跨工具链。您可能需要联系支持。
  • 您可以使用ALMemory::getListData降低轮询数据的频率(例如每隔100ms)
  • 你可以通过在机器人上运行qicli info --show-doc ALMemoryWatcher来戳到名为ALMemoryWatcher的模块。它捕获实时数据,但您需要以较低的频率批量收集数据。

相关问题