I have a problem understanding the coordinate system of the linear speed vector of the RateCtrl packet.
The ICD says (about the Coordinate System member):
This parameter specifies the reference coordinate
system to which the linear and angular rates are
applied.
When this parameter is set to World/Parent (0) and the
entity is a top-level (non-child) entity, the rates are
defined relative to the database. Linear rates describe
a path along and above the surface of the geoid.
Angular rates describe a rotation relative to a reference
plane as described in Section 3.3.1.2.
When this parameter is set to World/Parent (0) and the
entity is a child entity, the rates are defined relative to
the parent’s local coordinate system as described in
Section 3.3.2.2.
When this parameter is set to Local (1), the rates are
defined relative to the entity’s local coordinate system.
Note: This parameter is ignored if Apply to Articulated
Part is set to True (1).
RateCtrl: World/Parent (0), linear speed = (x:10, y:0, z:0)
From the above specification, I understand that the entity should go to the north, regardless to it's attitude, because of World/Parent (0).
RateCtrl: Local (1), linear speed = (x:10, y:0, z:0)
From the above specification, I understand that the entity should go to the east (because yaw == 90) and up (because pitch == 10).
Am I right? If so, I don't see the point of the World/Parent (0) mode.
In the MPV, the Coordinate System member of the RateCtrl packet is not used. The linear speed vector is always transformed by the local entity attitude matrix.
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
The comments regarding the reaction of the example are correct.
Often, users will use Local. However, there are times that World/Parent has been used.
An example of different motion results:
If and entity starts with yaw:0, pitch:0, and roll:0.
Set rates of x:10,y:0,z:0,yaw:2,pitch:0, and roll:0.
If the Coordinate System is set to local, this results in a large circular movement.
If the Coordinate System is set to World, this results in the entity moving North while spinning.
Also, there are times when it is easier to move a child entity relative to the parent entity rather than relative to the way it is orientated.
Another example of World usage is if the rate packet is being used to generate smooth motion with a system that is asynchronous. In this case position and attitude are given in world coordinates and giving position and attitude rates in world coordinates is more consistent.
Last edit: Greg Basler 2014-07-29
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
Hi,
I have a problem understanding the coordinate system of the linear speed vector of the RateCtrl packet.
The ICD says (about the Coordinate System member):
Example:
EntityCtrl: top-level, attitude = (yaw:90, pitch:10, roll:0)
RateCtrl: World/Parent (0), linear speed = (x:10, y:0, z:0)
From the above specification, I understand that the entity should go to the north, regardless to it's attitude, because of World/Parent (0).
RateCtrl: Local (1), linear speed = (x:10, y:0, z:0)
From the above specification, I understand that the entity should go to the east (because yaw == 90) and up (because pitch == 10).
Am I right? If so, I don't see the point of the World/Parent (0) mode.
In the MPV, the Coordinate System member of the RateCtrl packet is not used. The linear speed vector is always transformed by the local entity attitude matrix.
The comments regarding the reaction of the example are correct.
Often, users will use Local. However, there are times that World/Parent has been used.
An example of different motion results:
If and entity starts with yaw:0, pitch:0, and roll:0.
Set rates of x:10,y:0,z:0,yaw:2,pitch:0, and roll:0.
If the Coordinate System is set to local, this results in a large circular movement.
If the Coordinate System is set to World, this results in the entity moving North while spinning.
Also, there are times when it is easier to move a child entity relative to the parent entity rather than relative to the way it is orientated.
Another example of World usage is if the rate packet is being used to generate smooth motion with a system that is asynchronous. In this case position and attitude are given in world coordinates and giving position and attitude rates in world coordinates is more consistent.
Last edit: Greg Basler 2014-07-29
Thanks for the explanation.
The World/Parent mode seems to be useful only in niche cases but now, it make sense to me.