Generate trajectories for soft robots from a file
Project description
sorotraj
Generate trajectories for soft robots from yaml files (accompanies the Ctrl-P project)
Installation
Install the release version
This package is on pypi, so anyone can install it with pip: pip install sorotraj
Install the most-recent development version
- Clone the package from the github repo
- Navigate into the main folder
pip install .
Usage
Minimal Example
import sorotraj
file_to_use = 'traj_setup/setpoint_traj_demo.yaml'
traj = sorotraj.TrajBuilder()
traj.load_traj_def(file_to_use)
trajectory = traj.get_trajectory()
interp = sorotraj.Interpolator(trajectory)
actuation_fn = interp.get_interp_function(
num_reps=1,
speed_factor=2.0,
invert_direction=False)
print(actuation_fn(2.155))
Check out the examples folder for more detailed usage examples
Set Up Trajectories:
Trajectories are made of three parts:
- main: used in a looping trajectory
- prefix: happens once before the main part
- suffix: happens once after the main part
Here's an example of what that might look like defined in a yaml file:
config:
setpoints:
# [time, finger1, finger2, n/c, n/c]
main:
- [0.0, 10, 12, 14, 16]
- [1.0, 20, 0, 0, 0]
- [2.0, 0, 20, 0, 0]
- [3.0, 0, 0, 20, 0]
- [4.0, 0, 0, 0, 20]
- [5.0, 10, 12, 14, 16]
prefix:
- [0.000, 0, 0, 0, 0]
- [1.0, 10, 12, 14, 16]
suffix:
- [2.000, 10, 12, 14, 16]
- [3.0, 0, 0, 0, 0]
There are currently three types of ways to generate the main part of a trajectory:
- direct: You enter waypoints directly
- Define waypoints as a list of lists of the form:
[time in sec], [a_1], [a_2], ..., [a_n]
- Define waypoints as a list of lists of the form:
- interp: Interpolate between waypoints
- Define waypoints as a list of lists of the form:
[time in sec], [a_1], [a_2], ..., [a_n]
- Set a few more parameters:
- interp_type: (
string
) The type of interpolation to use. right now types include:'linear'
,'cubic'
, and'none'
- subsample_num: (
int
) The total number of subsamples over the whole trajectory
- interp_type: (
- Define waypoints as a list of lists of the form:
- waveform: Generate waveforms (very basic, still just in-phase waveforms across all channels)
- Set up the waveform:
- waveform_type: (
string
) Types include: square-sampled, square, sin, cos-up, cos-down, triangle, sawtooth-f, and sawtooth-r - waveform_freq: (
float
) Frequency in Hertz - waveform_max: (
float
) A list of the maximum values for the waveform, in the form:[20, 0, 15, 5]
- waveform_min: (
float
) A list of the minimum values for the waveform, in the form:[0, 20, 0, 15]
- waveform_type: (
- Set a few more parameters:
- subsample_num: (
int
) The total number of subsamples over the whole trajectory - num_cycles: (
int
) The number of cycles of the waveform - channels: (
bool
) Flags to turn channels on and off. A list of the form:[1,1,0,0]
- subsample_num: (
- Set up the waveform:
Convert Trajectories Line-by-Line
Check out the build_convert_trajectories.py example.
- Set up a conversion function
- Inputs: one original trajectory line (
list
) - Outputs: one new trajectory line (
list
)
- Inputs: one original trajectory line (
- Load the trajectory like normal
traj.load_traj_def(file_to_use)
- Convert the trajectory by passing the conversion function
traj.convert_traj(conversion_function)
- This conversion overwrites the original trajectory. Now you can save it like normal
traj.save_traj(file_to_save)
- Convert the trajectory definition by passing the conversion function
traj.convert_definition(conversion_function)
- This conversion overwrites the original trajectory definition and reguilds the trajectory. Now you can save the definition like normal
traj.save_definition(file_to_save)
Build an interpolator
interp = sorotraj.Interpolator(trajectory)
- trajectory: A trajectory object generated by
sorotraj.TrajBuilder
actuation_fn, final_time = interp.get_traj_function(
num_reps=1,
speed_factor=1.0,
invert_direction=False)
- num_reps: (
int
, default=1) Number of times to repeat the main looping trajectory- Must be positive, nonzero
- speed_factor: (
float
, default=1.0) A speed multiplier that is applied to the main loop (but not the prefix or suffix)- Must be positive, nonzero
- invert_direction: (
bool
, default=False) Negate the whole trajectory (useful if actuators have different directionalities)- (
bool
): Negate all channels - (
list of ints
): Choose which channels to negate with a list of channel indices
- (
cycle_fn = interp.get_cycle_function(
num_reps=1,
speed_factor=1.0,
invert_direction=False)
- Same inputs as
get_interp_function()
, but returns a cycle function (returns the current cycle as a function of time) - cycle_fn takes these values:
- -2 = Prefix
- -1 = Suffix
- 0-N = Main loop index
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
sorotraj-1.2.3.tar.gz
(15.0 kB
view details)
Built Distribution
sorotraj-1.2.3-py3-none-any.whl
(12.5 kB
view details)
File details
Details for the file sorotraj-1.2.3.tar.gz
.
File metadata
- Download URL: sorotraj-1.2.3.tar.gz
- Upload date:
- Size: 15.0 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/3.7.1 importlib_metadata/4.10.0 pkginfo/1.8.2 requests/2.27.1 requests-toolbelt/0.9.1 tqdm/4.62.3 CPython/3.8.12
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | d36847f8c90b11abda4cdbbfa38e7a4bb55a69e71892bf2291ca2ad3593669c5 |
|
MD5 | b0c01f9439c6c6a2bae1edba52cbaed8 |
|
BLAKE2b-256 | 01f5ce7cb19a1846cbef77854dd52c33a5232b4aa7d44c4ba832a07a11a83ffb |
File details
Details for the file sorotraj-1.2.3-py3-none-any.whl
.
File metadata
- Download URL: sorotraj-1.2.3-py3-none-any.whl
- Upload date:
- Size: 12.5 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/3.7.1 importlib_metadata/4.10.0 pkginfo/1.8.2 requests/2.27.1 requests-toolbelt/0.9.1 tqdm/4.62.3 CPython/3.8.12
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | ae3910287050976ea78fadd8e6a72a332882ce3f2318e97277a460f90595ca4d |
|
MD5 | 90033e140ac3cef75218a62451ac3dcd |
|
BLAKE2b-256 | 72d6d219ac6cb4a4b25946eb291a97b2e9f162d077d56198b2efcb9c7fe8fde1 |