Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
150 changes: 75 additions & 75 deletions dimos/robot/all_blueprints.py
Original file line number Diff line number Diff line change
Expand Up @@ -98,79 +98,79 @@


all_modules = {
"arm-teleop-module": "dimos.teleop.quest.quest_extensions",
"b-box-navigation-module": "dimos.navigation.bbox_navigation",
"b1-connection-module": "dimos.robot.unitree.b1.connection",
"camera-module": "dimos.hardware.sensors.camera.module",
"cartesian-motion-controller": "dimos.manipulation.control.servo_control.cartesian_motion_controller",
"control-coordinator": "dimos.control.coordinator",
"cost-mapper": "dimos.mapping.costmapper",
"demo-calculator-skill": "dimos.agents.skills.demo_calculator_skill",
"demo-robot": "dimos.agents.skills.demo_robot",
"detection2-d-module": "dimos.perception.detection.module2D",
"detection3-d-module": "dimos.perception.detection.module3D",
"drone-camera-module": "dimos.robot.drone.camera_module",
"drone-connection-module": "dimos.robot.drone.connection_module",
"drone-tracking-module": "dimos.robot.drone.drone_tracking_module",
"embedding-memory": "dimos.memory.embedding",
"emitter-module": "dimos.utils.demo_image_encoding",
"fast-lio2": "dimos.hardware.sensors.lidar.fastlio2.module",
"foxglove-bridge": "dimos.robot.foxglove_bridge",
"g1-connection": "dimos.robot.unitree.g1.connection",
"g1-connection-base": "dimos.robot.unitree.g1.connection",
"g1-sim-connection": "dimos.robot.unitree.g1.sim",
"go2-connection": "dimos.robot.unitree.go2.connection",
"go2-fleet-connection": "dimos.robot.unitree.go2.fleet_connection",
"google-maps-skill-container": "dimos.agents.skills.google_maps_skill_container",
"gps-nav-skill-container": "dimos.agents.skills.gps_nav_skill",
"grasp-gen-module": "dimos.manipulation.grasping.graspgen_module",
"grasping-module": "dimos.manipulation.grasping.grasping",
"gstreamer-camera-module": "dimos.hardware.sensors.camera.gstreamer.gstreamer_camera",
"joint-trajectory-controller": "dimos.manipulation.control.trajectory_controller.joint_trajectory_controller",
"joystick-module": "dimos.robot.unitree.b1.joystick_module",
"keyboard-teleop": "dimos.robot.unitree.keyboard_teleop",
"keyboard-teleop-module": "dimos.teleop.keyboard.keyboard_teleop_module",
"manipulation-module": "dimos.manipulation.manipulation_module",
"map": "dimos.robot.unitree.type.map",
"mcp-client": "dimos.agents.mcp.mcp_client",
"mcp-server": "dimos.agents.mcp.mcp_server",
"mock-b1-connection-module": "dimos.robot.unitree.b1.connection",
"module-a": "dimos.robot.unitree.demo_error_on_name_conflicts",
"module-b": "dimos.robot.unitree.demo_error_on_name_conflicts",
"navigation-module": "dimos.robot.unitree.rosnav",
"navigation-skill-container": "dimos.agents.skills.navigation",
"object-db-module": "dimos.perception.detection.moduleDB",
"object-scene-registration-module": "dimos.perception.object_scene_registration",
"object-tracker2-d": "dimos.perception.object_tracker_2d",
"object-tracker3-d": "dimos.perception.object_tracker_3d",
"object-tracking": "dimos.perception.object_tracker",
"osm-skill": "dimos.agents.skills.osm",
"patrolling-module": "dimos.navigation.patrolling.module",
"perceive-loop-skill": "dimos.perception.perceive_loop_skill",
"person-follow-skill-container": "dimos.agents.skills.person_follow",
"person-tracker": "dimos.perception.detection.person_tracker",
"phone-teleop-module": "dimos.teleop.phone.phone_teleop_module",
"pick-and-place-module": "dimos.manipulation.pick_and_place_module",
"quest-teleop-module": "dimos.teleop.quest.quest_teleop_module",
"real-sense-camera": "dimos.hardware.sensors.camera.realsense.camera",
"receiver-module": "dimos.utils.demo_image_encoding",
"reid-module": "dimos.perception.detection.reid.module",
"replanning-a-star-planner": "dimos.navigation.replanning_a_star.module",
"rerun-bridge-module": "dimos.visualization.rerun.bridge",
"ros-nav": "dimos.navigation.rosnav",
"simple-phone-teleop": "dimos.teleop.phone.phone_extensions",
"spatial-memory": "dimos.perception.spatial_perception",
"speak-skill": "dimos.agents.skills.speak_skill",
"temporal-memory": "dimos.perception.experimental.temporal_memory.temporal_memory",
"twist-teleop-module": "dimos.teleop.quest.quest_extensions",
"unitree-g1-skill-container": "dimos.robot.unitree.g1.skill_container",
"unitree-skill-container": "dimos.robot.unitree.unitree_skill_container",
"unity-bridge-module": "dimos.simulation.unity.module",
"vlm-agent": "dimos.agents.vlm_agent",
"vlm-stream-tester": "dimos.agents.vlm_stream_tester",
"voxel-grid-mapper": "dimos.mapping.voxels",
"wavefront-frontier-explorer": "dimos.navigation.frontier_exploration.wavefront_frontier_goal_selector",
"web-input": "dimos.agents.web_human_input",
"websocket-vis-module": "dimos.web.websocket_vis.websocket_vis_module",
"zed-camera": "dimos.hardware.sensors.camera.zed.camera",
"arm-teleop-module": "dimos.teleop.quest.quest_extensions.ArmTeleopModule",
"b-box-navigation-module": "dimos.navigation.bbox_navigation.BBoxNavigationModule",
"b1-connection-module": "dimos.robot.unitree.b1.connection.B1ConnectionModule",
"camera-module": "dimos.hardware.sensors.camera.module.CameraModule",
"cartesian-motion-controller": "dimos.manipulation.control.servo_control.cartesian_motion_controller.CartesianMotionController",
"control-coordinator": "dimos.control.coordinator.ControlCoordinator",
"cost-mapper": "dimos.mapping.costmapper.CostMapper",
"demo-calculator-skill": "dimos.agents.skills.demo_calculator_skill.DemoCalculatorSkill",
"demo-robot": "dimos.agents.skills.demo_robot.DemoRobot",
"detection2-d-module": "dimos.perception.detection.module2D.Detection2DModule",
"detection3-d-module": "dimos.perception.detection.module3D.Detection3DModule",
"drone-camera-module": "dimos.robot.drone.camera_module.DroneCameraModule",
"drone-connection-module": "dimos.robot.drone.connection_module.DroneConnectionModule",
"drone-tracking-module": "dimos.robot.drone.drone_tracking_module.DroneTrackingModule",
"embedding-memory": "dimos.memory.embedding.EmbeddingMemory",
"emitter-module": "dimos.utils.demo_image_encoding.EmitterModule",
"fast-lio2": "dimos.hardware.sensors.lidar.fastlio2.module.FastLio2",
"foxglove-bridge": "dimos.robot.foxglove_bridge.FoxgloveBridge",
"g1-connection": "dimos.robot.unitree.g1.connection.G1Connection",
"g1-connection-base": "dimos.robot.unitree.g1.connection.G1ConnectionBase",
"g1-sim-connection": "dimos.robot.unitree.g1.sim.G1SimConnection",
"go2-connection": "dimos.robot.unitree.go2.connection.GO2Connection",
"go2-fleet-connection": "dimos.robot.unitree.go2.fleet_connection.Go2FleetConnection",
"google-maps-skill-container": "dimos.agents.skills.google_maps_skill_container.GoogleMapsSkillContainer",
"gps-nav-skill-container": "dimos.agents.skills.gps_nav_skill.GpsNavSkillContainer",
"grasp-gen-module": "dimos.manipulation.grasping.graspgen_module.GraspGenModule",
"grasping-module": "dimos.manipulation.grasping.grasping.GraspingModule",
"gstreamer-camera-module": "dimos.hardware.sensors.camera.gstreamer.gstreamer_camera.GstreamerCameraModule",
"joint-trajectory-controller": "dimos.manipulation.control.trajectory_controller.joint_trajectory_controller.JointTrajectoryController",
"joystick-module": "dimos.robot.unitree.b1.joystick_module.JoystickModule",
"keyboard-teleop": "dimos.robot.unitree.keyboard_teleop.KeyboardTeleop",
"keyboard-teleop-module": "dimos.teleop.keyboard.keyboard_teleop_module.KeyboardTeleopModule",
"manipulation-module": "dimos.manipulation.manipulation_module.ManipulationModule",
"map": "dimos.robot.unitree.type.map.Map",
"mcp-client": "dimos.agents.mcp.mcp_client.McpClient",
"mcp-server": "dimos.agents.mcp.mcp_server.McpServer",
"mock-b1-connection-module": "dimos.robot.unitree.b1.connection.MockB1ConnectionModule",
"module-a": "dimos.robot.unitree.demo_error_on_name_conflicts.ModuleA",
"module-b": "dimos.robot.unitree.demo_error_on_name_conflicts.ModuleB",
"navigation-module": "dimos.robot.unitree.rosnav.NavigationModule",
"navigation-skill-container": "dimos.agents.skills.navigation.NavigationSkillContainer",
"object-db-module": "dimos.perception.detection.moduleDB.ObjectDBModule",
"object-scene-registration-module": "dimos.perception.object_scene_registration.ObjectSceneRegistrationModule",
"object-tracker2-d": "dimos.perception.object_tracker_2d.ObjectTracker2D",
"object-tracker3-d": "dimos.perception.object_tracker_3d.ObjectTracker3D",
"object-tracking": "dimos.perception.object_tracker.ObjectTracking",
"osm-skill": "dimos.agents.skills.osm.OsmSkill",
"patrolling-module": "dimos.navigation.patrolling.module.PatrollingModule",
"perceive-loop-skill": "dimos.perception.perceive_loop_skill.PerceiveLoopSkill",
"person-follow-skill-container": "dimos.agents.skills.person_follow.PersonFollowSkillContainer",
"person-tracker": "dimos.perception.detection.person_tracker.PersonTracker",
"phone-teleop-module": "dimos.teleop.phone.phone_teleop_module.PhoneTeleopModule",
"pick-and-place-module": "dimos.manipulation.pick_and_place_module.PickAndPlaceModule",
"quest-teleop-module": "dimos.teleop.quest.quest_teleop_module.QuestTeleopModule",
"real-sense-camera": "dimos.hardware.sensors.camera.realsense.camera.RealSenseCamera",
"receiver-module": "dimos.utils.demo_image_encoding.ReceiverModule",
"reid-module": "dimos.perception.detection.reid.module.ReidModule",
"replanning-a-star-planner": "dimos.navigation.replanning_a_star.module.ReplanningAStarPlanner",
"rerun-bridge-module": "dimos.visualization.rerun.bridge.RerunBridgeModule",
"ros-nav": "dimos.navigation.rosnav.ROSNav",
"simple-phone-teleop": "dimos.teleop.phone.phone_extensions.SimplePhoneTeleop",
"spatial-memory": "dimos.perception.spatial_perception.SpatialMemory",
"speak-skill": "dimos.agents.skills.speak_skill.SpeakSkill",
"temporal-memory": "dimos.perception.experimental.temporal_memory.temporal_memory.TemporalMemory",
"twist-teleop-module": "dimos.teleop.quest.quest_extensions.TwistTeleopModule",
"unitree-g1-skill-container": "dimos.robot.unitree.g1.skill_container.UnitreeG1SkillContainer",
"unitree-skill-container": "dimos.robot.unitree.unitree_skill_container.UnitreeSkillContainer",
"unity-bridge-module": "dimos.simulation.unity.module.UnityBridgeModule",
"vlm-agent": "dimos.agents.vlm_agent.VLMAgent",
"vlm-stream-tester": "dimos.agents.vlm_stream_tester.VlmStreamTester",
"voxel-grid-mapper": "dimos.mapping.voxels.VoxelGridMapper",
"wavefront-frontier-explorer": "dimos.navigation.frontier_exploration.wavefront_frontier_goal_selector.WavefrontFrontierExplorer",
"web-input": "dimos.agents.web_human_input.WebInput",
"websocket-vis-module": "dimos.web.websocket_vis.websocket_vis_module.WebsocketVisModule",
"zed-camera": "dimos.hardware.sensors.camera.zed.camera.ZEDCamera",
}
6 changes: 3 additions & 3 deletions dimos/robot/get_all_blueprints.py
Original file line number Diff line number Diff line change
Expand Up @@ -45,9 +45,9 @@ def get_blueprint_by_name(name: str) -> Blueprint:
def get_module_by_name(name: str) -> Blueprint:
if name not in all_modules:
_fail_unknown(name, list(all_modules.keys()))
attr_name = name.replace("-", "_")
python_module = __import__(all_modules[name], fromlist=[attr_name])
return getattr(python_module, attr_name)() # type: ignore[no-any-return]
module_path, class_name = all_modules[name].rsplit(".", 1)
python_module = __import__(module_path, fromlist=[class_name])
return getattr(python_module, class_name).blueprint() # type: ignore[no-any-return]


