You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python环境下ROS2如何检测对象是否为ROS消息类型

ROS2中判断ROS消息对象的实现方法

ROS2的Python消息生成机制没有沿用ROS1的公共基类设计,所以无法通过类继承链(__mro__)找到统一的父类做类型判断,官方提供的标准判断接口在rosidl_runtime_py包中。

标准判断实现

直接引入官方工具方法即可完成判断,兼容所有ROS2发行版(Foxy及后续版本):

from rosidl_runtime_py.utilities import is_message

# 传入待判断的对象,返回True即为合法ROS2消息实例
check_result = is_message(your_obj)

这个方法可以正确识别所有ROS2消息类型,包括普通话题消息、服务的请求/响应对象、动作的目标/结果/反馈对象,不会出现漏判、误判。

判断逻辑说明

is_message不依赖类继承关系判断,而是校验对象是否符合ROS2消息的固定结构规范:

  • 检查类是否携带__msg_type__标识属性
  • 校验是否存在ROS2消息要求的序列化、反序列化、类型获取等标准方法
    这种设计避开了无公共基类的问题,也比自行判断属性存在性更严谨,不会把自定义的同名属性类误判为ROS消息。

验证示例

对应继承链测试场景,验证效果如下:

>>> from example_interfaces.srv import AddTwoInts
>>> from rosidl_runtime_py.utilities import is_message
>>> req = AddTwoInts.Request()
>>> print(is_message(req))
True
>>> print(is_message(object()))
False

如果需要区分服务类型、动作类型,同模块下还提供了is_service()、is_action()等对应判断方法,可以直接调用。


内容的提问来源于stack exchange,提问作者Iñigo Moreno

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.29 21:24:20