A library for three-dimensional, reference-frame conversions
Project description
Rotation of 3-dimensional Frames
import r3f
or for specific functions (like rpy_to_dcm)
from r3f import rpy_to_dcm
Functions
This library includes four sets of functions: general array checks, attitude-representation conversions, reference-frame conversions, and rotation matrix (direction cosine matrix) utilities.
All twenty possible conversions among the following five attitude
representations are provided: rotation vector, rotation axis and angle, roll and
pitch and yaw (RPY) Euler angles, direction cosine matrix (DCM), and quaternion
(quat). However, some of the conversions are built using other conversions. In
the following table, the low-level conversions are marked with an x and the
conversions build using the other conversions are marked with an o:
| vector | ax, ang | RPY | DCM | quat | |
|---|---|---|---|---|---|
| vector | - | x | o | o | o |
| ax, ang | x | - | o | x | x |
| RPY | o | x | - | x | x |
| DCM | o | x | x | - | x |
| quat | o | x | x | x | - |
The roll, pitch, and yaw angles are applied in a zyx sequence of passive rotations. The quaternions follow a Hamilton convention. Here is an example:
roll = 20*np.pi/180
pitch = 45*np.pi/180
yaw = 10*np.pi/180
C = r3f.rpy_to_dcm([roll, pitch, yaw])
>> C = [[ 0.69636424 0.1227878 -0.70710678]
[ 0.07499469 0.96741248 0.24184476]
[ 0.71375951 -0.2214413 0.66446302]]
In addition to the conversion from the z, y, x sequence of Euler angles to a
DCM, the function dcm is also provided for creating a DCM from a generic set
of Euler angles in any desired sequence of axes. The conversion back from the
rotation matrix to any of 12 possible Euler angle rotations is provided by the
euler function. Although this dcm function could be used, two additional
functions are provided for generating rotation matrices: dcm_inertial_to_ecef
and dcm_ecef_to_navigation. By default, all angles are treated as being in
radians, but if the degs parameter is set to True, then they are treated as
being in degrees.
This library includes all twelve possible conversions among the following four
frames: ECEF (Earth-centered, Earth-fixed), geodetic (latitude, longitude, and
height above ellipsoid), local-level tangent, and local-level curvilinear. By
default, all local-level coordinates are interpreted as having a North, East,
Down (NED) orientation, but if the ned parameter is set to False, the
coordinates are interpreted as having an East, North, Up (ENU) orientation. Here
is an example:
lat = 45*np.pi/180
lon = 0.0
hae = 1000.0
[xe, ye, ze] = r3f.geodetic_to_ecef([lat, lon, hae])
>> xe = 4518297.985630118
>> ye = 0.0
>> ze = 4488055.515647106
The rotation matrix utility functions are an mgs function, a rodrigues
function, and an rodrigues_inv function. The mgs function will work to make
a rotation matrix normalized and orthogonal, a proper rotation matrix. The two
Rodrigues's rotation functions are meant for converting a vector to the matrix
exponential of the skew-symmetric matrix of that vector and back again.
Passive Rotations
Unless specifically otherwise stated, all rotations are interpreted as passive. This means they represent rotations of reference frames, not of vectors.
Vectorization
When possible, the functions are vectorized in order to handle processing
batches of values. A set of scalars is a 1D array. A set of vectors is a 2D
array, with each vector in a column. So, a (3, 7) array is a set of seven
vectors, each with 3 elements. If the axis parameter is set to 0, the
transpose is true. A set of matrices is a 3D array with each matrix in a stack.
The first index is the stack number. So, a (5, 3, 3) array is a stack of five
3x3 matrices. Roll, pitch, and yaw are not treated as a vector but as three
separate quantities. The same is true for latitude, longitude, and height above
ellipsoid. A quaternion is passed around as an array.
Robustness
In general, the functions in this library check that the inputs are of the correct type and shape. They do not generally handle converting inputs which do not conform to the ideal type and shape. Generally, the allowed types are int, float, list, and np.ndarray.
Constants
The defined constants are
| Name | Value | Definition |
|---|---|---|
A_E |
6378137.0 | Earth's semi-major axis (m) |
F_E |
298.257223563 | Earth's flattening constant |
B_E |
6356752.314245 | Earth's semi-minor axis (m) |
E2 |
6.694379990141317e-3 | Earth's eccentricity squared (ND) |
W_EI |
7.2921151467e-5 | sidereal Earth rate (rad/s) |
Functions
The defined functions for attitude-representation conversion are
axis_angle_to_vectorvector_to_axis_anglerpy_to_vectorvector_to_rpydcm_to_vectorvector_to_dcmquat_to_vectorvector_to_quatrpy_to_axis_angleaxis_angle_to_rpydcm_to_axis_angleaxis_angle_to_dcmquat_to_axis_angleaxis_angle_to_quatdcm_to_rpyrpy_to_dcmdcmeulerrotatequat_to_rpyrpy_to_quatquat_to_dcmdcm_to_quatdcm_inertial_to_ecefdcm_ecef_to_navigation
The functions for reference-frame conversions are
geodetic_to_ecefecef_to_geodetictangent_to_ecefecef_to_tangentcurvilinear_to_ecefecef_to_curvilineartangent_to_geodeticgeodetic_to_tangentcurvilinear_to_geodeticgeodetic_to_curvilinearcurvilinear_to_tangenttangent_to_curvilinear
A few additional rotation matrix utility functions are
is_orthomgsrodriguesrodrigues_inv
Installation
For instructions on using pip, visit https://pip.pypa.io/en/stable/getting-started/.
To install from pypi.org,
pip install r3f
Or, from the directory of the cloned repo, run
pip install .
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file r3f-2.2.1.tar.gz.
File metadata
- Download URL: r3f-2.2.1.tar.gz
- Upload date:
- Size: 34.8 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
6e9c7929070988e32a1534683a288e679244e6a7ea825d1df807e52ba626b9dc
|
|
| MD5 |
42bc339f8ab4bef16a161fa69b2e5747
|
|
| BLAKE2b-256 |
a1240b52b17f5cbb4b83e582568ecd5fd2e4ba2737cb7cba9fb4ace42272224b
|
File details
Details for the file r3f-2.2.1-py3-none-any.whl.
File metadata
- Download URL: r3f-2.2.1-py3-none-any.whl
- Upload date:
- Size: 31.8 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
ef7bccc4d42da12512f1d8fb3eed0fe7585bb045a061f8e8fec906b9df18062e
|
|
| MD5 |
7d2d89d9926da55ae5154135aea8da0c
|
|
| BLAKE2b-256 |
5084c94465f6339b4fe8093438a1ac2d05143ed22f9ae1c3dc881383d7a59199
|