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

无法在Bazel工作区将底层ROS2与drake-ros作为外部依赖使用

解决Drake-ROS Bazel规则引入Debian版ROS2 Humble的CMake错误

我之前碰到过类似的问题,Debian预编译的ROS2包有时候会存在导出路径、目标定义的小问题,和Bazel的ros2_local_repository配合时容易触发这类报错。这里有几个从易到难的解决方案,推荐按顺序尝试:

1. 排除无关的问题包

从错误信息来看,出问题的大多是demo或测试类包(比如quality_of_service_demo_cpp、empty_using_image_tools),你的outdoor_slam_ros2大概率不需要这些包。直接在ros2_local_repository里排除它们,就能跳过这些错误:

ros2_local_repository(
    name = "ros2",
    workspaces = ["/opt/ros/humble/"],
    exclude = [
        "quality_of_service_demo_cpp",
        "empty_using_image_tools",
        "empty_using_tf2_bullet",
        # 如果后续还有其他报错的包,继续添加到这里
    ]
)

2. 补全ROS2依赖开发包

Debian默认安装的ROS2可能缺少部分rosidl类型支持的开发包,导致CMake找不到对应的目标。执行以下命令补全依赖:

sudo apt update && sudo apt install \
  ros-humble-sensor-msgs ros-humble-tf2 ros-humble-geometry-msgs ros-humble-tf2-ros \
  ros-humble-rosidl-typesupport-fastrtps-c ros-humble-rosidl-typesupport-fastrtps-cpp \
  ros-humble-rosidl-typesupport-introspection-c ros-humble-rosidl-typesupport-introspection-cpp \
  ros-humble-rosidl-default-generators

安装完成后重新构建,很多"目标未找到"的错误都是因为缺失对应的开发包导致的。

3. 手动引入单个所需ROS2包

如果排除法还是不行,可以放弃引入整个ROS2 workspace,只手动引入outdoor_slam_ros2实际依赖的包。比如针对sensor_msgs和tf2相关包,在WORKSPACE里添加:

# 引入sensor_msgs
new_local_repository(
    name = "sensor_msgs",
    path = "/opt/ros/humble/share/sensor_msgs/cmake",
    build_file_content = """
load("@drake_ros//ros:defs.bzl", "ros_cmake_package")
ros_cmake_package()
"""
)

# 引入tf2
new_local_repository(
    name = "tf2",
    path = "/opt/ros/humble/share/tf2/cmake",
    build_file_content = """
load("@drake_ros//ros:defs.bzl", "ros_cmake_package")
ros_cmake_package()
"""
)

# 按同样的方式添加其他依赖包,比如geometry_msgs、tf2_ros等

这种方式更精准,避免引入无关的有问题包。

4. 使用本地Colcon构建的ROS2 Workspace

如果上述方法都不奏效,可以创建一个本地Colcon workspace,编译你需要的ROS2包源码,这样能完全控制包的导出配置,避免Debian预编译包的兼容性问题:

  1. 创建并构建本地ROS2 workspace:
mkdir -p ~/ros2_humble_ws/src
cd ~/ros2_humble_ws/src
# 克隆你需要的ROS2核心包(根据slam包的依赖调整)
git clone https://github.com/ros2/common_interfaces.git -b humble
git clone https://github.com/ros2/tf2.git -b humble
git clone https://github.com/ros2/rosidl_typesupport.git -b humble
cd ..
colcon build --symlink-install
  1. 在WORKSPACE里指向这个本地编译的workspace:
ros2_local_repository(
    name = "ros2",
    workspaces = ["~/ros2_humble_ws/install/"],
)

这种方式虽然麻烦一点,但兼容性最好,适合解决复杂的依赖问题。

建议先从方案1和方案2开始尝试,这两个最快捷,大概率能解决你的问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 10:45:28