gpt4 book ai didi

c++ - 回调中未更新的变量

转载 作者:行者123 更新时间:2023-11-28 07:59:02 25 4
gpt4 key购买 nike

我有代码来定义在 stageros 的世界文件中设置的位置模型的行为。我想在变量 px 中跟踪它在世界上的当前位置pyptheta通过订阅 odom stageros 发送的里程计消息的主题。像这样:

ros::Subscriber RobotOdometry_sub = n.subscribe<nav_msgs::Odometry>("robot_0/odom",1000,&Robot::ReceiveOdometry,this);

它被放入 Robot 对象的构造函数中。然后回调如下:

void Robot::ReceiveOdometry(nav_msgs::Odometry msg)
{
//This is the call back function to process odometry messages coming from Stage.
px = initialX + msg.pose.pose.position.x;
py = initialY + msg.pose.pose.position.y;
ptheta = angles::normalize_angle_positive(asin(msg.pose.pose.orientation.z) * 2);
ROS_INFO("x odom %f y odom %f theta %f", px, py, ptheta);
}

这个回调似乎没有问题。回调打印的 px、py 和 ptheta 值也都是正确的,并且与它们在世界中的当前位置相对应。问题出现在其他函数中:

void Robot::OtherFunction() {
while (ros::ok())
{
ros::spinOnce();
ROS_INFO("x %f y %f theta %f", px, py, ptheta);
}
}

这只是一个示例,但出于某种原因,从另一个函数打印的 px、py 和 ptheta 值似乎总是停留在初始 px、py 和 ptheta 值。即使 ReceiveOdometry 回调也在不断打印正确的值。 px、py、ptheta 值不同,就好像每个变量有两个不同的值。

ReceiveOdometry 的 ROS_INFO 正确打印当前位置。

OtherFunction 的 ROS_INFO 打印初始位置并且根本不改变,即使 px、py 和 ptheta 在 ReceiveOdometry 中连续设置也是如此。

有谁知道是什么导致 ReceiveOdometry 回调中对 px、py 和 ptheta 的更改没有转移到 OtherFunction?希望这个问题是有道理的。

谢谢。

最佳答案

在两个函数中打印并检查this。您将使用两个不同的对象。

关于c++ - 回调中未更新的变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11984816/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com