将'const franka :: Robot'传递为'this'参数将丢弃限定符[-fpermissive] robot.loadModel();

时间:2020-05-11 17:54:26

标签: c++ lambda

我正在使用机器人制造商提供的库来读取数字机器人模型并对其进行实时控制。为了能够读取机器人数值模型,有两个cpp(12)文件和一个header。 在公司提供的examples之一中,类robot的对象franka::Robottry块的开头定义。我的猜测是,该对象会每毫秒在控制循环(robot.control([=, &time] ...)中使用数字机器人模型进行更新。控制循环(每毫秒被调用的循环)被定义为对象机器人的lambda函数:

robot.control([=, &time](const franka::RobotState& robot_state,
                         franka::Duration period) -> franka::CartesianVelocities {...}

在同一示例中,我需要能够在控制循环中访问对象robot,以便调用方法robot.loadModel()并读取模型。在此循环中使用robot.loadModel();时,会出现以下错误

Passing 'const franka::Robot' as 'this' argument discards qualifiers [-fpermissive] robot.loadModel();      

当我使用this.loadModel();时,我会收到错误消息

'this' was not captured for this lambda function

我对lambda函数做了一些研究。我认为在此示例中,[=应该捕获main()函数范围内的所有变量。我该如何解决这个问题?

1 个答案:

答案 0 :(得分:0)

此问题的答案是对象robot是常量,因此无法在控制循环中访问其方法。相反,我们可以定义一个静态变量并在循环内调用方法。

static franka::Model model(robot.loadModel());

在控制循环中:

model.mass();