ROS编程基本语法
1.c_str()和data()
相同点:都生成一个const char*指针,指向一个临时数组。
不同点:string中的数据并没有保证被存储在独立的一块连续内存中,string的内部表示形式并没承诺以一个null字符结束。这
解释了string 的成员函数c_str存在的原因,它返回一个按C风格设计的指针,指向string的值。因此我们可以这样传递一个
string对象s给这个函数:
void doSomething(const char *pString);
即使是字符串的长度为0,它都能工作。data并没有这个保证(也就是说返回字符串一定会以null结尾)
勿通过string::data、string::c_str返回指针修改string内容,也就是说data()和c_str()只供引用使用。而且一旦string内容变动,则必须重新获取该指针。string对象的赋值,必须使用符合string类规则的处理方式,比如构造、append、erase等函数进行。
2.消息(msg)和服务(srv)
-
消息(msg): msg文件就是一个描述ROS中所使用消息类型的简单文本,它们会被用来生成不同语言的源代码
-
服务(srv): 一个srv文件描述一项服务。它包含两个部分:请求和响应
msg文件存放在package的msg目录下,srv文件则存放在srv目录下。
msg文件实际上就是每行声明一个数据类型和变量名。可以使用的数据类型如下:
int8, int16, int32, int64 (plus uint*)
float32, float64
string
time, duration
other msg files
variable-length array[] and fixed-length array[C]
在ROS中有一个特殊的数据类型:Header,它含有时间戳和坐标系信息,在msg文件的第一行经常可以看到Header header的声明
下面是一个msg文件的样例,它使用了Header,string,和其他另外两个消息类型
Header header
string child_frame_id
geometry_msgs/PoseWithCovariance pose
geometry_msgs/TwistWithCovariance twist
srv文件分为请求和响应两部分,由’- - -'分隔,下面是srv的一个样例
int64 A
int64 B
---
int64 Sum
其中 A 和 B 是请求, 而Sum 是响应。