ROS学习手册--[1]Actionlib的使用

Actionlib 是ROS非常重要的库,像执行各种运动的动作,例如控制手臂去抓取一个杯子,这个过程可能复杂而漫长,执行过程中还可能强制中断或反馈信息,这时Actionlib就能大展伸手了。 1.原理 1.1功能 在任何一个比较大的基于ROS的系统,都会有这样的情况,向某个节点发送请求执行某一个任务,并返回相应的执行结果,这种通常用ROS的服务(services)完成。然而,有一些情况服务执行的时间很长,在执行中想要获得任务处理的进度,或可能取消执行任务,Actionlib 就能实现这样的功能,它是ROS的一个非常重要的库。可以实现一些简单的状态机功能,算的上是SMACH的一个弱化版。 Node : ##typedef的语法描述: typedef 类型名称 类型标识符; ##typedef的用法: 1) 为基本数据类型定义新的类型名。 2) 为自定义数据类型(结构体、公用体和枚举类型)定义简洁的类型名称。 3) 为数组定义简洁的类型名称。 4) 为指针定义简洁的名称。 ##typedef的使用注意事项: 1) typedef的目的是为已知数据类型增加一个新的名称。因此并没有引入新的数据类型。 2) typedef 只适于类型名称定义,不适合变量的定义。 3) typedef 与#define具有相似的之处,但是实质不同。 ##typedef和define具体的详细区别 1) #define是预处理指令,在编译预处理时进行简单的替换,不作正确性检查,不关含义是否正确照样带入,只有在编译已被展开的源程序时才会发现可能的错误并报错。例如: #define PI 3.1415926 程序中的:area=PI*r*r 会替换为3.1415926*r*r 如果你把#define语句中的数字9 写成字母g 预处理也照样带入。 2)typedef是在编译时处理的。它在自己的作用域内给一个已经存在的类型一个别名,但是You cannot use the typedef specifier insidea function definition。 3)typedef int * int_ptr与 #define int_ptr int * 作用都是用int_ptr代表 int * ,但是二者不同,正如前面所说 ,#define在预处理 时进行简单的替换,而typedef不是简单替换 ,而是采用如同定义变量的方法那样来声明一种类型。也就是说; 参考文献: https://www.cnblogs.com/cv-pr/p/6005013.html https://www.cnblogs.com/seventhsaint/archive/2012/11/18/2805660.html

猜你喜欢

转载自www.cnblogs.com/Way-cn/p/11605060.html