This is a custom message package for message types that are LUCI specific.
Package | Message |
---|---|
luci_messages | LuciJoystick int32 forward_back int32 left_right string joystick_zone |
LuciJoystickScaling int32 forward_back (scaled forward back limit) int32 left_right (scaled left right limit) string joystick_zone |
|
LuciZoneScaling float front_fb float front_rl float front_right_fb float front_right_rl float front_left_fb float front_left_rl float right_fb float right_rl float left_fb float left_rl float back_right_fb float back_right_rl float back_left_fb float back_left_rl float back_fb float back_rl uint32 max_js_scale_increase uint32 max_js_scale_decrease bool luci_active |
|
LuciDriveMode enum USER=1 ENGAGED=2 AUTO=3 |
|
LuciImu std_msgs/Header header float32 quaternion_x float32 quaternion_y float32 quaternion_z float32 quaternion_w float32 acceleration_x float32 acceleration_y float32 acceleration_z float32 gyro_x float32 gyro_y float32 gyro_z float32 euler_x float32 euler_y float32 euler_z float32 accelerometer_x float32 accelerometer_y float32 accelerometer_z float32 magnetometer_x float32 magnetometer_y float32 magnetometer_z float32 gravity_x float32 gravity_y float32 gravity_z int32 cal_system int32 cal_gyroscope int32 cal_accelerometer int32 cal_magnetometer int32 source uint32 edge_timestamp |
|
LuciEncoders float left_angle float right_angle float fl_caster_degrees float bl_caster_degrees float fr_caster_degrees float br_caster_degrees uint32 edge_timestamp |
|
LuciCameraInfo float[4] intrinsics (fx,fy,ppx,ppy) float[3] translation (x,y,z meters camera->chair center) float[3] rotation (x,y,z radians) camera -> chair center enum type RADIAN=0 DEGREE=1 |
The LUCI scaling zones message is based on the on the chair scaling LUCI uses. Scaling is broken up into 8 zones seen below. In each zone there also exists a scaling for forward/back and left/right. LUCI determines which zone the joystick is currently in based on the angle of the joystick per the image below. This indicates the upper limit the joystick would be allowed to be (forward back, left right) if the joystick is placed in one of the 8 zones.
For example if the joystick was at an angle of 5 degrees from center (placing it in the front zone) and LUCI had a front_fb scaling value of 0.5 and a front_rl scaling value of 1.0 then LUCI would allow the max joystick in the Y axis to be +/- 50 (or 50% of full throw) and would let the max js in the x axis to be +/- 100 (or 100% of full throw) (relative to chair coordinates).
For the encoder data stream the edge_timestamp
is expected to be a constant timer from the encoder or processing board's clock. Ideally this clock is produced from as close to the source of the readings as possible. For example with the encoder setup described here https://github.com/lucimobility/luci-sdk-encoders the edge_timestamp will be the milliseconds since the arduino control board booted up. This is using the millis() call in arduino.
Note:
The LuciJoystickScaling message has the joystick values with the LUCI scaling applied. These are the values most recently used to control the chair and have already been sent to the wheelchairs drive controller. Please note this message also contains the scaling zone that was used for these outputs.
The LuciJoystick message also has the LUCI scaling zone that the input JS would fall in.