v2.0.0
This major release makes all Python code synchronous (asynchronous code was mainly for logging, now handled by C++ spines). It also ships binary releases of the pi3hat spine that can be directly used on the robots, improves the MPC and PPO agents, and cleans up legacy dependencies.
Thanks to @boragokbakan and @pgraverdy for contributing to this release 👍
Added
- PPO balancer: Allow custom training path
- PPO balancer: Allow re-training with the same policy name
- PPO balancer: Low-pass filter action before acceleration clamping
- PPO balancer: Update reward to penalize commanded accelerations
- UpkieGroundVelocity: Augment observation with previous command
- agents: Closed-loop model predictive control
- envs: Allow custom initial base velocity in Bullet config
- examples: Closed-loop model predictive control
- spines: Build and export the pi3hat spine binary in continuous integration, by @pgraverdy
- spines:
--version
flag for all spine binaries
Changed
- MPC balancer: Remove
asyncio
logic - PPO balancer: Remove
asyncio
logic - Pink balancer: Remove
asyncio
logic - Wheel balancer: Remove
asyncio
logic - envs: Move reset state sampling to
InitRandomization
class - spines: Add
_spine
suffix to binary names, e.g.pi3hat_spine
- spines: Allow pi3hat spine to run without joystick if user validates
Fixed
- Make Makefile date command more portable, by @boragokbakan
- PPO balancer: Correct save frequency during training
- PPO balancer: Run policy deterministically after training
- envs: Merge default and runtime configuration dictionaries
Removed
- Breaking:
async_step
function andasyncio
logic - Breaking:
pi32_config
as 64-bit is the new default - Breaking:
upkie.utils.log_path
submodule and its utility function - Dependency on mpacklog.cpp (already in Vulp)
- Dependency on mpacklog.py