您能解释一下这种语法吗:ros :: Rate loop_rate(10);

时间:2019-06-12 15:04:25

标签: c++ syntax ros

我正在尝试理解这一行代码

 ros::Rate loop_rate(10);

似乎正在创建某种对象,但是这看起来像一个函数调用,我看不到该对象的命名位置。这行代码在做什么?我了解ros中的loop_rate是什么,但我是c ++的新手,不了解语法。

#include "ros/ros.h"
#include "std_msgs/String.h"
#include <sstream>

int main(int argc, char **argv)
{
  ros::init(argc, argv, "talker");

  ros::NodeHandle n;

  ros::Publisher chatter_pub = n.advertise<std_msgs::String>("chatter", 1000);

  ros::Rate loop_rate(10);



  int count = 0;
  while (ros::ok())
  {
    std_msgs::String msg;

    std::stringstream ss;
    ss << "hello world " << count;
    msg.data = ss.str();

    ROS_INFO("%s", msg.data.c_str());

    chatter_pub.publish(msg);

    ros::spinOnce();

    loop_rate.sleep();
    ++count;
  }


  return 0;
}

2 个答案:

答案 0 :(得分:3)

这没什么险恶的。

实际上,这是一个非常简单的变量声明。

类型为ros::Rate,名称为loop_rate,唯一的构造方法参数为10

它看起来确实有点像函数调用,但事实并非如此。 (它看起来也有点像函数声明,如果您不小心,该声明为can cause problems!)

就像:

std::string str("Hi!");

或:

Rectangle rect(10, 5);

甚至:

int x(42);

对于内置程序,我们许多人倾向于使用旧式的复制初始化:

int x = 42;

…尽管对于大多数类类型来说这不太可行。

您可能需要检查your C++ book中的声明语法吗?

答案 1 :(得分:1)

Rateros/ros.h中包含的一种类型,用于为任务提供特定的时间段。

因此它被写为:

ROS:: Rate variable_name(time_delay_HZ); 

您可以给变量赋予loop_rate的任何名称,也可以给HZ10HZ=100ms)设置任何时间延迟。