The open source OpenXR runtime

xrt: enable acceleration components for xrt_space_relation

Signed-off-by: MatrixFurry <did:plc:zmjoeu3stwcn44647rhxa44o>

matrixfurry.com 74248c79 822e93d6

verified
+31 -13
+1 -3
src/xrt/auxiliary/math/m_predict.c
··· 28 28 struct xrt_vec3 accum = {0}; 29 29 bool valid_orientation = (flags & XRT_SPACE_RELATION_ORIENTATION_VALID_BIT) != 0; 30 30 bool valid_angular_velocity = (flags & XRT_SPACE_RELATION_ANGULAR_VELOCITY_VALID_BIT) != 0; 31 + bool valid_angular_acceleration = (flags & XRT_SPACE_RELATION_ANGULAR_ACCELERATION_VALID_BIT) != 0; 31 32 32 33 if (valid_angular_velocity) { 33 34 // angular velocity needs to be in body space for prediction ··· 43 44 accum.z += ang_vel_body_space.z; 44 45 } 45 46 46 - // We don't want the angular acceleration, it's way too noisy. 47 - #if 0 48 47 if (valid_angular_acceleration) { 49 48 accum.x += delta_s / 2 * rel->angular_acceleration.x; 50 49 accum.y += delta_s / 2 * rel->angular_acceleration.y; 51 50 accum.z += delta_s / 2 * rel->angular_acceleration.z; 52 51 } 53 - #endif 54 52 55 53 if (valid_orientation) { 56 54 math_quat_integrate_velocity(&rel->pose.orientation, // Old orientation
+12
src/xrt/auxiliary/math/m_space.cpp
··· 42 42 fprintf(stderr, " LV{%f %f %f}", r->linear_velocity.x, r->linear_velocity.y, r->linear_velocity.z); 43 43 } 44 44 45 + if (r->relation_flags & 46 + XRT_SPACE_RELATION_LINEAR_ACCELERATION_VALID_BIT) { 47 + fprintf(stderr, " LA{%f %f %f}", r->linear_acceleration.x, 48 + r->linear_acceleration.y, r->linear_acceleration.z); 49 + } 50 + 45 51 if (r->relation_flags & XRT_SPACE_RELATION_ANGULAR_VELOCITY_VALID_BIT) { 46 52 fprintf(stderr, " AV{%f %f %f}", r->angular_velocity.x, r->angular_velocity.y, r->angular_velocity.z); 53 + } 54 + 55 + if (r->relation_flags & 56 + XRT_SPACE_RELATION_ANGULAR_ACCELERATION_VALID_BIT) { 57 + fprintf(stderr, " AA{%f %f %f}", r->angular_acceleration.x, 58 + r->angular_acceleration.y, r->angular_acceleration.z); 47 59 } 48 60 49 61 fprintf(stderr, "\n");
+4 -2
src/xrt/auxiliary/math/m_space.h
··· 66 66 XRT_SPACE_RELATION_POSITION_VALID_BIT); 67 67 68 68 struct xrt_space_relation relation = { 69 - flags, 70 - *pose, 69 + flags, 70 + *pose, 71 + XRT_VEC3_ZERO, 72 + XRT_VEC3_ZERO, 71 73 XRT_VEC3_ZERO, 72 74 XRT_VEC3_ZERO, 73 75 };
+14 -8
src/xrt/include/xrt/xrt_defines.h
··· 645 645 XRT_SPACE_RELATION_POSITION_VALID_BIT = (1u << 1u), 646 646 XRT_SPACE_RELATION_LINEAR_VELOCITY_VALID_BIT = (1u << 2u), 647 647 XRT_SPACE_RELATION_ANGULAR_VELOCITY_VALID_BIT = (1u << 3u), 648 - XRT_SPACE_RELATION_ORIENTATION_TRACKED_BIT = (1u << 4u), 649 - XRT_SPACE_RELATION_POSITION_TRACKED_BIT = (1u << 5u), 648 + XRT_SPACE_RELATION_LINEAR_ACCELERATION_VALID_BIT = (1u << 4u), 649 + XRT_SPACE_RELATION_ANGULAR_ACCELERATION_VALID_BIT = (1u << 5u), 650 + XRT_SPACE_RELATION_ORIENTATION_TRACKED_BIT = (1u << 6u), 651 + XRT_SPACE_RELATION_POSITION_TRACKED_BIT = (1u << 7u), 650 652 // clang-format on 651 - XRT_SPACE_RELATION_BITMASK_ALL = (uint32_t)XRT_SPACE_RELATION_ORIENTATION_VALID_BIT | // 652 - (uint32_t)XRT_SPACE_RELATION_POSITION_VALID_BIT | // 653 - (uint32_t)XRT_SPACE_RELATION_LINEAR_VELOCITY_VALID_BIT | // 654 - (uint32_t)XRT_SPACE_RELATION_ANGULAR_VELOCITY_VALID_BIT | // 655 - (uint32_t)XRT_SPACE_RELATION_ORIENTATION_TRACKED_BIT | // 653 + XRT_SPACE_RELATION_BITMASK_ALL = (uint32_t)XRT_SPACE_RELATION_ORIENTATION_VALID_BIT | // 654 + (uint32_t)XRT_SPACE_RELATION_POSITION_VALID_BIT | // 655 + (uint32_t)XRT_SPACE_RELATION_LINEAR_VELOCITY_VALID_BIT | // 656 + (uint32_t)XRT_SPACE_RELATION_ANGULAR_VELOCITY_VALID_BIT | // 657 + (uint32_t)XRT_SPACE_RELATION_LINEAR_ACCELERATION_VALID_BIT | // 658 + (uint32_t)XRT_SPACE_RELATION_ANGULAR_ACCELERATION_VALID_BIT | // 659 + (uint32_t)XRT_SPACE_RELATION_ORIENTATION_TRACKED_BIT | // 656 660 (uint32_t)XRT_SPACE_RELATION_POSITION_TRACKED_BIT, 657 661 XRT_SPACE_RELATION_BITMASK_NONE = 0, 658 662 }; ··· 672 676 struct xrt_pose pose; 673 677 struct xrt_vec3 linear_velocity; 674 678 struct xrt_vec3 angular_velocity; 679 + struct xrt_vec3 linear_acceleration; 680 + struct xrt_vec3 angular_acceleration; 675 681 }; 676 682 677 683 /*! ··· 684 690 * @relates xrt_space_relation 685 691 */ 686 692 // clang-format off 687 - #define XRT_SPACE_RELATION_ZERO {XRT_SPACE_RELATION_BITMASK_NONE, XRT_POSE_IDENTITY, XRT_VEC3_ZERO, XRT_VEC3_ZERO} 693 + #define XRT_SPACE_RELATION_ZERO {XRT_SPACE_RELATION_BITMASK_NONE, XRT_POSE_IDENTITY, XRT_VEC3_ZERO, XRT_VEC3_ZERO, XRT_VEC3_ZERO, XRT_VEC3_ZERO} 688 694 // clang-format on 689 695 690 696 /*!