ROS2 解析XML 文件

在 ROS2 中解析 XML 文件可以使用 C++ 标准库或第三方库(如 TinyXML2、PugiXML)。以下是使用 TinyXML2(轻量级 轻量且常用)解析 XML 的完整实现,适用于 ROS2 节点:

步骤 1:添加 TinyXML2 依赖

首先在 CMakeLists.txt 中添加 TinyXML2 依赖:

cmake

# 在 find_package 后添加
find_package(tinyxml2 REQUIRED)

# 在 target_link_libraries 中链接
target_link_libraries(controller_executor_node
  PRIVATE
  tinyxml2::tinyxml2
)

步骤 2:XML 文件解析代码实现

以下是在 ROS2 节点中解析 XML 文件的示例,包含读取、解析和错误处理:

ROS2 中使用 TinyXML2 解析 XML 文件

V1

创建时间:11:37

步骤 3:示例 XML 文件(config/params.xml

创建一个 XML 文件作为解析对象,放在功能包的 config 目录下:

xml

<?xml version="1.0" encoding="UTF-8"?>
<RobotConfig>
    <Device type="zmotion">
        <IP>192.168.0.11</IP>
        <Port>502</Port>
        <Timeout>2000</Timeout>
    </Device>

    <Axis id="1">
        <Speed>100.5</Speed>
        <Direction>positive</Direction>
        <Accel>500</Accel>
    </Axis>

    <Axis id="2">
        <Speed>80.0</Speed>
        <Direction>negative</Direction>
        <Accel>400</Accel>
    </Axis>
</RobotConfig>

核心解析函数说明

  1. 文件加载

    • doc.LoadFile():加载 XML 文件,返回错误码
    • 通过 doc.ErrorName()doc.ErrorLineNum() 获取错误详情
  2. 节点访问

    • RootElement():获取根节点
    • FirstChildElement("节点名"):获取第一个子节点
    • NextSiblingElement("节点名"):遍历同级别节点
  3. 数据读取

    • GetText():获取节点文本内容(字符串)
    • QueryIntText(&var) / QueryDoubleText(&var):解析整数 / 浮点数
    • Attribute("属性名"):获取节点属性值
    • QueryIntAttribute("属性名", &var):解析属性为整数

编译与运行

  1. 编译节点:

bash

colcon build --packages-select controller_executor
source install/setup.bash

  1. 运行节点(指定 XML 路径,默认使用 config/params.xml):

bash

ros2 run controller_executor xml_parser_node --ros-args -p xml_path:=config/params.xml

优势与注意事项

  • TinyXML2 优势:轻量、无依赖、易于集成,适合 ROS2 环境
  • 错误处理:务必检查每个步骤的返回值(如节点是否存在、解析是否成功)
  • 路径处理:使用 ROS2 参数动态指定 XML 路径,避免硬编码
  • 线程安全:TinyXML2 不保证线程安全,多线程解析时需加锁

通过以上方法,可在 ROS2 中高效解析 XML 文件,适用于读取配置参数、设备信息等场景。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值