ROS2机器人开发书籍中6.2.4怎么显示出图6-10的效果
-
问题描述:
根据书上的代码清单6-16 6-17 6-18 6-19 6-20编写代码后,重新构建并运行书P176上所述的display_robot.launch.py及指定模型first_robot.urdf.xacro后,显示结果为书P173的图6-9,于是将first_robot.urdf.xacro改为了fishbot.urdf.xacro,然后就无法在rviz中打开并显示模型具体细节和上下文:
代码均为拷贝您提供的ros2bookcode
同时参考书籍《ROS2机器人开发》base.urdf.xacro
<?xml version="1.0"?>
<robot xmlns:xacro="http://www.ros.org/wiki/xacro"><xacro:macro name="base_xacro" params="length radius"> <link name="base_link"> <visual> <origin xyz="0 0 0.0" rpy="0 0 0" /> <geometry> <cylinder length="${length}" radius="${length}" /> </geometry> <material name="blue"> <color rgba="0.1 0.1 1.0 0.5"/> </material> </visual> </link> </xacro:macro>
</robot>
fishbot.urdf.xacro
<?xml version="1.0"?>
<robot xmlns:xacro="http://www.ros.org/wiki/xacro" name="fishbot">
<xacro:include filename="$(find fishbot_description)/urdf/fishbot/base.urdf.xacro" />
<!-- 传感器组件 -->
<xacro:include filename="$(find fishbot_description)/urdf/fishbot/sensor/imu.urdf.xacro" />
<xacro:include filename="$(find fishbot_description)/urdf/fishbot/sensor/laser.urdf.xacro" />
<xacro:include filename="$(find fishbot_description)/urdf/fishbot/sensor/camera.urdf.xacro" /><xacro:base_xacro length="0.12" radius="0.1" /> <!-- 传感器 --> <xacro:imu_xacro xyz="0 0 0.02" /> <xacro:laser_xacro xyz="0 0 0.10" /> <xacro:camera_xacro xyz="0.10 0 0.075" />
</robot>
尝试过的解决方法:
将first_robot.urdf.xacro改为了fishbot.urdf.xacro,然后就无法在rviz中打开并显示模型
ros2 launch fishbot_description display_robot.launch.py model:=/home/liu/chapt6/chapt6_ws/src/fishbot_description/urdf/fishbot/fishbot.urdf.xacro
[INFO] [launch]: All log files can be found below /home/liu/.ros/log/2024-09-22-21-11-27-229207-liu-VirtualBox-6648
[INFO] [launch]: Default logging verbosity is set to INFO
[ERROR] [launch]: Caught exception in launch (see debug for traceback): executed command failed. Command: xacro /home/liu/chapt6/chapt6_ws/src/fishbot_description/urdf/fishbot/fishbot.urdf.xacro
Captured stderr output: XML parsing error: mismatched tag: line 19, column 10
when processing file: /home/liu/chapt6/install/fishbot_description/share/fishbot_description/urdf/fishbot/sensor/camera.urdf.xacro
included from: /home/liu/chapt6/chapt6_ws/src/fishbot_description/urdf/fishbot/fishbot.urdf.xacroCheck that:
- Your XML is well-formed
- You have the xacro xmlns declaration: xmlns:xacro="http://www.ros.org/wiki/xacro"
-
根据您提供的信息和错误日志,问题出现在处理
fishbot.urdf.xacro
文件时,特别是在包含camera.urdf.xacro
文件时出现了 XML 解析错误。这个错误提示“mismatched tag”,通常意味着在某个 XML 或 XACRO 文件中存在未正确闭合的标签。解决步骤
-
检查 XML 格式:
确保所有 XML 和 XACRO 文件都正确闭合了所有标签。这包括<link>
,<visual>
,<geometry>
,<material>
等所有标签。 -
检查
camera.urdf.xacro
文件:
根据错误日志,问题出现在camera.urdf.xacro
文件中。请打开这个文件并检查是否有未闭合的标签。特别是查看行 19 附近,因为错误指出是在这里发生的。例如,可能的问题包括:
<link>
标签没有闭合 (</link>
)。<visual>
,<geometry>
, 或<material>
标签没有正确闭合。- 可能有其他非法的 XML 结构,如缺少结束标签或错误的嵌套。
-
验证 XACRO 宏:
如果camera.urdf.xacro
使用了 XACRO 宏,请确保这些宏在base.urdf.xacro
或其他被包含的文件中正确定义,并且也遵循了良好的 XML 格式。 -
重新运行 XACRO 并检查输出:
在命令行中直接运行 XACRO 来查看输出,这可以帮助识别问题:xacro /home/liu/chapt6/chapt6_ws/src/fishbot_description/urdf/fishbot/fishbot.urdf.xacro
注意任何可能的错误或警告信息。
-
检查文件路径和包含:
确保所有 XACRO 文件的路径都正确无误,并且所有xacro:include
语句都指向了正确的文件。 -
清理和重建:
如果之前有过修改,确保清理了旧的构建文件并重新构建了整个工作区:colcon build --packages-select fishbot_description
-
检查 ROS 2 环境:
确保 ROS 2 环境设置正确,特别是工作空间的路径和 ROS 2 安装路径。
调试技巧
- 使用文本编辑器(如 VSCode 或 Sublime Text)的 XML 验证工具来帮助识别格式问题。
- 在命令行中使用
cat
命令和管道|
加上grep
或less
来查看文件内容,特别是错误指向的行附近的内容。
通过上述步骤,您应该能够定位并解决导致 XML 解析错误的问题。如果问题仍然存在,可能需要进一步检查所有相关文件和依赖项。
以上为生成回答,仅供参考~
-
-
Ubuntu22.04 VirtualBox ROS2 Humble
-
@niuniu36 在 ROS2机器人开发书籍中6.2.4怎么显示出图6-10的效果 中说:
Captured stderr output: XML parsing error: mismatched tag: line 19, column 10
代码有写错的地方
-
@小鱼 已解决,谢谢~