我正在尝试理解这一行代码
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;
}
答案 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)
Rate
是ros/ros.h
中包含的一种类型,用于为任务提供特定的时间段。
因此它被写为:
ROS:: Rate variable_name(time_delay_HZ);
您可以给变量赋予loop_rate
的任何名称,也可以给HZ
(10HZ=100ms
)设置任何时间延迟。