Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Axis Enumeration #27

Closed
JeffBail opened this issue Sep 13, 2016 · 9 comments
Closed

Axis Enumeration #27

JeffBail opened this issue Sep 13, 2016 · 9 comments

Comments

@JeffBail
Copy link

The documentation for Axis Enumeration says it "Represents an axis from the 3D space"; is this body coordinates, camera coordinates or perhaps gravity/floor aligned coordinates? I'm trying to understand what effect passing in an Axis should have on the Angle.

@Vangos
Copy link
Member

Vangos commented Sep 13, 2016

Hello Jeff. The Axis enumeration represents an axis in the Camera Space (measured in meters).

If you pass it as a parameter in the Angle method, for example, the specified axis will be ignored for the angle calculation. Let me know if you need any further assistance.

@Vangos Vangos closed this as completed Sep 13, 2016
@JeffBail
Copy link
Author

What I'm trying to do is get body relative angles and it seems like what Angle is providing is screen/camera relative angles. For instance I'd like to measure the pitch/elevation of my arm which shouldn't change as I spin around in a chair if I'm holding my arm straight out in front of me.

@Vangos
Copy link
Member

Vangos commented Sep 13, 2016

Could you please paste the code you are using for this?

@JeffBail
Copy link
Author

I was trying to get body relative elbow yaw doing something like this:

     double elbowYaw = body.Joints[JointType.ShoulderRight].Angle(body.Joints[JointType.SpineShoulder], body.Joints[JointType.ElbowRight], Axis.Z);

I tried using the different axes but since they're relative to the camera (and not the body or gravity) I don't think think this is the right path.

@Vangos
Copy link
Member

Vangos commented Sep 13, 2016

Thank you. Could you also send me a video of the movement and the proper
position?
On Tue, 13 Sep 2016 at 22:49, JeffBail notifications@github.com wrote:

I was trying to get body relative elbow yaw doing something like this:

 double elbowYaw = body.Joints[JointType.ShoulderRight].Angle(body.Joints[JointType.SpineShoulder], body.Joints[JointType.ElbowRight], Axis.Z);

I tried using the different axes but since they're relative to the camera
(and not the body or gravity) I don't think think this is the right path.


You are receiving this because you modified the open/close state.

Reply to this email directly, view it on GitHub
#27 (comment),
or mute the thread
https://github.com/notifications/unsubscribe-auth/AAiV-OEoXozghishmw1sd6ueNGJm7Uz1ks5qpv5EgaJpZM4J75u8
.

Vangos Pterneas
http://pterneas.com

@JeffBail
Copy link
Author

JeffBail commented Sep 13, 2016

Here's a quick video. What I'm looking for is the elevation of my arm which should change as I move them up and down but not as I rotate my body or my arms. I'm thinking I might need to do a rotation correction like this.

@Vangos
Copy link
Member

Vangos commented Sep 14, 2016

Now it's clear to me. So, to read the angle regardless of the rotation of the body, you need to measure it by considering all of the axis. Would the following code work for you?

var start = body.Joints[JointType.SpineShoulder].Position;
var center = body.Joints[JointType.ShoulderRight].Position;
var end = body.Joints[JointType.ElbowRight].Position;

var angle = center.Angle(start, end);

You may also do this:

var angle = 180.0 - center.Angle(start, end);

@JeffBail
Copy link
Author

I'm pretty sure that's still going to be measuring in screen/camera space and not body/floor/gravity space. So for instance if I stand with my body facing the camera and point my arm at the camera and then move it down by my side the angle doesn't change much. If I rotate my body 90 degrees and do the same motion the values sweep through a large range.

@JeffBail
Copy link
Author

I have a pretty good solution in Unity based on the JoinOrientationBasics-Unity example. I'm simply looking up a child of the SkeletonModel, in this case "ElbowRight", that is already converted into Unity coordinates and extracting the yaw as:
Vector3.Angle(elbowRight.transform.up, Vector3.right);

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants