问题描述
RobotRunner.h
class RobotRunner
{
public:
VectorNavData* vectorNavData;
};
RobotRunner.cpp
void RobotRunner::run()
{
printf("Quaternion[0]: %f \n",vectorNavData->quat[0]); //Output: 243235653487854 - Abnormal values
}
SimulationBridge.h
class SimulationBridge
{
private:
VectorNavData _vectorNavData; // Actual value of vectornavdata from the robot is stored here
RobotRunner* _robotRunner = nullptr; //Pointer to the RobotRunner Object
}
SimulationBridge.cpp
void SimulationBridge::init()
{
_robotRunner = new RobotRunner();
printf("Quaternion[0]: %f \n",_vectorNavData.quat[0]); // Output: 0.43 - normal and expected
_robotRunner->vectorNavData = &_vectorNavData;
}
void SimulationBridge::run()
{
_robotRunner->run();
}
//This function runs continuously and updates the _vectorNavData in a separate thread
void SimulationBridge::readIMU()
{
while(true)
{
//_lowState stores the values of different robot parameters at a given time
_vectorNavData.accelerometer[0] = _lowState.imu.accelerometer[0];
_vectorNavData.accelerometer[1] = _lowState.imu.accelerometer[1];
_vectorNavData.accelerometer[2] = _lowState.imu.accelerometer[2];
_vectorNavData.quat[0] = _lowState.imu.quaternion[1];
_vectorNavData.quat[1] = _lowState.imu.quaternion[2];
_vectorNavData.quat[2] = _lowState.imu.quaternion[3];
_vectorNavData.quat[3] = _lowState.imu.quaternion[0];
_vectorNavData.gyro[0] = _lowState.imu.gyroscope[0];
_vectorNavData.gyro[1] = _lowState.imu.gyroscope[1];
_vectorNavData.gyro[2] = _lowState.imu.gyroscope[2];
}
}
VectorNavData是一个结构,用于存储有关机器人方向的详细信息。它具有以下定义
struct VectorNavData {
Vec3<float> accelerometer;
Vec3<float> gyro;
Quat<float> quat;
};
代码说明:
SimulationBridge类在模拟中与机器人通信。它接受vectorNavData并将其存储在成员变量_vectorNavData中。 SimulationBridge还包含指向RobotRunner类的指针作为其成员之一。我正在将_vectorNavData对象的地址分配给指针_robotRunner-> vectorNavData(检查SimulationBridge.cpp)。在RobotRunner类中,我引用了此指针,并在代码的其他部分中使用了值。
问题:
如果我在SimulationBridge.cpp中打印vectorNavData,则值似乎是正常的。但是在将同一对象的指针分配给机械手之后,如果我打印这些值,那么这些值似乎异常高。我的问题是,是否建议使用这种将指针用于动态分配的方式?如果不是,我可以使用的最佳替代方法是什么?
要注意的另一个重要点是,我正在使用CMake编译代码,并且将“ -O3”优化标志设置为CMAKE_CXX_FLAGS。如果删除此标志,则代码sorta可以很好地用于上述对象指针,但是对于代码另一部分中的另一个对象指针,我仍然会遇到类似的错误。我之所以没有在此加入,是因为描述代码结构非常复杂,而且问题本质上是相同的。
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)