在callback和main之间传递一个变量
Passing a variable between callback and main
我在c++中使用ROS,在void callback()中从主题接收数据后,我需要将此数据传递给int main()中的变量。到目前为止,我所发现的是,我可以使用一个boost共享指针来做到这一点,并且应该使用"回调作为成员函数的程序中的类"。到目前为止的部分代码:
double pos_z;
void callback(gazebo_msgs::LinkStates msgs_ls)
{
double pos_z = msgs_ls.pose[43].position.z
pos_z = pos_z + 1;
}
int main(int argc, char **argv)
{
ros::init(...);
ros::Nodehandle n;
ros::Subscriber ls_sub = n.subscribe("/gazebo/link_states", 10, callback);
ros::ServiceClient sls_client = n.serviceClient<gazebo_msgs::SetLinkState>("/gazebo/set_link_state");
gazebo_msgs::SetLinkState setLinkState;
while (ros::ok))
{
setLinkState.request.link_state.position.z = pos_z;
sls_client.call(setLinkState);
}
关于共享指针:这可能是boost::shared_ptr<double> a_ptr(&a, noop_delete
与auto noop_delete = [](double *){}
,但我真的不明白如何实现这一点。同样提到的类与回调作为成员函数是不清楚的我。示例显示了使用C的实现,我不知道我是否可以使用它。谢谢你的帮助。
你得到的建议很好:
使用"在程序中使用回调作为成员函数的类"
你这样做:
class SuperCoolRobot {
public:
SuperCoolRobot ():pos_z(0) {
// Note : we provide the callback (a member) + a state (this)
ls_sub = n.subscribe("/gazebo/link_states", 10, SuperCoolRobot::link_state_callback, this);
}
void link_state_callback(gazebo_msgs::LinkStates msgs_ls) {
pos_z = msgs_ls.pose[43].position.z + 1;
}
void run() {
gazebo_msgs::SetLinkState setLinkState;
while (ros::ok))
{
setLinkState.request.link_state.position.z = pos_z;
sls_client.call(setLinkState);
}
}
protected:
// state here
ros::Nodehandle n;
ros::Subscriber ls_sub;
double pos_z;
};
主:
int main(int argc, char **argv) {
SuperCoolRobot robot;
robot.run();
}
请注意,我不知道ROS,所以我只是把我从你的代码理解。当然可以调整
相关文章:
- 用C++中的一个变量定义一个常量
- 一个变量的输入值也会保存到另一个变量中
- 将双精度变量设置为另一个变量的值
- 对具有相同方法的不同类使用一个变量
- 为什么一个变量获得与另一个值相同的值
- 尝试在 C++ 中为 ifstream 提供一个变量
- 类中的一个变量显示,但另一个不显示
- 声明一个变量,该变量在 c++ 或 c 中具有值,当程序终止时不会被销毁
- c++问题:给一个变量赋值后,另一个变量发生了变化
- 如何将一个变量用于父类和派生类
- 如何在循环中使用scanf,将值存储到一个变量中,然后打印出来?
- 我如何将一个变量与另一个变量进行比较,例如我想如果(var1 > var2 x 1),然后执行此 c++
- 如何在一个函数中定义一个变量,并在另一个函数中访问和更改它?(C++)
- 如果一个变量在它之前释放了另一个(相同的数据类型)变量,如何将其分配给内存?
- 迭代器或反向器的一个变量
- fstream库,试图创建一个变量名为(c++)的文件
- 如何在 c++ 中将两个不同类型的变量分配给一个变量
- 如何将一些变量放在一个变量中?
- 将 int 转换为字符串,然后连接另一个变量以创建完整扩展名,然后将其转换为 const_char*
- 如何用索引命名一个变量来存储输入 mxArray?