在 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>
核心解析函数说明
-
文件加载:
doc.LoadFile():加载 XML 文件,返回错误码- 通过
doc.ErrorName()和doc.ErrorLineNum()获取错误详情
-
节点访问:
RootElement():获取根节点FirstChildElement("节点名"):获取第一个子节点NextSiblingElement("节点名"):遍历同级别节点
-
数据读取:
GetText():获取节点文本内容(字符串)QueryIntText(&var)/QueryDoubleText(&var):解析整数 / 浮点数Attribute("属性名"):获取节点属性值QueryIntAttribute("属性名", &var):解析属性为整数
编译与运行
- 编译节点:
bash
colcon build --packages-select controller_executor
source install/setup.bash
- 运行节点(指定 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 文件,适用于读取配置参数、设备信息等场景。
247

被折叠的 条评论
为什么被折叠?



