Firmware version 0.4.0
[0.4.0] - 2018-06-10
Added
- Encoder can now go forever in velocity/torque mode due to using circular encoder space.
- Protocol supports function return values
- bake Git-derived firmware version into firmware binary. The firmware version is exposed through the
fw_version_[...]
properties. make write_otp
command to burn the board version onto the ODrive's one-time programmable memory. If you have an ODrive v3.4 or older, you should run this once for a better firmware update user experience in the future. Run the command without any options for more details. Once set, the board version is exposed through thehw_version_[...]
properties.- infrastructure to publish the python tools to PyPi. See
tools/setup.py
for details. - Automated test script
run_tests.py
- System stats (e.g. stack usage) are exposed under
<odrv>.system_stats
Changed
- DFU script updates
- Verify the flash after writing
- Automatically download firmware from GitHub releases if no file is provided
- Retain configuration during firmware updates
- Refactor python tools
- The scripts
explore_odrive.py
,liveplotter.py
,drv_status.py
andrate_test.py
have been merged into one singleodrivetool
script. Running this script without any arguments provides the shell thatexplore_odrive.py
used to provide. - The command line options of
odrivetool
have changed compared to the originalexplore_odrive.py
. Seeodrivetool --help
for more details. odrivetool
(previouslyexplore_odrive.py
) now supports controlling multiple ODrives concurrently (odrv0
,odrv1
, ...)- No need to restart the
odrivetool
shell when devices get disconnected and reconnected - ODrive accesses from within python tools are now thread-safe. That means you can read from the same remote property from multiple threads concurrently.
- The liveplotter (
odrivetool liveplotter
, formerlyliveplotter.py
) does no longer steal focus and closes as expected - Add commands
odrivetool backup-config
andodrivetool restore-config
- (experimental: start liveplotter from
odrivetool
shell by typingstart_liveplotter(lambda: odrv0.motor0.encoder.encoder_state)
)
- The scripts
- Set thread priority of USB pump thread above protocol thread
- GPIO3 not sensitive to edges by default
- The device now appears as a composite device on USB. One subdevice is still a CDC device (virtual COM port), the other subdevice is a vendor specific class. This should resolve several issues that were caused by conflicting kernel drivers or OS services.
- Add WinUSB descriptors. This will tell Windows >= 8 to automatically load winusb.sys for the ODrive (only for the vendor specific subdevice). This makes it possible to use the ODrive from userspace via WinUSB with zero configuration. The Python tool currently still uses libusb so Zadig is still required.
- Add a configuration to enable the ASCII protocol on USB at runtime. This will only enable the ASCII protocol on the USB CDC subdevice, not the vendor specific subdevice so the python tools will still be able to talk to the ODrive.
Fixed
- Enums now transported with correct underlying type on native protocol
- USB issue where the device would stop responding when the host script would quit abruptly or reset the device during operation