Skip to content
Draft
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
6 changes: 6 additions & 0 deletions dimos/robot/all_blueprints.py
Original file line number Diff line number Diff line change
Expand Up @@ -91,10 +91,13 @@
"openarm-planner-coordinator": "dimos.robot.manipulators.openarm.blueprints.planner:openarm_planner_coordinator",
"openyam-planner-coordinator": "dimos.robot.manipulators.openyam.blueprints.basic:openyam_planner_coordinator",
"path-planner-eval": "dimos.navigation.nav_3d.evaluator.blueprints:path_planner_eval",
"teleop-hosted-go2-livekit": "dimos.teleop.hosted.blueprints.livekit:teleop_hosted_go2_livekit",
"teleop-hosted-go2-multicam": "dimos.teleop.hosted.blueprints.cloudflare:teleop_hosted_go2_multicam",
"teleop-hosted-go2-transport": "dimos.teleop.hosted.blueprints.cloudflare:teleop_hosted_go2_transport",
"teleop-hosted-xarm6": "dimos.teleop.hosted.blueprints.cloudflare:teleop_hosted_xarm6",
"teleop-hosted-xarm6-livekit": "dimos.teleop.hosted.blueprints.livekit:teleop_hosted_xarm6_livekit",
"teleop-hosted-xarm7": "dimos.teleop.hosted.blueprints.cloudflare:teleop_hosted_xarm7",
"teleop-hosted-xarm7-livekit": "dimos.teleop.hosted.blueprints.livekit:teleop_hosted_xarm7_livekit",
"teleop-phone": "dimos.teleop.phone.blueprints:teleop_phone",
"teleop-phone-go2": "dimos.teleop.phone.blueprints:teleop_phone_go2",
"teleop-phone-go2-fleet": "dimos.teleop.phone.blueprints:teleop_phone_go2_fleet",
Expand Down Expand Up @@ -224,6 +227,9 @@
"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",
"live-kit-front-camera": "dimos.teleop.hosted.blueprints.livekit.LiveKitFrontCamera",
"live-kit-teleop-module": "dimos.teleop.hosted.livekit.LiveKitTeleopModule",
"live-kit-wrist-camera": "dimos.teleop.hosted.blueprints.livekit.LiveKitWristCamera",
"local-planner": "dimos.navigation.cmu_nav.modules.local_planner.local_planner.LocalPlanner",
"manipulation-module": "dimos.manipulation.manipulation_module.ManipulationModule",
"map": "dimos.robot.unitree.type.map.Map",
Expand Down
121 changes: 121 additions & 0 deletions dimos/teleop/hosted/blueprints/livekit.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,121 @@
# Copyright 2026 Dimensional Inc.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

"""Hosted teleoperation blueprints backed by a LiveKit edge module."""

from __future__ import annotations

from dimos.core.coordination.blueprints import autoconnect
from dimos.core.transport import LCMTransport
from dimos.hardware.sensors.camera.realsense.camera import RealSenseCamera
from dimos.mapping.costmapper import CostMapper
from dimos.mapping.voxels.module import VoxelGridMapper
from dimos.msgs.geometry_msgs.Twist import Twist
from dimos.navigation.movement_manager.movement_manager import MovementManager
from dimos.navigation.replanning_a_star.module import ReplanningAStarPlanner
from dimos.robot.manipulators.xarm.blueprints.teleop import (
coordinator_teleop_xarm6,
coordinator_teleop_xarm7,
)
from dimos.robot.unitree.go2.connection import GO2Connection
from dimos.teleop.hosted.arm_command import ArmCommandModule
from dimos.teleop.hosted.camera_mux import CameraMuxModule
from dimos.teleop.hosted.go2_command import Go2CommandModule
from dimos.teleop.hosted.hosted_stats import HostedStatsModule
from dimos.teleop.hosted.livekit import LiveKitTeleopModule
from dimos.teleop.hosted.map_compress import MapCompressModule
from dimos.teleop.hosted.robot_type import RobotType


class LiveKitFrontCamera(RealSenseCamera):
pass


class LiveKitWristCamera(RealSenseCamera):
pass


teleop_hosted_go2_livekit = (
autoconnect(
GO2Connection.blueprint(),
Go2CommandModule.blueprint(allow_acrobatics=True),
CameraMuxModule.blueprint(cameras=["cam1"]),
HostedStatsModule.blueprint(),
MapCompressModule.blueprint(),
LiveKitTeleopModule.blueprint(robot_type=RobotType.GO2),
VoxelGridMapper.blueprint(emit_every=5),
CostMapper.blueprint(),
ReplanningAStarPlanner.blueprint(),
MovementManager.blueprint(),
)
.remappings([(GO2Connection, "color_image", "cam1")])
.transports(
{
("tele_cmd_vel", Twist): LCMTransport.spec("/hosted/tele_cmd_vel", Twist),
("nav_cmd_vel", Twist): LCMTransport.spec("/hosted/nav_cmd_vel", Twist),
("cmd_vel", Twist): LCMTransport.spec("/hosted/cmd_vel", Twist),
}
)
.global_config(viewer="none", n_workers=2)
)


teleop_hosted_xarm6_livekit = (
autoconnect(
ArmCommandModule.blueprint(task_names={"right": "teleop_xarm"}),
HostedStatsModule.blueprint(),
CameraMuxModule.blueprint(cameras=["cam1", "cam2"]),
LiveKitTeleopModule.blueprint(robot_type=RobotType.ARM),
coordinator_teleop_xarm6,
LiveKitFrontCamera.blueprint(
camera_name="front", enable_depth=False, enable_pointcloud=False
),
LiveKitWristCamera.blueprint(
camera_name="wrist", enable_depth=False, enable_pointcloud=False
),
)
.remappings(
[
(LiveKitFrontCamera, "color_image", "cam1"),
(LiveKitWristCamera, "color_image", "cam2"),
(ArmCommandModule, "right_controller_output", "coordinator_cartesian_command"),
]
)
.global_config(viewer="none", n_workers=1)
)


teleop_hosted_xarm7_livekit = (
autoconnect(
ArmCommandModule.blueprint(task_names={"right": "teleop_xarm"}),
HostedStatsModule.blueprint(),
CameraMuxModule.blueprint(cameras=["cam1", "cam2"]),
LiveKitTeleopModule.blueprint(robot_type=RobotType.ARM),
coordinator_teleop_xarm7,
LiveKitFrontCamera.blueprint(
camera_name="front", enable_depth=False, enable_pointcloud=False
),
LiveKitWristCamera.blueprint(
camera_name="wrist", enable_depth=False, enable_pointcloud=False
),
)
.remappings(
[
(LiveKitFrontCamera, "color_image", "cam1"),
(LiveKitWristCamera, "color_image", "cam2"),
(ArmCommandModule, "right_controller_output", "coordinator_cartesian_command"),
]
)
.global_config(viewer="none", n_workers=1)
)
Loading
Loading