roscpp

roscpp is a ROS client implementation in C++.

roscpp 是C++中的ROS客户端实现

主要框架

ros::init()

==ROS初始化功能==

此函数将解析任何ROS参数(例如主题名称的重新映射),并将使用它们(即argcargv

argcargv的调用可能会导致其被修改

1
2
3
4
5
6
7
//ros::init 的声明
void ros::init (
int & argc,
char ** argv,
const std::string & name,
uint32_t options = 0 //有缺省值 用于启动结点的选项
)

其中:

  • argc 是argument count的缩写表示传入main函数中的参数个数,包括这个程序本身

  • argv 是 argument vector的缩写表示传入main函数中的参数列表,其中argv[0]表示这个程序的名字

  • name 是 ros结点的名称 名称中不能包含引用的命名空间的名称

  • options 是 选项参数,一般默认缺省值为0

ros::NodeHandle

==ROS句柄==

用于和topicserviceparam等交互用的==接口==

可以理解为构建函数

一般将节点句柄的名称默认为

  • 一般句柄 nh
  • 私有句柄 pnh (private nh)
1
2
3
4
5
//ros::NodeHandle 的三种初始化方式

ros::NodeHandle nh; //一般句柄
ros::NodeHandle nh("~"); //私有句柄,“~”是指将这个节点名称(nh)作为一个子命名空间私有化,别的变量不能使用
ros::NodeHandle nh("some_namespace"); //私有句柄,类上,将该节点参数名称放入some_namespace空间中,并为之开辟参数名称空间
  • 在 类class 中使用
    • 一般句柄用来调用 订阅和发布 函数
    • 私有句柄用来读取参数

何时使用哪个节点句柄

这些只是一般准则,但在可能的情况下,最好在每种情况下使用以下内容:

  • 订阅者Subscriber - 通常是公共节点句柄。
  • 发布者Publisher - 通常是大多数输出/可视化的私有节点句柄,偶尔需要将 public 用于全局使用的数据(即 /odom 主题)。
  • 参数param - 几乎总是私有节点句柄。