Data Structure: (for the interface between OCU and urbie. not intended to represent the internal data structure on urbie.) Time: 5-Byte, accurate up to 1/256 of a second (4msec) Robot State: Position (7 float), Orientation (6 float), velocity (6 float), articulation (1 float) More specifically, (pos_x, pos_y, pos_z, s_xx, s_yy, s_zz, s_xy, roll, pitch, yaw, s_roll, s_pitch, s_yaw, v_x, v_y, v_z, v_roll, v_pitch, v_yaw, articulation_angle) where s_?? is the covariance, v_?? is the velocity. Coordinate frame: Robot coordinate frame: Front ----------- | ^ Y | | | | | | | | |---------> X | | | | | | ----------- Back Z axis is up. Global coordinate frame: Y: North X: East Z: Up Rotation convention: rotation around Z axis: yaw " X " : pitch " Y " : roll The order of the rotation is R(yaw) * R(pitch) * R(roll), assuming column vectors. (note that this roll-pitch-yaw representation of the rotation is suited for the users. Internally we may use quarternions instead for numerical stability). Image: (note that the image here is compressed before being sent to OCU through Freewave) which_camera (int), window (4 int, in case only a rect portion of the image get transmitted.), resampling rate (int, incase the image is downsampled before xmittion.), time_stamping (5-byte time type), data_size (int, the actual size of the JPEG image in byte), data (variable length). Periodic Tasks: Robot State: heartbeat data xmitted though unreliable comm channel at ~ 10Hz. Commands: SetTime (): parameters: time_type return: time_type function: sync the OCU and robots in time. Teleop (); parameters: {speed, turn_speed, articulation angle). return: None, no acknowledgment. function: directly control the speed of the vehicle. It is unclear though whether the speed are relative or abosolute. And it is unclear where the mapping from the three speed values to actuators happens. TurnOnTansmitter (); parameter: which_cam (int) return: acknowledgement function: turn on the video transmitter, and feed video from the sepcified the camera. TurnOffTrasmitter (); parameter: none return: acknowledgement function: turn off the video transmitter. InitFreewaveImage(); parameters: which_cam (int), image_rate (int), window (4 int), compression_rate (int), resampling_factor (int). return: acknowledgement function: Initiate using the freewave to transmit video. TerminateFreewaveImage(); parameter: none return: acknowledgement function: terminate using freewave to transmitt video.