Files | |
| file | bindings/c/include/copp/path.h |
| Path construction, metadata, evaluation, and callback path APIs. | |
Data Structures | |
| struct | CoppJet3 |
| C-compatible third-order automatic-differentiation scalar. More... | |
| struct | CoppPathOptions |
| Options for waypoint spline path construction. More... | |
Typedefs | |
| typedef struct CoppPath | CoppPath |
| Opaque C handle for a library-owned Path. | |
| typedef enum CoppStatus(* | CoppPathParametricFn) (void *user_data, size_t dim, struct CoppJet3 s, struct CoppJet3 *q) |
| C callback for evaluating a scalar-parametric path with automatic derivatives. | |
| typedef enum CoppStatus(* | CoppPathEvaluate2ndFn) (void *user_data, size_t dim, size_t n, const double *s, double *q, double *dq, double *ddq) |
| C callback for evaluating q, dq, and ddq. | |
| typedef enum CoppStatus(* | CoppPathEvaluate3rdFn) (void *user_data, size_t dim, size_t n, const double *s, double *q, double *dq, double *ddq, double *dddq) |
| C callback for evaluating q, dq, ddq, and dddq. | |
Enumerations | |
| enum | CoppPathOutOfRangeMode { COPP_PATH_OUT_OF_RANGE_MODE_ERROR = 0 , COPP_PATH_OUT_OF_RANGE_MODE_CLAMP = 1 } |
| C ABI path out-of-range behavior. More... | |
| enum | CoppPathParametrization { COPP_PATH_PARAMETRIZATION_UNIFORM = 0 } |
| C ABI waypoint-spline parametrization. More... | |
Functions | |
| enum CoppStatus | copp_path_default_options (double s_min, double s_max, struct CoppPathOptions *out_options) |
| Write default waypoint spline options into out_options. | |
| enum CoppStatus | copp_path_from_waypoints (struct CoppMatrixViewF64 waypoints, struct CoppPathOptions options, struct CoppPath **out_path) |
| Build a waypoint spline path. | |
| enum CoppStatus | copp_path_from_parametric (size_t dim, double s_min, double s_max, CoppPathParametricFn evaluate, void *user_data, struct CoppPath **out_path) |
| Build a path from a scalar-parametric C callback. | |
| enum CoppStatus | copp_path_from_evaluator_2nd (size_t dim, double s_min, double s_max, CoppPathEvaluate2ndFn evaluate_2nd, void *user_data, struct CoppPath **out_path) |
| Build a path from a C callback that provides derivatives up to 2nd order. | |
| enum CoppStatus | copp_path_from_evaluator_3rd (size_t dim, double s_min, double s_max, CoppPathEvaluate2ndFn evaluate_2nd, CoppPathEvaluate3rdFn evaluate_3rd, void *user_data, struct CoppPath **out_path) |
| Build a path from C callbacks that provide derivatives up to 3rd order. | |
| enum CoppStatus | copp_path_dim (const struct CoppPath *path, size_t *out_dim) |
| Return the path dimension. | |
| enum CoppStatus | copp_path_s_range (const struct CoppPath *path, double *out_s_min, double *out_s_max) |
| Return the valid path parameter range. | |
| enum CoppStatus | copp_path_evaluate_up_to_2nd (const struct CoppPath *path, struct CoppSliceF64 s, struct CoppMatrixF64 *out_q, struct CoppMatrixF64 *out_dq, struct CoppMatrixF64 *out_ddq) |
| Evaluate q, dq, and ddq at the supplied path parameters. | |
| enum CoppStatus | copp_path_evaluate_up_to_3rd (const struct CoppPath *path, struct CoppSliceF64 s, struct CoppMatrixF64 *out_q, struct CoppMatrixF64 *out_dq, struct CoppMatrixF64 *out_ddq, struct CoppMatrixF64 *out_dddq) |
| Evaluate q, dq, ddq, and dddq at the supplied path parameters. | |
| void | copp_path_free (struct CoppPath *path) |
| Release a path handle created by this module. | |
Opaque C handle for a library-owned Path.
Create with copp_path_from_waypoints, copp_path_from_parametric, copp_path_from_evaluator_2nd, or copp_path_from_evaluator_3rd and release exactly once with copp_path_free. C callers must not inspect or allocate this type directly.
| typedef enum CoppStatus(* CoppPathParametricFn) (void *user_data, size_t dim, struct CoppJet3 s, struct CoppJet3 *q) |
C callback for evaluating a scalar-parametric path with automatic derivatives.
The callback receives one seeded CoppJet3 path parameter and must write dim CoppJet3 values into q. COPP extracts each returned value and its first three derivatives to serve the existing path evaluation and robot sampling APIs.
| typedef enum CoppStatus(* CoppPathEvaluate2ndFn) (void *user_data, size_t dim, size_t n, const double *s, double *q, double *dq, double *ddq) |
| typedef enum CoppStatus(* CoppPathEvaluate3rdFn) (void *user_data, size_t dim, size_t n, const double *s, double *q, double *dq, double *ddq, double *dddq) |
| enum CoppStatus copp_path_default_options | ( | double | s_min, |
| double | s_max, | ||
| struct CoppPathOptions * | out_options ) |
Write default waypoint spline options into out_options.
Defaults are quintic order 5, uniform parametrization, zero boundary derivatives, and out-of-range errors.
| enum CoppStatus copp_path_from_waypoints | ( | struct CoppMatrixViewF64 | waypoints, |
| struct CoppPathOptions | options, | ||
| struct CoppPath ** | out_path ) |
Build a waypoint spline path.
waypoints must be a matrix view of shape dim x n_points, where each column is one waypoint. options.start_state and options.end_state may be empty to use zero boundary derivatives.
Column-major input with leading_dim >= rows avoids a temporary layout copy while building the spline coefficients. Row-major input is accepted and copied once into column-major temporary storage. Spline construction still allocates library-owned polynomial coefficients for the returned path.
On success, *out_path receives a non-null handle that must be released with copp_path_free.
The example below builds a two-dimensional spline path from column-major waypoint coordinates.
| enum CoppStatus copp_path_from_parametric | ( | size_t | dim, |
| double | s_min, | ||
| double | s_max, | ||
| CoppPathParametricFn | evaluate, | ||
| void * | user_data, | ||
| struct CoppPath ** | out_path ) |
Build a path from a scalar-parametric C callback.
COPP calls evaluate once per path sample with a seeded CoppJet3 value for s. The callback writes dim output entries describing only q(s); the returned CoppJet3 derivative fields provide dq, ddq, and dddq. Use the inline helpers in copp/path.h such as copp_add, copp_mul, and copp_sin to write formulas without hand-differentiating them.
The resulting path supports position, second-order, and third-order evaluation and can be sampled by copp_robot_sample_path_2nd or copp_robot_sample_path_3rd.
The callback pointer and user_data are borrowed by the created path and must remain valid until copp_path_free is called. Calls into the callback are serialized per path handle.
On success, *out_path receives a non-null handle that must be released with copp_path_free.
The example below builds a one-dimensional q(s) = sin(2*pi*s) path.
| enum CoppStatus copp_path_from_evaluator_2nd | ( | size_t | dim, |
| double | s_min, | ||
| double | s_max, | ||
| CoppPathEvaluate2ndFn | evaluate_2nd, | ||
| void * | user_data, | ||
| struct CoppPath ** | out_path ) |
Build a path from a C callback that provides derivatives up to 2nd order.
The callback operates on a batch of n path samples and must write column-major dim x n output matrices (data[row + col * dim]) for q, dq, and ddq. The resulting path can be evaluated or sampled up to 2nd order. Third-order evaluation returns COPP_STATUS_PATH_UNSUPPORTED_DERIVATIVE_ORDER.
The callback pointer and user_data are borrowed by the created path and must remain valid until copp_path_free is called. Calls into the callback are serialized per path handle.
On success, *out_path receives a non-null handle that must be released with copp_path_free.
The example below wraps a one-dimensional external evaluator that provides q, dq, and ddq.
| enum CoppStatus copp_path_from_evaluator_3rd | ( | size_t | dim, |
| double | s_min, | ||
| double | s_max, | ||
| CoppPathEvaluate2ndFn | evaluate_2nd, | ||
| CoppPathEvaluate3rdFn | evaluate_3rd, | ||
| void * | user_data, | ||
| struct CoppPath ** | out_path ) |
Build a path from C callbacks that provide derivatives up to 3rd order.
evaluate_3rd is required. evaluate_2nd may be null; when it is null, second-order evaluation calls evaluate_3rd internally and discards dddq. Both callbacks operate on a batch of n path samples and must write column-major dim x n output matrices (data[row + col * dim]).
The callback pointers and user_data are borrowed by the created path and must remain valid until copp_path_free is called. Calls into the callbacks are serialized per path handle.
On success, *out_path receives a non-null handle that must be released with copp_path_free.
The example below wraps a one-dimensional external evaluator that also provides third derivatives.
| enum CoppStatus copp_path_dim | ( | const struct CoppPath * | path, |
| size_t * | out_dim ) |
Return the path dimension.
| enum CoppStatus copp_path_s_range | ( | const struct CoppPath * | path, |
| double * | out_s_min, | ||
| double * | out_s_max ) |
Return the valid path parameter range.
| enum CoppStatus copp_path_evaluate_up_to_2nd | ( | const struct CoppPath * | path, |
| struct CoppSliceF64 | s, | ||
| struct CoppMatrixF64 * | out_q, | ||
| struct CoppMatrixF64 * | out_dq, | ||
| struct CoppMatrixF64 * | out_ddq ) |
Evaluate q, dq, and ddq at the supplied path parameters.
Output matrices are column-major with shape dim x s.len and must be released with copp_matrix_f64_free.
The example below evaluates second-order path derivatives and reads one column-major output entry.
| enum CoppStatus copp_path_evaluate_up_to_3rd | ( | const struct CoppPath * | path, |
| struct CoppSliceF64 | s, | ||
| struct CoppMatrixF64 * | out_q, | ||
| struct CoppMatrixF64 * | out_dq, | ||
| struct CoppMatrixF64 * | out_ddq, | ||
| struct CoppMatrixF64 * | out_dddq ) |
Evaluate q, dq, ddq, and dddq at the supplied path parameters.
Output matrices are column-major with shape dim x s.len and must be released with copp_matrix_f64_free.
The example below evaluates a third-order path and releases all returned matrices.
| void copp_path_free | ( | struct CoppPath * | path | ) |
Release a path handle created by this module.
Passing null is allowed and has no effect.