Releases: LeoRover/core2_firmware
v2.1.1
v2.1.0
What's Changed
- Adding mecanum wheels handling to firmware for Husarion core2 board by @Bitterisland6 in #9
New Contributors
- @Bitterisland6 made their first contribution in #9
Full Changelog: v2.0.0...v2.1.0
v2.0.0
v1.2.0
Summary
- Added robot position estimation
- Added
robot_frame_id
andodom_frame_id
parameters - Mitigate the issue with persistent config loading.
- Reversed the wheel effort values sent with the joint states
- Imported the newest version of rosserial client libraries
- Fixed compilation issues
- Various stylistic changes and optimizations.
A detailed description of changes:
Added robot position estimation
The firmware now estimates pose of the robot in a 2D plane based on the wheel velocities. The pose is pubished on the wheel_pose
topic and the core2/reset_odometry
service allows resetting it to zero.
Added robot_frame_id
and odom_frame_id
parameters
These parameters lets you customize the values of the frame_id
field in the published wheel_odom
and wheel_pose
messages.
Mitigate the issue with persistent config loading.
There is an issue with loading the configuration from persistent storage on some CORE2 devices, where sometimes incorrect bit values are set. This resulted in the configuration reset due to incorrect checksum. The problem has been mitigated by trying to load the config 3 times before giving up.
Reversed the wheel effort values sent with the joint states
The effort
values published on the joint_states
topic were reversed so that they are positive when the wheels are moving forward and negative when moving backward.
Imported the newest version of rosserial client libraries
The project now uses rosserial client libraries generated from the upstream version of rosserial, instead of the libraries bundled with the husarion VSCode extension.
v1.1.0
Summary
- fixed an issue with sudden changes in encoder count values
- modified the ROS API to use services instead of topics for settings config options
- added service for getting the current firmware version
- fixed the issue with building the firmware on Windows
A detailed description of changes:
fixed an issue with sudden changes in encoder count values
There was an issue which caused sporadic huge changes in wheel position and velocity spikes if there is noise in encoder signal. This has been fixed by implementing a detection of abnormal wheel velocities in update function of wheel controllers.
modified the ROS API to use services instead of topics for settings config options
All of the functionalities which were available on /core2
topics are now provided by services instead. For example, to turn the IMU functionality on, you now have to run:
rosservice call /core2/set_imu true
instead of:
rostopic pub /core2/set_imu std_msgs/Bool true
added service for getting the current firmware version
The service /core2/get_firmware_version
returns a String with the current firmware version which is set in the params.h
file.
fixed the issue with building the firmware on Windows
The previous version of the firmware did not build successfully on Windows due to missing std::to_string
function in standard library.
v1.0.0
Summary
- added GPS module support
- added ROS logging
- added ROS parameters
- added
angular_velocity_multiplier
parameter - added
frame_id
parameters for IMU and GPS - style-formatted and restructured code
A detailed description of changes:
added GPS module support
The feature has been tested on Waveshare UART GPS NEO-6M
module, but should work with any UART GPS module that supports NMEA protocol. The port on which the device is connected can be adjusted by setting GPS_HSENS variable in params.h
file and the feature can be toggled by publishing on core2/set_gps
topic. Upon receiving each GPGGA message, a new NavSatFix will be published on gps_fix
topic.
added ROS logging
The firmware now publishes log messages (on different verbosity levels) to the ROS network via rosserial. To enable debug level logging, send true
on core2/set_debug
topic.
added ROS parameters
All of the parameters regarding motors, servos and differential drive controller are now loaded at runtime from ROS Parameter Server. A complete list of the parameters and their description can be found on the ROS API
section of the README file.
added angular_velocity_multiplier
parameter
This parameter was added to account for a difference between a two-wheel robot model and the real robot (check the README for more info). The wheel odometry should now be closer to the real velocity.
added frame_id
parameters for IMU and GPS
The core2/imu_frame_id
and core2/gps_frame_id
parameters specify the tf frame ids associated with IMU and GPS modules.
v0.5.1
Summary
- [IMU] add gyro bias to persistent config
A detailed description of changes:
[IMU] add gyro bias to persistent config
Previously, after gyroscope calibration, the bias was written to IMU registers which were reset after the board was restarted. Now the bias is added to the persistent config.
v0.5
Summary
- lowered serial communication baudrate
- abandoned the use of covariance matrices to reduce bandwidth
A detailed description of changes:
lowered serial communication baudrate
To mitigate losing synchronization issues in Raspberry Pi, the serial communication baudrate was changed from 500Kbps to 250Kbps. This makes this version of firmware not compatible with older versions of Leo image. For the firmware to work, please flash the newest image, or do the following:
sudo apt update
sudo apt upgrade ros-kinetic-leo-bringup
sudo systemctl disable husarnet-configurator
and reboot the Rover.
abandoned the use of covariance matrices to reduce bandwith
The firmware will no longer send covariance matrices with Odometry and Imu messages. This reduces the used bandwidth to below 100Kbps.
v0.4
Summary
- abandoned hCloud support
- added parameter preset for Buehler motors
- added covariance to wheel odometry
- added MPU9250 IMU support
- added persistent storage config
- added system topics
A detailed description of changes:
abandoned hCloud support
The firmware will no longer use hCloudClient for communication. The reasons are better serial communication quality and a lack of interest in the feature. This makes this version of firmware not compatible with older versions of Leo image. For the firmware to work, please flash the newest image, or do the following:
sudo apt update
sudo apt install ros-kinetic-leo-bringup
sudo systemctl disable husarnet-configurator
and reboot the Rover.
added parameter preset for Buehler motors
You can now choose between Pololu and Buehler presets for encoders and PID regulators by modifying the parameters.h
file. Both compiled versions are also available for download below.
added covariance to wheel odometry
Odometry publisher now uses TwistWithCovarianceStamped messages instead of Twist. The new messages contain timestamp, frame id and covariance matrix that is configurable in parameters.h
file. This type of messages can be used, for example, with ekf_localization_node.
added MPU9250 IMU support
The firmware now supports MPU9250 IMU connected to I2C port on hSens2 (can be changed to hSens1 in parameters.h
). When IMU is active, new topics should appear: imu/data_raw
(accelerometer and gyroscope readings) and imu/mag
(magnetometer readings in North-West-Up world frame), as well as services for calibration.
added persistent storage config
The firmware now stores configuration in Core2 persistent storage (STM's flash). For now, the configuration stores IMU config and calibration data. It supports checksum checking and resetting to default values.
added system topics
added topics in core2
namespace for: resetting the board, resetting the configuration in persistent storage and enabling/disabling IMU.
v0.3
Summary
- more accurate speed measurement
- improved odometry calculation
- added joint states publishing
- changed some coding conventions
A detailed description of changes:
more accurate speed measurement
Previously, the velocity was measured by calculating the difference in wheel position between each regulator update (each 10ms). Now, 10 last wheel positions are memorized and each 10ms, the velocity is calculated using the sliding window approach. This results in much more accurate measurements.
improved odometry calculation
Odometry calculation now uses the improved speed measurement
added joint states publishing
Wheel joint states are now published to joint_states
topic. For each joint, there is velocity (rad/s), position (rad) and effort (PWM duty).