第五篇:ROS常用API使用【类似于库开发】【重点】

您所在的位置:网站首页 access中常用函数 第五篇:ROS常用API使用【类似于库开发】【重点】

第五篇:ROS常用API使用【类似于库开发】【重点】

2023-12-27 12:28| 来源: 网络整理| 查看: 265

系列文章目录

提示:这里可以添加系列文章的所有文章的目录,目录需要自己手动添加 TODO:写完再整理

文章目录 系列文章目录前言一、ROS对象节点注册初始化函数API1.C++版本(推荐)2.python版本 二、ROS的回旋循环等待函数API1.C++版本(推荐)2.python版本 三、ROS中时间相关的函数API(1)设置与获取当前时刻函数API1.C++版本(推荐)2.python版本 (2)持续时间设置与时刻运算函数API1.C++版本(推荐)2.python版本 (3)设置运行频率Rate函数API1.C++版本(推荐)2.python版本 (4)休眠函数python版本 四、ROS信息输出函数API0.C++的信息输入输出1.C++版本(推荐)2.python版本ros_info信息保存在本地文件 五、ROS节点状态判断API0.ROS节点退出的原因1.C++判断(推荐)2.python判断 六、ROS日志相关的函数API1.C++版本(推荐)2.python版本 参考资料

前言 认知有限,望大家多多包涵,有什么问题也希望能够与大家多交流,共同成长!

本文先对**ROS常用API使用【类似于库开发】**做个简单的介绍,具体内容后续再更,其他模块可以参考去我其他文章

提示:以下是本篇文章正文内容

一、ROS对象节点注册初始化函数API 1.C++版本(推荐)

(1)函数原型

void init(int &argc, char **argv, const std::string& name, uint32_t options = 0); * \param argc 参数个数 * \param argv 参数列表 * \param name 节点名称,需要保证其唯一性,不允许包含命名空间 * \param options 节点启动选项,被封装进了ros::init_options

(2)函数调用

ros::init(argc,argv,"xxxx");

【防盗标记–盒子君hzj】

2.python版本

(1)函数原型

def init_node(name, argv=None, anonymous=False, log_level=None, disable_rostime=False, disable_rosout=False, disable_signals=False, xmlrpc_port=0, tcpros_port=0) name: 节点名称,必须保证节点名称唯一,节点名称中不能使用命名空间(不能包含 '/')

(2)函数调用

rospy.init_node("yyyy")

【防盗标记–盒子君hzj】

二、ROS的回旋循环等待函数API 1.C++版本(推荐) (1)ros::spinOnce() 在循环体内,处理所有可用的回调函数一次 (2)ros::spin() 在循环体内,一直处理所有可用的回调函数 2.python版本 def spin(): """ 进入循环处理回调 """

【防盗标记–盒子君hzj】

三、ROS中时间相关的函数API (1)设置与获取当前时刻函数API 1.C++版本(推荐) ros::init(argc,argv,"hello_time"); ros::NodeHandle nh;//必须创建句柄,否则时间没有初始化,导致后续API调用失败 ros::Time right_now = ros::Time::now();//将当前时刻封装成对象 ROS_INFO("当前时刻:%.2f",right_now.toSec());//获取距离 1970年01月01日 00:00:00 的秒数 ROS_INFO("当前时刻:%d",right_now.sec);//获取距离 1970年01月01日 00:00:00 的秒数 ros::Time someTime(100,100000000);// 参数1:秒数 参数2:纳秒 ROS_INFO("时刻:%.2f",someTime.toSec()); //100.10 ros::Time someTime2(100.3);//直接传入 double 类型的秒数 ROS_INFO("时刻:%.2f",someTime2.toSec()); //100.30

【防盗标记–盒子君hzj】

2.python版本 # 获取当前时刻 right_now = rospy.Time.now() rospy.loginfo("当前时刻:%.2f",right_now.to_sec()) rospy.loginfo("当前时刻:%.2f",right_now.to_nsec()) # 自定义时刻 some_time1 = rospy.Time(1234.567891011) some_time2 = rospy.Time(1234,567891011) rospy.loginfo("设置时刻1:%.2f",some_time1.to_sec()) rospy.loginfo("设置时刻2:%.2f",some_time2.to_sec()) # 从时间创建对象 # some_time3 = rospy.Time.from_seconds(543.21) some_time3 = rospy.Time.from_sec(543.21) # from_sec 替换了 from_seconds rospy.loginfo("设置时刻3:%.2f",some_time3.to_sec())

【防盗标记–盒子君hzj】 . .

(2)持续时间设置与时刻运算函数API 1.C++版本(推荐)

(1)持续时间设置

ROS_INFO("当前时刻:%.2f",ros::Time::now().toSec()); ros::Duration du(10);//持续10秒钟,参数是double类型的,以秒为单位 du.sleep();//按照指定的持续时间休眠 ROS_INFO("持续时间:%.2f",du.toSec());//将持续时间换算成秒 ROS_INFO("当前时刻:%.2f",ros::Time::now().toSec());

【防盗标记–盒子君hzj】

(2)时刻运算函数

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;//异常 2.python版本

(1)持续时间设置

# 持续时间相关API rospy.loginfo("持续时间测试开始.....") du = rospy.Duration(3.3) rospy.loginfo("du1 持续时间:%.2f",du.to_sec()) rospy.sleep(du) #休眠函数 rospy.loginfo("持续时间测试结束.....")

(2)时刻运算函数【防盗标记–盒子君hzj】

rospy.loginfo("时间运算") now = rospy.Time.now() du1 = rospy.Duration(10) du2 = rospy.Duration(20) rospy.loginfo("当前时刻:%.2f",now.to_sec()) before_now = now - du1 after_now = now + du1 dd = du1 + du2 # now = now + now #非法 rospy.loginfo("之前时刻:%.2f",before_now.to_sec()) rospy.loginfo("之后时刻:%.2f",after_now.to_sec()) rospy.loginfo("持续时间相加:%.2f",dd.to_sec()) (3)设置运行频率Rate函数API 1.C++版本(推荐) ros::Rate rate(1);//指定频率 while (true) { ROS_INFO("-----------code----------"); rate.sleep();//休眠,休眠时间 = 1 / 频率。 }

【防盗标记–盒子君hzj】

2.python版本 # 设置执行频率 rate = rospy.Rate(0.5) while not rospy.is_shutdown(): rate.sleep() #休眠 rospy.loginfo("+++++++++++++++") (4)休眠函数 python版本 rospy.sleep(1)

. .

四、ROS信息输出函数API 0.C++的信息输入输出 使用C++的cout和cin要包含iostream的头文件,#include 在cout或者cin出现错误的时候,可能是C++标准导致的,改成std::cout


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3