turtlebot3-burger_150.png
turtlebot3-waffle-pi_150.png
turtlebot3-arm_150.png
walking-y2_150.png
turbot3-multi_150.png
turbot3-dl-ros1_150.png
turbot3-ai.png
turbot3-dl-ros2_150.png
turbot3-slam_150.png
turbot3-arm_150.png
turtlebot4-lite_150.png
turtlebot4-pro_150.png
turbot4-dl_150.png
turbot4-ai_150.png
aidriving-racebot_150.png
aidriving-autodrive_150.png
turtlebot-arm_150.png
openmanipulator-x_150.png
Home » ROS与C++入门教程 » ROS与C++入门教程-访问NodeHandle类的私有名称

ROS与C++入门教程-访问NodeHandle类的私有名称

纠错,疑问,交流: 请进入讨论区请点击进入页面,扫码加入微信群或Q群进行交流

获取最新文章: 扫一扫加入“创客智造”公众号

ROS与C++入门教程-访问NodeHandle类的私有名称

说明:

  • 介绍如何访问NodeHandle类的私有名称

为什么不仅仅是~name

  • 如果NodeHandle创建时候有自己的命名空间,则访问私有名称就会有些麻烦。
  • 代码:
ros::init(argc, argv, "my_node_name");
ros::NodeHandle nh("/my_node_handle_namespace");
  • 那私有名称的如何求解?一些可选如:

    • /my_node_handle_namespace/my_node_name/name
    • my_node_name/my_node_handle_namespace/name
    • /my_node_handle_namespace/name
    • Something else entirely
  • 因为这个原因,NodeHandle不允许直接通过私有名称作为参数传递或用nodehandle的构造函数作为参数。

访问私有名称

  • 解决方案就是在实例化NodeHandle时候使用私有名称作为工作空间。
ros::init(argc, argv, "my_node_name");
ros::NodeHandle nh1("~");
ros::NodeHandle nh2("~foo");
  • nh1的命名空间是 /my_node_name, and nh2的命名空间是/my_node_name/foo.
  • 下面的访问:
ros::NodeHandle nh;
nh.getParam("~name", ... );
  • 可替换成:
ros::NodeHandle nh("~");
nh.getParam("name", ... );

纠错,疑问,交流: 请进入讨论区请点击进入页面,扫码加入微信群或Q群进行交流

获取最新文章: 扫一扫加入“创客智造”公众号


标签: ROS与C++入门教程