You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.24 06:04:59