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

如何为含Kawasaki机器人场景添加静态相机并实现图像输出与Meshcat显示

在Drake中添加静态相机并对接OpenCV与Meshcat

一、添加静态RGB相机

不用纠结RgbdSensor的复杂用法,仅启用它的RGB模块即可满足需求,步骤如下:

  • 定义相机安装位姿:用RigidTransform指定相机在世界坐标系下的位置(比如目标初始位置正上方2米)和朝向(通常朝下对准物体)。
  • 配置相机参数:通过CameraInfo设置分辨率、视野角等参数。
  • 创建RgbdSensor实例:指定父帧为世界帧,传入位姿和参数,禁用深度相机。
  • 将传感器接入场景图,完成添加。

示例代码片段:

from pydrake.systems.sensors import RgbdSensor, CameraInfo
from pydrake.geometry import RigidTransform, RotationMatrix
import numpy as np

# 1. 定义相机位姿:世界原点正上方2米,镜头朝下
camera_pose = RigidTransform(
    RotationMatrix.MakeXRotation(np.pi),
    [0, 0, 2]
)

# 2. 设置相机参数:640x480分辨率,60°垂直视野
camera_info = CameraInfo(width=640, height=480, fov_y=np.pi/3)

# 3. 创建仅启用RGB的相机
rgbd_camera = RgbdSensor(
    parent_id=scene_graph.world_frame_id(),
    X_PB=camera_pose,
    camera_info=camera_info,
    show_window=False,
    depth_enabled=False
)

# 4. 接入场景图
builder.AddSystem(rgbd_camera)
builder.Connect(
    scene_graph.get_query_output_port(),
    rgbd_camera.query_input_port()
)

二、获取图像用于OpenCV处理

Drake的图像格式需转换为OpenCV兼容的cv::Mat,用ImageToMatConverter可直接完成格式转换:

  • 创建转换器实例,连接相机的RGB输出端口。
  • 在仿真循环中读取转换器输出,得到OpenCV可用的BGR格式图像(自动完成RGB到BGR的转换)。

示例代码片段:

from pydrake.systems.sensors import ImageToMatConverter
import cv2

# 创建图像格式转换器
image_converter = ImageToMatConverter()
builder.AddSystem(image_converter)
builder.Connect(
    rgbd_camera.color_image_output_port(),
    image_converter.input_port()
)

# 仿真循环中获取并处理图像
context = diagram.CreateDefaultContext()
simulator = Simulator(diagram, context)

while True:
    simulator.AdvanceTo(simulator.get_context().get_time() + 0.01)
    # 获取OpenCV格式图像
    cv_image = image_converter.output_port().Eval(context)
    # 执行HSV滤波等处理
    hsv_image = cv2.cvtColor(cv_image, cv2.COLOR_BGR2HSV)
    # 后续目标检测/定位逻辑...

三、在Meshcat中显示相机图像

用MeshcatImageVisualizer可将相机实时图像嵌入Meshcat浏览器窗口:

  • 创建可视化器实例,指定Meshcat对象和相机RGB输出端口。
  • 连接端口后,启动仿真时Meshcat会自动生成名为指定名称的图像面板。

示例代码片段:

from pydrake.geometry import Meshcat
from pydrake.systems.meshcat_visualizer import MeshcatImageVisualizer

# 初始化Meshcat
meshcat = Meshcat()

# 创建相机图像可视化器
image_vis = MeshcatImageVisualizer(
    meshcat=meshcat,
    port=rgbd_camera.color_image_output_port(),
    name="Static_Camera_View"
)
builder.AddSystem(image_vis)
builder.Connect(
    rgbd_camera.color_image_output_port(),
    image_vis.input_port()
)

# 启动后访问Meshcat链接即可看到图像面板
print("Meshcat URL:", meshcat.web_url())

整合提示

  1. 确保你的场景图已包含Kawasaki机器人和待搬运部件。
  2. 按「构建场景图→添加相机→添加转换器与可视化器→连接端口→构建Diagram→启动仿真」的顺序整合代码。
  3. 调整相机位姿时,直接修改camera_pose的平移/旋转参数即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.01 09:15:03