系列文章目录
【ROS基础】Linux 命令行
【ROS基础】.launch 文件语法记录
【ROS基础】CMakeLists.txt 文件语法记录
【ROS基础】Package.xml 文件语法记录
【ROS基础】ROS_c++ 语法记录
前言
很多 c++ 语法特性太多,自忖不可能完全记得住,本文用于记录练习 SLAM 过程中收获的 c++ 知识点。1、main 函数入口参数 argc 、argv
int main(int argc, char** argv) //or
int main(int argc, char* argv[]) //or
int main(int argc, char argv[][])
- argc :整数,用来统计你运行程序时,送给main函数的命令行参数的个数。
- argv :指针数组,用来存放指向你的字符串参数的指针,每一个元素指向一个参数。
- argv[0] :指向可执行文件的全路径名。
- argv[1] :指向在命令行中执行程序名后的第 1 个字符串。
- argv[2] :指向执行程序名后的第 2 个字符串。
注:数组名后加方括号,相当于 * 的一层解引用。
2、ros::NodeHandle::param()
官方参考页:http://docs.ros.org/en/kinetic/api/roscpp/html/classros_1_1NodeHandle.html
函数原型:
template<typename T >
bool ros::NodeHandle::param (const std::string & param_name,
T & param_val,
const T & default_val) const
第1个为输入参数:param_name
, 从服务器中查找名为param_name
的参数;
第2个为输出参数:param_val
,将从参数服务器中找到的、名为param_name
的参数的参数值赋给param_val
;
第3个为输入参数:若在服务器中没有找到param_name
,则将第3个默认参数default_val
赋值给第2个参数param_val
.
举例:
#define DEFAULT_TYPE "omni"
#define DEFAULT_TYPE_VERIFY true
string type;
bool type_verify;
ros::init(argc, argv, "tianbot_core");
ros::NodeHandle nh("~");
nh.param<std::string>("type", type, DEFAULT_TYPE);
nh.param<bool>("type_verify", type_verify, DEFAULT_TYPE_VERIFY);
3、ROS 节点命名空间在 C++ 中的如何实现
// launch 文件中 ns==“node_namespace”
ros::init(argc, argv, “node_name”); // node name
ros::NodeHandle n; //n 命名空间为/node_namespace
ros::NodeHandle n1(“sub”); // n1命名空间为/node_namespace/sub
ros::NodeHandle n2(n1,“sub2”);// n2命名空间为/node_namespace/sub/sub2
ros::NodeHandle pn1(“~”); //pn1 命名空间为/node_namespace/node_name
ros::NodeHandle pn2(“~sub”); //pn2 命名空间为/node_namespace/node_name/sub
ros::NodeHandle pn3(“~/sub”); //pn3 命名空间为/node_namespace/node_name/sub
ros::NodeHandle gn(“/global”); // gn 命名空间为/global
node_name 的含义:
node_name = node_namespace + nodename
3、ros::spin()
ros::spin()不会返回,直到节点被关闭,或者调用ros::shutdown(),或者按下Ctrl+C