1717
1818from dimos .multiprocess .actors2 .base import In , Module , Out , RemoteOut , module , rpc
1919from dimos .multiprocess .actors2 .base_dask import dimos
20+ from dimos .robot .unitree_webrtc .type .lidar import LidarMessage
2021from dimos .robot .unitree_webrtc .type .map import Map
2122from dimos .robot .unitree_webrtc .type .odometry import Odometry
2223from dimos .types .path import Path
2728@module
2829class RobotClient (Module ):
2930 odometry : Out [Odometry ]
31+ lidar : Out [LidarMessage ]
3032
3133 def __init__ (self ):
3234 self .odometry = Out (Odometry , "odometry" , self )
35+
3336 self ._stop_event = Event ()
3437 self ._thread = None
3538
36- @rpc
3739 def start (self ):
3840 self ._thread = Thread (target = self .odomloop )
3941 self ._thread .start ()
4042
4143 def odomloop (self ):
4244 odomdata = SensorReplay ("raw_odometry_rotate_walk" , autocast = Odometry .from_msg )
45+ lidardata = SensorReplay ("office_lidar" , autocast = LidarMessage .from_msg )
46+
47+ lidariter = lidardata .iterate ()
4348 self ._stop_event .clear ()
4449 while not self ._stop_event .is_set ():
4550 for odom in odomdata .iterate ():
4651 if self ._stop_event .is_set ():
52+ print ("Stopping odometry stream" )
4753 return
54+ # print(odom)
4855 odom .pubtime = time .perf_counter ()
4956 self .odometry .publish (odom )
57+
58+ lidarmsg = next (lidariter )
59+ lidarmsg .pubtime = time .perf_counter ()
60+ self .lidar .publish (lidarmsg )
5061 time .sleep (0.1 )
5162
52- @rpc
5363 def stop (self ):
5464 self ._stop_event .set ()
5565 if self ._thread and self ._thread .is_alive ():
56- self ._thread .join (timeout = 1.0 )
66+ self ._thread .join (timeout = 1.0 ) # Wait up to 1 second for clean shutdown
5767
5868
5969@module
@@ -66,18 +76,23 @@ def navigate_to(self, target: Vector) -> bool: ...
6676 def __init__ (
6777 self ,
6878 target_position : In [Vector ],
69- map_stream : In [Map ],
79+ lidar : In [LidarMessage ],
7080 odometry : In [Odometry ],
7181 ):
7282 self .target_position = target_position
73- self .map_stream = map_stream
83+ self .lidar = lidar
7484 self .odometry = odometry
7585 self .target_path = Out (Path , "target_path" )
7686
7787 @rpc
7888 def start (self ):
7989 print ("navigation odom stream is, subscribing" , self .odometry )
80- self .odometry .subscribe (print )
90+ self .odometry .subscribe (
91+ lambda msg : print ("RCV:" , (time .perf_counter () - msg .pubtime ) * 1000 , msg )
92+ )
93+ self .lidar .subscribe (
94+ lambda msg : print ("RCV:" , (time .perf_counter () - msg .pubtime ) * 1000 , msg )
95+ )
8196
8297
8398def test_introspection ():
@@ -97,46 +112,31 @@ def test_instance_introspection():
97112 robot = RobotClient ()
98113 print (robot )
99114
100- map_stream = Out [Map ](Map , "map" )
101115 target_stream = Out [Vector ](Vector , "map" )
102116 print ("\n " )
103- print ("map stream" , map_stream )
117+ print ("lidar stream" , robot . lidar )
104118 print ("target stream" , target_stream )
105119 print ("odom stream" , robot .odometry )
106120
107- nav = Navigation (target_position = target_stream , map_stream = map_stream , odometry = robot .odometry )
121+ nav = Navigation (target_position = target_stream , lidar = robot . lidar , odometry = robot .odometry )
108122 """Test introspection of the Navigation module."""
109123 assert hasattr (nav , "inputs" )
110124 assert hasattr (nav , "rpcs" )
111125 print ("\n \n \n " + nav .io (), "\n \n " )
112126
113127
114- # nav.start()
115-
116-
117128def test_deployment (dimos ):
118129 robot = dimos .deploy (RobotClient )
119-
120- map_stream = RemoteOut [Map ](Map , "map" )
121130 target_stream = RemoteOut [Vector ](Vector , "map" )
122- odom_stream = robot . odometry
131+
123132 print ("\n " )
124- print ("map stream" , map_stream )
133+ print ("lidar stream" , robot . lidar )
125134 print ("target stream" , target_stream )
126- print ("odom stream" , odom_stream )
127-
128- # # print(type(odom_stream.owner))
129- # # print(type(robot))
130-
131- # # out = Out(Odometry, "odometry", robot)
135+ print ("odom stream" , robot .odometry )
132136
133137 nav = dimos .deploy (
134- Navigation , target_position = target_stream , map_stream = map_stream , odometry = odom_stream
138+ Navigation , target_position = target_stream , lidar = robot . lidar , odometry = robot . odometry
135139 )
136-
137- # # """Test introspection of the Navigation module."""
138- # # assert hasattr(nav, "inputs")
139- # # assert hasattr(nav, "rpcs")
140140 print ("\n \n \n " + robot .io ().result (), "\n " )
141141 print (nav .io ().result (), "\n \n " )
142142
0 commit comments