NAO机器人实时读取关节传感器:ALMemoryFastAccess调用报错求助
NAO机器人ALMemoryFastAccess序列化错误解决方案
在开发NAO机器人实时应用时,改用ALMemoryFastAccess模块优化关节传感器数据读取速度,编译通过但运行时调用ConnectToVariables出现uncaught error pointer serialization not implemented错误,可通过以下几点解决:
初始化ALMemoryFastAccess实例
原代码中fMemoryFastAccess是未初始化的空智能指针,直接调用成员函数会触发未定义行为。需通过Broker创建有效实例:// 替换空指针声明 boost::shared_ptr<AL::ALMemoryFastAccess> fMemoryFastAccess = ALMemoryFastAccess::create(getParentBroker());修正ConnectToVariables调用方式
ConnectToVariables不需要手动传入Broker参数——ALMemoryFastAccess在构造时已持有Broker引用,手动传递getParentBroker()会触发指针序列化失败。正确调用:fMemoryFastAccess->ConnectToVariables(fSensorKeys, false);调整变量操作的作用域
原代码中直接在全局作用域执行fSensorKeys.clear()、resize等操作属于语法错误,必须将这些代码放到函数内部(如main或初始化函数):int main(int argc, char* argv[]) { // 先完成Broker初始化等前置操作 boost::shared_ptr<AL::ALMemoryFastAccess> fMemoryFastAccess = ALMemoryFastAccess::create(getParentBroker()); vector<string> fSensorKeys; 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(fSensorKeys, false); // 后续数据读取逻辑 }确认编译链接配置
编译项目时需确保链接almemoryfastaccess库,例如在CMakeLists.txt中添加:target_link_libraries(your_target_name almemoryfastaccess)
内容的提问来源于stack exchange,提问作者Emanuel Marquez
相关产品推荐
相关产品推荐

