ROS深入

33 篇文章 0 订阅
27 篇文章 0 订阅

一、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()关闭节点

  • 3
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值