def get_by_name(name: str) -> Blueprint:
Expand Down
10 changes: 5 additions & 5 deletions dimos/robot/test_all_blueprints_generation.py
Original file line number Diff line number Diff line change
Expand Up @@ -171,9 +171,9 @@ def _scan_for_blueprints(root: Path) -> tuple[dict[str, str], dict[str, str]]:

# Only register modules from production files (skip test, deprecated, core)
if _is_production_module_file(file_path, root):
for var_name in module_vars:
for var_name, class_name in module_vars:
cli_name = var_name.replace("_", "-")
all_modules[cli_name] = module_name
all_modules[cli_name] = f"{module_name}.{class_name}"

# Blueprints take priority when names collide (e.g. a pre-configured
# blueprint named "mid360" vs the raw Mid360 Module class).
Expand Down Expand Up @@ -250,9 +250,9 @@ def _path_to_module_name(path: Path, root: Path) -> str:

def _find_blueprints_in_file(
file_path: Path, module_classes: set[str] | None = None
) -> tuple[list[str], list[str]]:
) -> tuple[list[str], list[tuple[str, str]]]:
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

We could use NamedTuple for code readability.

blueprint_vars: list[str] = []
module_vars: list[str] = []
module_vars: list[tuple[str, str]] = []

try:
source = file_path.read_text(encoding="utf-8")
Expand Down Expand Up @@ -281,7 +281,7 @@ def _find_blueprints_in_file(
if node.name.startswith("_") or node.name in _EXCLUDED_MODULE_NAMES:
continue
if any(b in module_classes for b in _get_base_class_names(node)):
module_vars.append(_camel_to_snake(node.name))
module_vars.append((_camel_to_snake(node.name), node.name))

return blueprint_vars, module_vars

Expand Down
Loading