import { useState, type ReactNode } from 'react'; import { Camera, Settings2 } from 'lucide-react'; import type { CameraDirection, UrdfEnhancementOptions } from '../../project/urdfToMjcf'; import { Button, Dialog, Select, Tooltip } from '../../components/ui'; import { ROBOT_PROFILES } from '../../robot/registry'; function OptionCard({ checked, onChange, icon, title, description, children, }: { checked: boolean; onChange: (checked: boolean) => void; icon: ReactNode; title: string; description: string; children?: ReactNode; }) { return ( ); } export function UrdfImportOptionsDialog({ open, path, mountBodies = [], initialProfileId = '', onConfirm, onSkip, }: { open: boolean; path?: string; mountBodies?: string[]; initialProfileId?: string; onConfirm: (options: UrdfEnhancementOptions, profileId?: string) => void; onSkip: () => void; }) { const [profileId, setProfileId] = useState(initialProfileId); const [options, setOptions] = useState(() => ({ addActuators: true, addSensors: true, sensorType: 'camera', cameraMountBody: mountBodies.find((name) => /(head|camera|sensor|neck|头)/i.test(name)) ?? mountBodies.at(-1), cameraPosition: [0.1, 0, 0.05], cameraDirection: '+X', })); const setPosition = (axis: number, value: number) => setOptions((current) => { const position: [number, number, number] = [...(current.cameraPosition ?? [0.1, 0, 0.05])]; position[axis] = Number.isFinite(value) ? value : 0; return { ...current, cameraPosition: position }; }); return ( } >

导入 {path} 的仿真组件

{profileId.startsWith('MobileManipulator-') && (

加载抓取物体与搬运目标;进入控制台 → 强化学习任务即可一键训练。移动操作模式不启用外部控制桥。

)} {profileId && !profileId.startsWith('MobileManipulator-') && (

将校验模型语义与网格:允许换色、格式等非机械变体,拒绝关节拓扑、轴向、尺寸等变化。采用浮动基座、简化被动滚子/碰撞和九路伺服;不使用下方通用组件,不启用相机。

)}
setOptions((value) => ({ ...value, addActuators }))} icon={} title="为关节添加驱动器" description="生成不限幅 motor 控制输入:hinge 为 N·m,slide 为 N。已有驱动器不重复添加。" /> setOptions((value) => ({ ...value, addSensors }))} icon={} title="添加传感器" description="在浮动基座添加三轴陀螺仪和三轴加速度计(6轴 IMU),并添加一台 640×480 固定摄像头。" /> {options.addSensors && (
摄像头安装参数
{(['X', 'Y', 'Z'] as const).map((axis, index) => ( ))}
安装坐标说明
)}

自动组件只写入浏览器内生成的 MJCF,不会修改本地 URDF 文件;使用“原生 URDF”加载模式时不会注入这些组件。

); }