初始化函数
作用:初始化函数
ros::init(argc,argv,"节点名")
* \param argc 参数个数
* \param argv 参数列表
* \param name 节点名称,需要保证其唯一性,不允许包含命名空间
* \param options 节点启动选项,被封装进了ros::init_options
使用
1.argc和argv的使用
按照特定格式传参数,可以在ros中使用
2.option的使用
特定场景下,一个节点多次启动
ros::init(argc,argv,"ergouzi",ros::init_option::AnonmousName)
节点句柄函数
作用:创建发布者对象
ros::NodeHandle nh
参数:
话题名称
话题对象
latch(可选)
使用:
latch设置ture的作用
方案一使用固定频率发送地图的数据,效率低
方案二将地图发布对象的latch设置为ture,并且发布方只发送一次数据,当订阅者连接时,将地图数据发送给订阅者(只发送一次)
回调函数
循环回调
spin()
spinonce()
时间函数
时间获取与设定
//参考:1970年
//获取当前时刻
ros::Time now=ros::Time::now();
ROS_INFO("当前时间是:%.2f",now.toSec());
ROS_INFO("当前时间是:%d",now.sec);
//设置指定时刻
ros::Time t1(20,454545465);
ros::Time t2(100.59);
ROS_INFO("t1=%.2f",t1);
ROS_INFO("t2=%.2f",t2);
//持续一段时间
ROS_INFO("------------------------持续时间---------------------------");
ros::Time start=ros::Time::now();
ROS_INFO("开始休眠:%.2f",start.toSec());
//休眠函数
ros::Duration du(10.5);
du.sleep();
ros::Time end=ros::Time::now();
ROS_INFO("休眠结束:%.2f",start.toSec());
ROS_INFO("时间运算");
ros::Time now = ros::Time::now();
ros::Duration du1(10);
ros::Duration du2(20);
ROS_INFO("当前时刻:%.2f",now.toSec());
//1.time 与 duration 运算
ros::Time after_now = now + du1;
ros::Time before_now = now - du1;
ROS_INFO("当前时刻之后:%.2f",after_now.toSec());
ROS_INFO("当前时刻之前:%.2f",before_now.toSec());
//2.duration 之间相互运算
ros::Duration du3 = du1 + du2;
ros::Duration du4 = du1 - du2;
ROS_INFO("du3 = %.2f",du3.toSec());
ROS_INFO("du4 = %.2f",du4.toSec());
//PS: time 与 time 不可以运算
// ros::Time nn = now + before_now;//异常
定时器函数
间隔固定时间执行函数
参数
//Timer createTimer(Duration period,
const TimerCallback& callback,
bool oneshot = false,
bool autostart = true) const;
* \param period 时间间隔
* \param callback 回调函数
* \param oneshot 如果设置为 true,只执行一次回调函数,设置为 false,就循环执行。
* \param autostart 如果为true,返回已经启动的定时器,设置为 false,需要手动启动。
示例
ROS_INFO("------------------------定时器---------------------------");
ros::Timer time55 =nh.createTimer(ros::Duration(2),cd);
ros::spin();