Releases: upkie/upkie
v7.0.0
This release adds collision observations to simulation environments, pixi-pack integration and additional unit tests. It is a major release as get_reward
functions have been removed from all Gymnasium environments. Otherwise comes a regular batch of fixes and additions to the documentation.
Thanks to @Tordjx for contributing to this release 👍
Added
- Add pixi-pack integration
- actuation: Add collision-with-environment observation (thanks to @Tordjx)
- docs: Start Kinematics page
- utils: Add
clear_shared_memory
utility function
Changed
- Bazel: Treat warnings as errors (except the one we can't avoid)
- Minimum Python version is now 3.9
- envs: Observation-based reward wrapper
- envs: Unit test for the base
step
function - examples: Group simulation-related examples in a sub-directory
Fixed
- Bazel: Ignore
.pixi
directory as it can contain unrelated Bazel files - Fix unused variable warning in Bullet interface
Removed
- Breaking: Remove
get_reward
functions from all environments - Makefile: Remove conda packing rules, now deprecated in favor of pixi
v6.1.0
This release adds link inertia randomization to the Bullet interface contributed by @Tordjx 👍 as well as non-major API updates and a regular batch of fixes.
Added
- Configure pixi in
pyproject.toml
- Handle GLIBC version incompatibility in
start_simulation.sh
- Spine: Throw an exception when a servo reply has invalid torque
- Update downloaded simulation spine in cache if outdated
- actuation: Added link inertia randomization to the Bullet interface (thanks to @Tordjx)
- actuation: Check maximum torques before sending commands
- cpp: Add
ServoError
exception - model: Static model for joints with position, velocity and torque limits
- pixi: Task to generate the documentation by
pixi -e docs make
Changed
- CICD: Build release spines with Ubuntu 20.04 rather than 22.04
- CICD: Switch to pixi for documentation workflow
- CICD: Update upload-artifact action to v4
- Remove layout argument to actuation interfaces
- actuation: Rename
Interface::initialize_action
toInterface::reset_action
- actuation: Rename
Interface::servo_joint_map
toInterface::servo_name_map
- deps: Upate to palimpsest 2.2.1
Fixed
- examples: Lying genuflection example (thanks to @one-for-all)
- examples: Unwrap environments to get their neutral actions
- Update
start_simulation.sh
for systems where-v
is not defined
Removed
- env: Remove unused
leg_return_period
and hard-code it to one second - env: Replace contingent
parse_first_observation
by a reset override - model: Remove C++
upkie::model
namespace - observers: Remove upper-leg and wheel joints from configurable parameters
v6.0.0
This release gives one more careful 👀 to spine cycles, with the main two updates:
- Combine action and observation steps in the spine-agent IPC protocol, halving the number of waiting intervals between the two.
- Fix observation consistency between the
run
andsimulate
spine functions: thanks to @Tordjx for pointing this out 👍
This iteration also produced some more design documentation in the following discussions:
- Starting CAN cycles after sleep or after action
- Shift in actions sequence between agent and simulator
Added
- Makefile: Conda environment packing and unpacking rules
- Support Python 3.12
- tools: Add
ps_thread
command
Changed
- Breaking: Spine and spine interface revisions:
- Observations are now returned upon reset and step
- Spine: Remove separate observation state and observation request
- SpineInterface: Setting an action now returns an observation
- SpineInterface: Starting the spine now returns an observation
- StateMachine: Rename spine FSM state from "act" to "step"
- docs: Update spine FSM specification in the documentation
- Breaking: actuation: Move resolution to static configuration
- Breaking: actuation: Move servo layout to static configuration
- Breaking: envs: Rename
LowPassFilterAction
toAddLagToAction
- CICD: Pin Ubuntu workflows to 22.04
- Default
kd
gain for wheel servos is now 0.3 - Move Python spine exceptions to
upkie.exceptions
- docs: Turn environment page into an index
- tools: Make output directory an argument in
dump_servo_configs
- tools: Simplify servo configuration script
Fixed
- BulletInterface: Fix typo in a comment
- CICD: Install Doxygen with specific version from conda-forge
- Spine: Fix observation consistency between
run
andsimulate
- envs: Clamp ground velocity action in
UpkieGroundVelocity
Removed
- Bazel: Remove legacy rules for PyPI dependencies
- Move PID balancer to its own repository
- deps: Remove dependency on PyYAML
- examples: Remove Bazel BUILD file
- model: Remove duplicate maximum torque constant
v5.2.0
This release adds several features to the Bullet simulation spine (custom initial configuration, uncertainty on measurements) as well as a random-push wrapper contributed by @Tordjx, thanks 👍
Added
- BulletInterface: Apply custom initial joint configuration, if provided
- BulletInterface: Report velocity of the base link in groundtruth
- BulletInterface: Torque control noise to joint-property configuration
- BulletInterface: Torque measurement noise to joint-property configuration
- BulletInterface: Uncertainty on IMU accelerometer and gyroscope measurements
- Forward command-line arguments to the spine in
start_simulation.sh
- ImuData: Add linear velocity field
- envs: Add a random-push wrapper (thanks to @Tordjx)
- examples: Apply an external force to lift an Upkie in sim
- examples: Custom initial state with a non-zero joint configuration
- examples: Simulation with joint friction
- examples: Simulation with sensor noise
- spines: Add variant argument to BulletSpine
Changed
- BulletInterface: Move simulation body poses to
sim.bodies
- BulletInterface: Rename internal unit-test getters
- actuation: Log simulation groundtruth to
sim
Fixed
- BulletInterface: Fix application of external forces
- CICD: Enable stable-baselines3 environment-check unit tests
- docs: Add missing documentation pages
- docs: Document Gym environment wrappers
- envs: Handle spine errors raised in base env constructor
- envs: Register UpkieServoPositions and UpkieServoTorques environments
Removed
- CICD: Remove pycodestyle as we now use ruff for Python linting
- BulletInterface: Remove unused orientation/position unit-test getters
v5.1.0
This release adds logging of raw IMU measurements, two new UpkieServoPositions
and UpkieServoTorques
environments contributed by @Tordjx (thanks! 👍), and a sizable batch of fixes and safety checks.
Added
- actuation: Additional check on maximum torques for each command
- actuation: Extend ImuData with raw measurements
- actuation: Log raw IMU measurements from pi3hat interface
- envs: Add UpkieServoPositions child environment (thanks to @Tordjx)
- envs: Add UpkieServoTorques child environment (thanks to @Tordjx)
- envs: Add a
model
attribute to all Upkie environments - envs: Start reward submodule with a wheeled inverted pendulum reward
- envs: Use wheel torque limits from model in UpkieGroundVelocity
- envs: Wheeled inverted pendulum environment for reduced-model testing
- exceptions: Add PositionCommandError exception
- model: Add
rotation_ars_to_world
androtation_base_to_imu
- model: Add
upper_leg_joints
list - tools: Add
update
command toupkie_tool
- utils: Add unit tests for Raspberry Pi utility functions
- utils: Raise an exception when trying to configure agent from an interpreter
Changed
- Avoid using
numpy.typing
for compatibility with older versions of NumPy - PID balancer: Fix dependencies for running on systems without conda
- PID balancer: Update filenames of the two main scripts
- actuation: Throw PositionCommandError rather than stopping a servo on error
- deps: Update to palimpsest 2.2.0
- envs: Refactor internal reward of
UpkieGroundVelocity
environment - envs: Use torque limits from model in
UpkieGroundVelocity
environment - examples: Make wheeled balancing example a bit more complex and more stable
- examples: wheeled inverted pendulum model example
- exceptions: Move to the top-level Python module
Fixed
- actuation: Correct inline of two Bullet utility functions
- actuation: Fix IMU acceleration in Bullet upon resets
- envs: Make sure action values are floating-point numbers (thanks to @Tordjx)
- exceptions: Make all exceptions derive from UpkieError
- model: Fix type of upper-leg and wheel joint lists
- spine: Handle deserialization exceptions when beginning a cycle
Removed
- actuation: Remove unused IMU data from mock interface
v5.0.1
This patch release fixes a bug of the contact detection function, which wasn't (gasp!) and is now covered by a unit test.
Fixed
- envs: Fix missing return value in fall detection function
v5.0.0
This major release merges all C++ code (previously: vulp
) into upkie
, which simplifies Python–C++ development. It also exposes body coordinates from simulation, refactors upkie.model
, improves tooling, and brings a healthy supply of fixes.
Thanks to @ubgk and @Tordjx for contributing to this release 👍
NB: the IPC shared-memory file is now named /upkie
. If you encounter an error that /vulp
is not found, you will need to update either your spine or your upkie
Python package.
Added
- CICD: Build jobs for x86 and ARM64 macOS spines
- CICD: Packaging job for conda-forge
- Import and adapt C++ code from Vulp (
vulp
namespace is nowupkie:cpp
) - Log received actuation replies in spine cycles
- PID balancer: Conda environment file
- bazelisk: Add support for ARM64 CPUs
- envs: Add
left_wheeled
parameter to theUpkieGroundVelocity
environment - examples: Tuning the gains of a standard two-task PI balancer
- model: Add joints submodule
- setup: Add micromamba installation script
- setup: Automate process of building new system images
- spine: Print out configuration dictionary upon reset
- spines: Expose environment body poses in Bullet spine (thanks to @Tordjx)
- tools: Configure servo gains during setup
Changed
- Breaking: rename the default shared-memory file to
/upkie
- CICD: Switch to Micromamba for unit testing
- Makefile: Separate rule to set the raspi date
- PID balancer: default to hostname for the agent configuration
- Put hostname before spine name in log file names
- bazelisk: Update bazelisk version to 1.20.0
- deps: Update Upkie description to 2.1.0
- deps: Update pi3hat dependency to latest commit
- docs: Sort documentation pages by expected discovery steps
- envs: Warn when a fall is detected
- examples: Rename direct servo control example
Fixed
- CICD: Release jobs for x86 and ARM64 macOS spines
- CICD: Update macOS x86 runner images (thanks to @ubgk)
- actuation: Fix duplicate
data_
attribute in pi3hat actuation interface - observers: Read configuration matrix in base orientation observer
- raspunzel: argv0 when executing the target is now the same as
bazel run
- setup: Fix configuration-write order in servo config script
Removed
- utils: Pinocchio utility functions
- deps: Dependency on separate Vulp project
- docs: Remove PID balancer from the documentation
v4.0.0
This release adds the env.bullet_extra()
to exert additional actions like external forces in simulation. It adds developer notes to the documentation, and makes the following API-breaking changes:
- The Python
upkie.observers
submodule has been removed and its content moved to C++ - The API for env logging is now
env.log("field_name", values)
- The Gym observation space of the
UpkieServos
environment is now restricted to servo sensors
Below is the complete changelog.
Added
- PID balancer: Monitor both tire contacts in simulation examples
- docs: Developer notes
- envs: Add the
env.bullet_extra
function for magic actions in sim - envs: Parameter to disable frequency checks during frequency regulation
- observers: Base orientation observer
- utils: Factor
get_log_path
function
Changed
- dependencies: Update Vulp to 2.5.0
- envs: Bump
UpkieServos
version number to 4 - envs: Change API of logging function to
env.log(name, entry)
- envs: Restrict observation space of
UpkieServos
to servos
Fixed
- PID balancer: Fix shared-memory opening in standalone Bullet script
- dist: Exclude unnecessary files from Python packages
- envs: Stop the spine when deleting an environment instance
Removed
- Optional dependencies for balancers that now have their own repositories
- observers: Python version of the base orientation observer
v3.4.0
This release switches the right leg from bus 2 to bus 3, along with a batch of fixes to the Bullet spine and Gymnasium environments. It also moves agents (aside from the demo PID balancer) to their own repositories:
- MPC balancer: balance in place using model predictive control.
- Pink balancer: an extended PID balancer than can crouch and lift its legs.
- PPO balancer: balance in place with a policy trained by reinforcement learning.
Added
- Add
--build
argument to the simulation script - CICD: Run ShellCheck on scripts
- Clear shared-memory when starting the Bullet spine
- Script to dump all servo motor-driver configurations
Changed
- dependencies: Update Upkie description to 1.5.0
- dependencies: Update Vulp to 2.2.1
- Don't build simulation spine if execution fails
- Move agents'
requirements.txt
files to optional project dependencies - palinode: Rename
run_pid_balancer.sh
totry_pid_balancer.sh
😊 - Rename top-level run script to
run_pid_balancer.sh
Fixed
- Fix Gymnasium API in the readme example (thanks to @araffin)
- Handle closing of GUI window in simulation script
- Make sure all
UpkieServos
box observations are proper arrays
Removed
- Move MPC balancer to its own repository
- Move PPO balancer to its own repository
v3.3.0
This release brings a script to guide new users in running standard agents, and adds an option to the Bullet spine to load extra URDFs. Under the hood, it switches from posix-ipc to the standard library for shared-memory management.
Added
- Script to run any of the standard agents
- spines:
bullet_spine
accepts extra URDFs as arguments (thanks to @ubgk 👍)
Changed
- dependencies: Bump loop-rate-limiters to 1.0.0
- dependencies: Replace posix-ipc by shared-memory from the standard library
- envs: Redirect logging to /env prefix
- envs: Rename default action in UpkieServos to neutral, its position is NaN
- Minimum Python version is now 3.8
Removed
- Script to compile and run the PID balancer
- utils: ActionError exception