Skip to content

Commit

Permalink
docs: 更新:ROS2-005-通信机制:服务通信-分支贰:Python实现 新增相关校验操作
Browse files Browse the repository at this point in the history
  • Loading branch information
JeacsonSnake committed Oct 12, 2024
1 parent a530dd9 commit b7eb775
Showing 1 changed file with 29 additions and 1 deletion.
30 changes: 29 additions & 1 deletion docs/learningNote/Ros2_Note/2024_10_03_004.md
Original file line number Diff line number Diff line change
Expand Up @@ -156,6 +156,7 @@ ros2 service call add_ints base_interfaces_demo/srv/AddInts "{'num1': 10, 'num2'
import sys
import rclpy
from rclpy.node import Node
from rclpy.logging import get_logger
from base_interfaces_demo.srv import AddInts

# 3.自定义节点类;
Expand Down Expand Up @@ -190,6 +191,11 @@ class MinimalClients(Node):

def main():
{  
# 校验操作
if len(sys.argv) != 3:
get_logger("rclpy").info("请提交两个整型数据!")
return

# 2. 初始化 ROS2 客户端;
  rclpy.init()  

Expand All @@ -215,8 +221,30 @@ if __name__ == '__main__':    

```

::: tip 为什么这里的客户端不使用spin函数进行之前的挂起操作了?
以下有多个注意事项,还请了解:

::: tip ①、如何在节点对象外获取日志对象?

在上述代码中,由于运行逻辑的限制以及出于对性能优化的考虑,我们需要在初始化节点对象前先对用户所输入的对象进行参数校验。一旦发现参数校验失败,需要通过日志对象对用户进行提示。而由于日志对象是节点对象内的一个内置函数,我们需要通过其他的方式访问该日志对象。

除通过节点对象调用日志函数外,我们可以在使用:

```python

from rclpy.logging import get_logger

```

导入相关函数之后,直接使用 `get_logger()` 进行函数的获取。其中 `get_logger()` 需要传入字符串类型的变量名,例如上述代码中所用到的 `get_logger("rclpy")` 内的 `"rclpy"`

这种方法一般会在没有创建节点对象,或者在节点对象已被销毁的情况下使用。

:::

::: tip ②、为什么这里的客户端不使用spin函数进行之前的挂起操作了?

在本节**这个**服务通信的案例中,客户端针对相关请求只需发送一次,因此在这执行逻辑上,再次挂起客户端意义不大。并且该客户端没有在自定义类中定义相关需要使用 `spin()` 函数进行操作的回调函数,实现中也并不需要使用除 `spin_unitl_future_complete()` 函数外的其他回调函数进行数据处理,因此在这里不必要再在请求结束后继续使用spin函数进行之前的挂起操作。这会与之前的相关操作有些不同,还请注意。

:::

### 3. 编辑配置文件
Expand Down

0 comments on commit b7eb775

Please sign in to comment.