Hello RVR users!
We’ve been talking about improvements to RVR’s control system for quite a while, and we appreciate your patience while the team here has been hard at work bringing those to life. Schedule details may still shift, but at the moment it looks like we’ll be able to release new RVR firmware in early summer. Due to resource limitations, our public SDK’s may not support any new commands until late summer or early fall, but the features will be present in firmware and documented for those who don’t mind low-level programming. Here’s an update on the firmware changes you can expect:
Previously, one driving control system was available to users through roll commands, requiring a target heading and a target speed, with an optional reverse flag.
This update replaces the “roll drive” controller with a higher-performing, more configurable implementation and supplements it with 3 selectable alternate control systems. All control systems present a normalized interface, similar to current roll commands, and an SI units interface where linear velocities are specified in m/s and yaw angular velocity (if applicable) is specified in degrees/s.
The list below does not include everything targeted for the release, but represents the features that are complete at this time.
Improvements: Drive with Heading
- Vector drive state machine
- State 1: If currently stopped, spin in place to face the target heading
- State 2: Drive along the target heading
- User-adjustable yaw and linear velocity slew rates.
- Default yaw slew behavior is dependent on the magnitude of the commanded linear velocity (to make deliberate, slow driving easier). See video for comparison to released firmware
- Yaw targets are typically hit within +/-1 degree of the IMU reading. Previous tolerance was +/- 3 degrees. See video for comparison to released firmware
- Steady-state yaw error during driving tracks to zero across the full linear velocity range (a bug had previously reduced yaw control accuracy at high linear velocities)
New: Drive to X-Y Position
- Provide a target position and orientation as (X,Y,heading), along with a maximum linear velocity, and RVR will rotate to face the target position, drive to the target position, and then turn to the specified orientation, sending an API async when done. See video for demonstration.
- Defaults to driving forward to the target position, but supports options for reverse driving, or automatic selection of forward or reverse to minimize the required initial turn.
- Supports relative or absolute coordinates
New: RC Drive
- Provide a linear velocity, and a yaw angular velocity, and RVR will follow that command until it times out (default 2 seconds) or a new command is received.
- Supports multiple adjustable options for linear acceleration rates, so your project can keep delicate payloads safe, or put the pedal to the metal.
New: Tank Drive
- Provide left and right tread linear velocity targets in normalized or SI units form, and RVR will track these targets. If your goal is to build an externally hosted control system, this is a much more useful interface layer to use than raw motor commands, as the onboard velocity controllers update at 1kHz and the maximum streaming data update rate to provide feedback to an external control system is 100 Hz.
- Encoder position resolution has increased 4x due to counting all quadrature edges as ticks rather than full quadrature cycles.
- Velocity measurement has improved with changes to the encoder driver.
- Tick counts for the left and right encoders are available as 32 bit signed integer values.
- RVR’s locator precision is improved. There was a bug that caused loss of precision at low tread velocities, which has been fixed. Precision is now independent of tread velocity.
Other Bug Fixes
- Idle to “soft sleep” (standby) transition now occurs after 5 minutes, as designed, to reduce power consumption.
- Resolved “lurching” bug in the roll drive controller.
If you have any questions, feedback, or concerns, please let us know in this thread. We are very excited to share these details, and look forward to the actual release to you, our RVR users.
Senior Firmware Engineer, Sphero
4/3/20: changed “roll drive” to “drive with heading” for consistency with SDK naming.