今天想把写的坐标转换package,改写成在launch文件中传入参数。中间遇到了一个小问题,特此记录一下。
ros::init(argc, argv, "sub");
ros::NodeHandle n;
ros::NodeHandle pn("~");
double x;
pn.param("/x",p_x, 0.3);ros::init(argc, argv, "sub");
ros::NodeHandle n;
//ros::NodeHandle pn("~");
double x;
n.param("x",p_x, 0.3);以上两种写法都是正确的。
ros::init(argc, argv, "sub");
ros::NodeHandle n;
ros::NodeHandle pn("~");
double x;
pn.param("x",p_x, 0.3);但是这种写法是错误的。
这是为什么呢?
这就涉及到NodeHandle的参数范围问题。如下:
ros::init(argc, argv, "my_node_name");
ros::NodeHandle nh1("~");
ros::NodeHandle nh2("~foo");nh1的命名空间(namespace)是 /my_node_name,而nh2的namespace是 /my_node_name/foo
注:
在ROS中NodeHandle可以参考:
http://wiki.ros.org/roscpp_tutorials/Tutorials/AccessingPrivateNamesWithNodeHandle
http://wiki.ros.org/roscpp_tutorials/Tutorials/Parameters
本文探讨了在ROS中使用NodeHandle进行参数设置的不同方式,并解析了正确与错误实践的区别。通过具体的代码示例,展示了如何避免命名空间配置上的常见误区。


被折叠的 条评论
为什么被折叠?



