一、ros::init()
ros::init(argc, argv, "publish", ros::init_options::AnonymousName);
第一个参数:终端输入参数的个数,例如输入"rosrun ** ** 100 200",则argc为3.
第二个参数:以数组的形式保存终端输入的命令,例如输入"rosrun ** ** 100 200",则argv[0]为当前所执行的文件,argv[1]为100,argv[1]为200。
第三个参数:节点发布时的名字
第四个参数:原则上不能重复启动相同的节点,但如果必须就加上第四个参数;如果不是必须则不用写
二、n.advertise<>()
ros::Publisher pub = n.advertise<std_msgs::String>("chatter", 100, false)
第一个参数:发布的话题名
第二个参数:队列长度
第三个参数:默认为false;如果设为true,会保存发布方的最后一条消息,并且当新的订阅对象连接到发布方时,发布方会将这条消息发送给订阅者
三、spin()和spinOnce()
spinOnce()执行完一次回调函数后继续向下执行,spinOnce()后面党的语句会被执行
spin()会一直在回调函数中死循环,spin()后面的语句不会被执行
四、时间函数(时间点)
ros::NodeHandle n;//使用ros时间函数必须有句柄
ros::Time right_now = ros::Time::now();//获取时间,获取的时间为距离1970年1月1日的秒数
//两种输出时间方式
ROS_INFO("当前时间是: %f", right_now.toSec());
ROS_INFO("当前时间是: %d",right_now.sec);
五、指定休眠时间(持续时间)
ros::Duration a(5);
a.sleep();//程序会休眠5秒
六、时间运算
ros::Duration du1(5);
ros::Time tm1 = ros::Time::now();
ros::Time tm2 = tm1 + du1;//时间点和时间段可以相加
ros::Time tm3 = tm1 - du1;//时间点和时间段可以相减
ros::Time tm4 = tm1 + tm2;//错误,时间点之间不可以相加
ros::Duration du2 = tm1 - tm2;//正确,时间点之间可以相减,返回值是一个Duration类型
ros::Duration = du1 + du2;//时间段和时间段之间可以相加
ros::Duration = du1 - du2;//时间段和时间段之间可以相减
七、定时器
void callback(const ros::TimerEvent& event)
{
............
ROS_INFO("函数被调用的时刻是:%.2f", event.current_real.toSec());
}
ros::NodeHandle n;
ros::Time timer = n.createTimer(ros::Duration(1), callback);//每隔1s执行一次回调函数
ros::spin();
八、其他
命令 | 含义 |
---|
ros::ok() | 如果节点正常就返回true,否则返回false |
ros::shutdown() | 关闭节点 |