ROS常用API

我们这次来了解一些ros中的常用API。

1.初始化函数:

ros::init(argc,argv,"node_name",option),这个函数的返回值为void.

比较常用的是第1,2,3个参数,1是指输入命令参数的字符串数组数量,2是输入命令参数的字符串数组;1,2参数是与ros输入命令的特定格式有关的。

3。是我们自己命名的一个节点名称,是在我们编写CMakeList.txt的时候表明我们调用的节点名称,它有唯一性,也就是说,在第四个参数option未设置的时候,我们是不能重复调用同名的节点的,如果发生重复调用,那么之前的节点会停止运行并警告,而运行新的节点。

第四个参数option是一个32位整型,默认为0,使用方式如示:ros::init(argc,argv,"node_name",ros::init_options::AnonymousName);它的原理是以我们的节点名称为前缀,在这个节点名称后面加入一个随机数,以此来进行区分。

e.g. 1。rosrun test01 twist _length:=2此时这个length参数会被传入参数服务器,可以用rosparam list 进行观察,会发现有/test01/length参数,再用rosparam get /test01/length会得到值2。

2。ros::init(argc,argv,"twist",ros::init_options::AnonymousName);

此时你使用rosnode list命令时会看到两个相似但后缀数字不同的node:

/twist_XXXXX和/twist_XXXXY

----------------------------------------------------------------------------------------------------

2.句柄创建:

格式:ros::NodeHandle nh;

其实他还有一个创建命令空间的作用,但我们先按下不表。

----------------------------------------------------------------------------------------------------

3.创建发布对象:

ros::Publisher pub=nh.advertise<std_msgs>(topic_name,array_length,latch);

topic_name是我们自己定义的话题名称,对于发布者,这个是自己定义的;对于订阅者,这个是要去跟踪的。

array_length是队列长度,如果我们的消息没有发送出去那他们会暂时保留在队列中,如果有新消息,则顶替掉最底层的消息。

latch默认为flase,如果设置为true,则会保留发布的最后一则消息,然后在下次订阅到的时候发送给订阅者。

----------------------------------------------------------------------------------------------------

4.回旋函数

ros::spin()和ros::spinOnce()

相同点:他们都能处理回调函数,回调函数是指我们看到函数定义中的Callback函数;

不同点:ros::spin()是进入循环中执行回调函数;ros::spinOnce()只是执行一次回调函数,并没有进入循环。在ros::spin()后面的函数不会被执行,而ros::spinOnce后面的函数可以被执行。

ros::spinOnce()可以配合其他函数一起放在while循环中进行使用;而ros::spin()会直接阻断后面程序的运行,在自己的死循环中一直运行直到程序结束。

----------------------------------------------------------------------------------------------------

5.时间函数:

我们可以利用ros/ros.h中内置的Time类型来显示当前的时间.

代码如下(别忘了roscore,新建功能包,重新编译以及source):

include "ros/ros.h"

int main(int argc,char *argv[]){
    setlocale(LC_ALL,"");
    ros::init(argc,argv,"time");
    ros::NodeHandle n;
    ros::Time now_time=ros::Time::now();//get time seed
    ROS_INFO("Now time is:%.2f",now_time.toSec());//turn to second number
    ROS_INFO("Now the second number is: %.2f",now_time.sec);//like above
    
    ros::Time t1(20,312345678);//since 1970.1.1.00:00 passed 20 seconds and 312345678 ns
    ros::Time t2(100.66);//since 1970.1.1.00:00 passed 100.66 seconds
    ROS_INFO("t1=%.2f",t1.toSec());
    ROS_INFO("t1=%.2f",t2.toSec());

    return 0;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值