void du_set_trans_quat(du_body_id body, float tx, float ty, float tz, float qx, float qy, float qz, float qw) { btCollisionObject *bt_obj = reinterpret_cast <btCollisionObject*>(body); btMotionState *mstate = get_motion_state(bt_obj); btTransform transform; transform.setIdentity(); transform.setOrigin(btVector3(tx, ty, tz)); transform.setRotation(btQuaternion(qx, qy, qz, qw)); bt_obj->setWorldTransform(transform); if (mstate) mstate->setWorldTransform(transform); }
void du_get_trans(du_body_id body, float *dest) { btCollisionObject *bt_obj = reinterpret_cast <btCollisionObject*>(body); btMotionState *mstate = get_motion_state(bt_obj); btTransform transform; if (mstate) mstate->getWorldTransform(transform); else transform = bt_obj->getWorldTransform(); btVector3 origin = transform.getOrigin(); dest[0] = origin.x(); dest[1] = origin.y(); dest[2] = origin.z(); }
void du_set_quat(du_body_id body, float qx, float qy, float qz, float qw) { btCollisionObject *bt_obj = reinterpret_cast <btCollisionObject*>(body); btMotionState *mstate = get_motion_state(bt_obj); btTransform transform; if (mstate) mstate->getWorldTransform(transform); else transform = bt_obj->getWorldTransform(); transform.setRotation(btQuaternion(qx, qy, qz, qw)); bt_obj->setWorldTransform(transform); if (mstate) mstate->setWorldTransform(transform); }
void du_set_trans(du_body_id body, float tx, float ty, float tz) { btCollisionObject *bt_obj = reinterpret_cast <btCollisionObject*>(body); btMotionState *mstate = get_motion_state(bt_obj); btTransform transform; if (mstate) mstate->getWorldTransform(transform); else transform = bt_obj->getWorldTransform(); transform.setOrigin(btVector3(tx, ty, tz)); // always set object transform since motion state may also be initialized // from that value during addition to world (enable_simulation) bt_obj->setWorldTransform(transform); if (mstate) mstate->setWorldTransform(transform); }
packet_information_t send_frame_motion(unsigned char option, unsigned char type, unsigned char command, message_abstract_u message) { message_abstract_u send; switch (command) { case DIFF_DRIVE_COORDINATE: send.diff_drive.coordinate = get_motion_coordinate(); break; case DIFF_DRIVE_VEL_REF: send.diff_drive.velocity = get_motion_velocity_ref_unicycle(); break; case DIFF_DRIVE_VEL: send.diff_drive.velocity = get_motion_velocity_meas_unicycle(); break; case DIFF_DRIVE_STATE: send.diff_drive.state = get_motion_state(); break; case DIFF_DRIVE_PARAMETER_UNICYCLE: send.diff_drive.parameter_unicycle = get_motion_parameter_unicycle(); break; default: return CREATE_PACKET_NACK(command, type); break; } return CREATE_PACKET_DATA(command, type, send); }