【发布时间】:2013-04-18 11:27:32
【问题描述】:
我在 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 的实现,我不知道我是否可以使用它。
感谢您的帮助。
【问题讨论】:
-
在 main 中添加 auto noop_deleter = [](double ){} 作为全局声明和 boost::shared_ptr
z_ptr(&z, noop_deleter)。我在回调中也需要这个,可能是像 double 这样的参数,但这不会编译。至于代码中带有回调的类,我不知道如何开始,除了可能是 class{void callback} 但仅此而已。
标签: c++ class boost callback shared-ptr