场景管理模块(sceneManager.ts)

模块路径:web_rviz/src/visualization/sceneManager.ts

用途

维护 Three.js 场景、机器人姿态、TF 缓存、主题联动的视口样式、规划轨迹预览、运动采样位姿计算与点云显示。

公开类型

SceneTheme

  • dark

  • light

TfNode

  • frame:当前坐标系名称。

  • parent:父坐标系名称。

  • translation:平移向量。

  • rotation:旋转四元数。

RobotJointConnection

  • name:URDF 中的关节名称。

  • parent:父 link 名称。

  • child:子 link 名称。

  • type:URDF 关节类型,例如 fixedrevolute

RobotTransformDetail

  • xyz:平移,单位为米。

  • rpy:滚转、俯仰、偏航,单位为弧度。

RobotInertiaDetail

  • ixx / ixy / ixz / iyy / iyz / izz:若存在则返回惯量张量分量。

RobotLinkDetail

  • name:link 名称。

  • parentJoint:父 joint 名称;基座 link 时为 null

  • childJoints:子 joint 名称列表。

  • visualCount / collisionCount:URDF 中 visualcollision 元素数量。

  • materialNames:visual 中引用的材质名称列表。

  • mass:若存在则返回惯性质量。

  • inertialOrigin / inertia:从 URDF 解析出的惯性原点与惯量信息。

  • pose:当前相对固定坐标系的位姿。

RobotJointDetail

  • name / type:joint 名称与 URDF 类型。

  • parentLink / childLink:连接的父子 link。

  • axis:关节轴;未提供时为 null

  • origin:URDF joint 原点。

  • limit:若存在则包含上下限、力矩和速度限制。

  • dynamics:若存在则包含阻尼和摩擦参数。

  • mimic:若存在则包含 mimic 源关节、倍数和偏移。

  • currentValue:运行时当前关节值数组。

SceneManager 核心方法

  • setTargetFps(value):设置渲染目标帧率。

  • resetView():恢复默认相机位置与 OrbitControls 视角状态。

  • setTheme(theme):根据界面主题更新背景、网格、光照和主题相关的场景样式。

  • setPlannedTrajectoryVisible(visible):切换 MoveIt 规划轨迹预览的显示状态。

  • setPlannedTrajectoryPath(points, startPose?, endPose?):渲染规划轨迹折线,并可选显示 TCP 起点/终点姿态标记。

  • clearPlannedTrajectory():清除规划轨迹折线及起终点姿态标记。

  • setFixedFrame(frame) / getFixedFrame():设置和读取固定坐标系。

  • getRobotBaseFrame():获取当前机器人基座坐标系。

  • setEndEffectorFrame(frame):设置末端执行器坐标系。

  • setShowOnlyEndEffector(show):切换末端预览模式。

  • setVisibleTfFrames(frames):限制可见 TF 坐标轴集合;传入 null 可恢复不过滤状态。

  • getDefaultEndEffectorFrame():根据已加载的机器人模型推断默认末端坐标系。

  • getLinkList() / getFrameList():获取机器人 link 列表与已知 frame 列表。

  • getRobotJointConnections():返回按父子 link 排序的关节连接关系,适合 TF 树或结构视图复用。

  • getTfSnapshot() / getTfNodes():读取 TF 图快照信息。

  • clearTfRecords():清空 TF 记录并刷新显示。

  • getRelativeTransform(frame):获取相对固定坐标系的位姿,优先使用实时 TF。

  • getRobotRelativeTransform(frame):直接从机器人模型求取相对位姿,不依赖实时 TF。

  • getRobotLinkDetail(linkName):返回 TF 详情弹窗使用的 link 结构化信息。

  • getRobotJointDetail(jointName):返回 TF 详情弹窗使用的 joint 结构化信息。

  • setRobot(robot, baseFrame):设置或更新机器人模型。

  • updateJointStates(message):将关节状态应用到机器人模型。

  • upsertTfMessage(message):增量更新 TF 缓存。

  • setPointCloud(pointCloud):更新点云渲染对象。

  • dispose():释放渲染资源与监听器。

使用建议

  • 页面卸载前应调用 dispose(),避免 WebGL 资源泄漏。

  • 主题切换时应同步调用 setTheme(),确保视口背景与网格颜色和界面风格一致。

  • 需要按需显示 TF 时,优先使用 setVisibleTfFrames(),而不是直接改动 TF 树文本数据。

  • 使用关节采样来预览规划轨迹,或根据 MoveIt 关节轨迹点换算 TCP 曲线时,优先调用 getRobotRelativeTransform(),避免把预览轨迹和实时 TF 混在一起。

  • 使用 setPlannedTrajectoryPath() 时可同时传入 startPoseendPose,在预览路径的同时显示 TCP 起终点姿态。

  • 高频点云场景下,建议配合 maxPointstargetFps 控制性能。