1.服务
   
    
     应该了解:
    
    
    >
    
     服务与主题的不同点;
    
    
    >
    
     使用服务的方式,发布请求并获得响应
    
    。
   
    服务是 ROS  graph中节点的另一种通信方式。 服务基于call-and-response模型,而不是主题的publisher-subscriber(发布者-订阅者)模型。
    
     
      主题允许节点订阅数据流并获得持续更新,服务仅在客户端专门调用时才提供数据。
     
    
   
     
   
    
     ros2服务调用
    
   
#服务调用的形式
ros2 service call <service_name> <service_type> <arguments>
#下方为两个例子
ros2 service call /clear std_srvs/srv/Empty
ros2 service call /spawn turtlesim/srv/Spawn "{x: 2, y: 2, theta: 0.2, name: ''}"  #注意到x:有空格再加入数值,name:同样有空格再加入字符串使用服务调用,必须知道service_name,service_type,arguments的形式
#返回系统中当前活动的所有服务的列表service_name
ros2 service list
#从以上知晓服务的名字后,可获取服务类型type_name
ros2 service type <service_name>
ros2 service list -t  #同时获取服务名字及服务类型
#获取argument,从命令行调用服务时需要知道的输入参数结构。 
ros2 interface show <type_name>
    2.参数(parameter)
   
    
     应该了解:
    
    
    >
    
     参数的获取、设置和保存
    
    
    >
    
     参数文件保存和设置
    
   
参数设置
#查看各个节点参数
ros2 param list
#显示参数的类型和当前值
ros2 param get <node_name> <parameter_name>
#修改参数值
ros2 param set <node_name> <parameter_name> <value>
    设置参数
    
     set
    
    命令只会在当前的会话中更改它们,而不是永久更改。 但是,可以保存设置更改并在下次启动节点时重新加载它们。
   
参数转储
#将节点的所有当前参数值“转储”到一个文件中以供以后保存
ros2 param dump <node_name>   #在工作区运行的目录中会生成一个新文件
#将参数从文件加载到当前运行的节点:
ros2 param load <node_name> <parameter_file>
#若在启动节点时就要加载参数,可用:
ros2 run <package_name> <executable_name> --ros-args --params-file <file_name>
    3.操作(action)
   
    应当了解:
    
    >
    
     action的基本概念
    
    
    >
    
     发送action的方式
    
   
操作(action)是 ROS 2 中的一种通信类型,用于长时间运行的任务。 它们由三部分组成:目标、反馈和结果。
    
     操作建立在主题和服务上
    
    。 它们的功能类似于服务,但可以取消操作。 它们还提供稳定的反馈,而不是返回单一响应的服务。
   
     
   
在客户端给出Goal Service Request后,服务器返回Response,而后客户端给出Result Service Request,服务器多次反馈后,再返回Response.
    
     主题,服务与操作:
    
   
    主题:单一方向持续数据流,传感器数据或机器人状态
    
    服务:应答机制,调用服务,完成后受到回复,例如询问天气情况,查询电量
    
    操作:一次无法完成,需要多次才可以完成,或者完成过程需要中断,甚至终止,例如导航,抓取动作。
   
查看节点的action
ros2 node info <node_name>
#对于返回结果,着重看底部的Action Servers以及Action Clients查看当前ROS graph的action
ros2 action list
ros2 action list -t  #会返回action_type查看action的信息
ros2 action info <action_name>
#返回action_name,执行此action的客户端和服务器
    在自己发送或执行操作目标之前,您还需要的另一条信息是
    
     操作类型的结构
    
    。
   
ros2 interface show <action_type>
#例子
ros2 interface show turtlesim/action/RotateAbsolute
#返回结果
The desired heading in radians
float32 theta
---
The angular displacement in radians to the starting position
float32 delta
---
The remaining rotation in radians
float32 remaining
#结果解析:第一部分是goal request的结构,第二部分是response的结构,第三部分是feedback的结构发送action goal
ros2 action send_goal <action_name> <action_type> <values>
ros2 action send_goal <action_name> <action_type> <values> --feedback #可以看到反馈的内容 
