zoukankan      html  css  js  c++  java
  • 第十二课 Actionlib(1)

    一Actionlib概念

    在ROS系统中,有时需发送请求给某个节点完成相应的任务,同时获得一个一个响应,这种情况下可以通过ROS服务来 完成;然而,在某些情况下,服务需要很长时间才能执行完,如让机器人到达一个指定的地点,用户想要取消或者定期得到请求执行的进度的反馈,这个时候我们选择actionlib来完成.

    二Actionlib的实现

    三服务器的状态转移(server State transitions)

    当客户端接受到目标之后,首先进入挂起的状态,如果服务器拒绝了(setRejected)请求,那么它最终的状态变为rejected被拒绝.如果被接受(setAccepted)则为激活的状态,可能由于服务器内部的某种原因使该任务终止了(setAborted),如果我们在执行目标的时候客户端有一个请求取消的命令(CancelRequest),则状态会变为PREEMPTING(正在抢占),正在抢占状态呢,如果由于服务器内部某种原因终止了则会变为ABORTED,如果是被取消掉,则状态为抢占(PREEMPTED).在激活的状态下如果是成功则设置为SUCCEEDED.在挂起的状态下(PENDING)仍然有客户端的请求取消(cancelRequest),那么这是时候服务器并不知道目标有没有被取消,这个时候的状态为RECALLING,如果它被再次取消掉setcancel,那么它的状态就变为RECALLED.如果它被setrejected,那么它的状态就变为REJECTED.

    action文件是类似于我们定义的消息文件,它与消息和服务是基本一致的,

    下面是它的定义首先是目标变量type goal_var,然后是结果变量,最后是反馈的变量.

    这节课以计算斐波拉契数列为例子来说明Action文件

    下面创建一个包

    然后编译之

    catkin_make

    然后在包下面新建一个文件夹叫做action,然后再在下面新建一个文件把上面的action放进去

    进入package.xml文件

    进入CMakeLists.txt

    首先添加动作action文件

    完成以上步骤后,保存再编译

    生成了下面一些动作的头文件

    下面来简单的完成服务器和客户端

    在客户端中的类的构造函数参数有一个NodeHandle,客户端的名字,以及默认的spin_thread=true自动等待消息的回调.

    对于服务器的构造函数也有一个NodeHandle,服务器的名字,回调函数,以及是否自动运行.

    以实际例子为例

    创建一个源文件fibonacciclient.cpp

    下面来看看该客户端都完成了什么任务:

    首先创建一个客户端,然后等待服务,如果与服务器连接上之后,再创建一个Fibonacci goal对象,接着对goal赋值,并发送目标goal,接着是等待结果,如果结果在30s内完成了,则返回true,输出状态否则返回false.

    对于客户端获得结果反馈的两种方法:

    由于上面写的第一种客户端必须等待它的结果,即waitForResult,二第二种客户端可以得到它在执行过程中的反馈.

    创建一个源文件fibonacciclientprogress.cpp

    s上面是三个回调函数的原型

    进入CMakeLists.txt

    add_executable(fibonacciclient src/fibonacciclient.cpp)

    add_executable(fibonacciclientprogress src/fibonacciclientprogress.cpp)

    target_link_libraries(fibonacciclient ${catkin_LIBRARIES})

    target_link_libraries(fibonacciclientprogress ${catkin_LIBRARIES})

    然后编译

    catkin_make

  • 相关阅读:
    使用 libevent 和 libev 提高网络应用性能
    An existing connection was forcibly closed by the remote host
    各种浏览器的兼容css
    vs输出窗口,显示build的时间
    sass
    网站设置404错误页
    List of content management systems
    css footer not displaying at the bottom of the page
    强制刷新css
    sp_executesql invalid object name
  • 原文地址:https://www.cnblogs.com/gary-guo/p/6767545.html
Copyright © 2011-2022 走看看