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

apt安装Drake通过CMakeLists加载外部URDF报错求助

解决Drake加载自定义URDF时的路径错误

错误原因

drake::FindResourceOrThrow是Drake专门用来查找自身内置资源(比如官方示例模型)的函数,它强制要求路径以drake/开头,用来定位Drake安装包或源码中的资源文件。你用它加载自己项目中的URDF,必然会触发路径格式校验错误。

解决方案

方案1:直接使用本地文件路径

放弃FindResourceOrThrow,直接传入URDF的绝对路径或程序运行目录的相对路径:

// 示例:使用绝对路径
const std::string urdf = "/home/your_username/path_to_urdf/urdf.urdf";
// 或者使用相对路径(需确保程序运行时当前目录正确)
// const std::string urdf = "../path_to_urdf/urdf.urdf";

drake::multibody::Parser(plant_).AddModelFromFile(urdf);

方案2:通过CMake传递路径(适配colcon构建,推荐)

在CMakeLists.txt中定义URDF路径并传递给代码,避免硬编码绝对路径:

  1. 在CMakeLists.txt中添加:
# 假设URDF位于项目的resources目录下
set(URDF_PATH "${CMAKE_CURRENT_SOURCE_DIR}/resources/urdf.urdf")
# 将路径注入C++代码
add_definitions(-DURDF_PATH="${URDF_PATH}")
  1. 在C++代码中使用:
const std::string urdf = URDF_PATH;
drake::multibody::Parser(plant_).AddModelFromFile(urdf);

方案3:配置Drake资源系统(复杂场景可选)

如果你的项目需要纳入Drake的资源管理体系,可以设置DRAKE_RESOURCE_ROOT环境变量指向你的资源根目录,或通过CMake配置资源索引,但这对于简单加载自定义URDF来说冗余,优先推荐前两种方案。

关于你提到的GitHub Issue

该Issue讨论的是外部项目集成Drake官方资源系统的配置逻辑,和你的场景无关——你不需要将自身URDF纳入Drake的官方资源路径,直接加载本地文件即可解决问题。

内容的提问来源于stack exchange,提问作者Murt

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 19:25:28