Wiki

leo_robot: leo | leo_bringup | leo_fw

Package Summary

Firmware binary releases and update script for Leo Rover

leo_robot: leo | leo_bringup | leo_fw

Package Summary

Binary releases of Leo Rover firmware and related utilities

Overview

This package contains the newest binary releases of leocore_firmware and core2_firmware and the script which flashes it to the LeoCore or CORE2 board connected to the Raspberry Pi. The script uses a modified version of stm32loader python package, so it has to be installed on the system.

Usage

Flashing firmware

To flash the newest firmware, simply type:

rosrun leo_fw update

To flash the firmware from file, use the flash script:

rosrun leo_fw flash firmware.bin

The script will guide you through the flashing process.

The firmware uses rosserial protocol to communicate with ROS nodes. This requires a running host-side rosserial implementation which should be already started by leo_bringup, but it can also be started manually:

rosrun rosserial_python serial_node.py _port:=/dev/serial0 _baud:=250000

Once the serial_node connects to the firmware, the firmware's ROS API should be available on the system.

The ROS API differs between the firmwares released for Noetic and Melodic distributions. Make sure you read the correct section.

ROS API (Noetic)

firmware

Subscribed Topics

cmd_vel (geometry_msgs/Twist) firmware/wheel_{FL,RL,FR,RR}/cmd_pwm_duty (std_msgs/Float32) firmware/wheel_{FL,RL,FR,RR}/cmd_velocity (std_msgs/Float32)
Available only in the firmware for the CORE2 board:
firmware/servoX/cmd_angle (std_msgs/Int16) firmware/servoX/cmd_pwm (std_msgs/UInt16MultiArray)

Published Topics

firmware/wheel_odom (leo_msgs/WheelOdom) firmware/battery (std_msgs/Float32) firmware/battery_averaged (std_msgs/Float32) firmware/wheel_states (leo_msgs/WheelStates) firmware/imu (leo_msgs/Imu)

Services

firmware/reset_odometry (std_srvs/Trigger) firmware/reset_board (std_srvs/Trigger) firmware/get_board_type (std_srvs/Trigger) firmware/get_firmware_version (std_srvs/Trigger)

Parameters

firmware/diff_drive/wheel_radius (float, default: 0.0625) firmware/diff_drive/wheel_separation (float, default: 0.33) firmware/diff_drive/angular_velocity_multiplier (float, default: 1.91) firmware/diff_drive/input_timeout (int, default: 500) firmware/wheels/encoder_resolution (float, default: 878.4) firmware/wheels/pid/p (float, default: 0.0) firmware/wheels/pid/i (float, default: 0.005) firmware/wheels/pid/d (float, default: 0.0) firmware/wheels/pwm_duty_limit (float, default: 100.0) firmware/battery_min_voltage (float, default: 10.0)
Available only in the firmware for the CORE2 board:
firmware/servo_voltage (int, default: 2) firmware/servoX/period (int, default: 20000) firmware/servoX/angle_min (int, default: -90) firmware/servoX/angle_max (int, default: 90) firmware/servoX/width_min (int, default: 1000) firmware/servoX/width_max (int, default: 2000)

firmware_message_converter

A node that subscribes for the messages published by the firmware and converts them to message types commonly used in ROS.

Subscribed Topics

firmware/wheel_states (leo_msgs/WheelStates) firmware/wheel_odom (leo_msgs/WheelOdom) firmware/imu (leo_msgs/Imu)

Published Topics

joint_states (sensor_msgs/JointState) wheel_odom_with_covariance (nav_msgs/Odometry) imu/data_raw (sensor_msgs/Imu)

Parameters

robot_frame_id (string, default: "base_link") odom_frame_id (string, default: "odom") imu_frame_id (string, default: "imu_frame") tf_frame_prefix (string, default: "") wheel_joint_names (string list, default: [wheel_FL_joint, wheel_RL_joint, wheel_FR_joint, wheel_RR_joint]) wheel_odom_twist_covariance_diagonal (float list, default: [0.0001, 0.0, 0.0, 0.0, 0.0, 0.001]) imu_angular_velocity_covariance_diagonal (float list, default: [0.000001, 0.000001, 0.00001]) imu_linear_acceleration_covariance_diagonal (float list, default: [0.001, 0.001, 0.001])

ROS API (Melodic)

firmware

Subscribed Topics

cmd_vel (geometry_msgs/Twist) servoX/angle (std_msgs/Int16) servoX/pwm (std_msgs/UInt16MultiArray)

Published Topics

wheel_odom (geometry_msgs/TwistStamped) wheel_pose (geometry_msgs/PoseStamped) battery (std_msgs/Float32) joint_states (sensor_msgs/JointState)
Only if IMU is enabled:
imu/gyro (geometry_msgs/Vector3Stamped) imu/accel (geometry_msgs/Vector3Stamped) imu/mag (geometry_msgs/Vector3Stamped)
Only if GPS is enabled:
gps_fix (sensor_msgs/NavSatFix)

Services

core2/reset_odometry (std_srvs/Trigger) core2/reset_board (std_srvs/Empty) core2/reset_config (std_srvs/Trigger) core2/get_firmware_version (std_srvs/Trigger) core2/set_imu (std_srvs/SetBool) core2/set_gps (std_srvs/SetBool) core2/set_debug (std_srvs/SetBool)
Only if IMU is enabled:
imu/calibrate_gyro_accel (std_srvs/Trigger) imu/calibrate_mag (std_srvs/Trigger)

Parameters

core2/diff_drive/wheel_radius (float, default: 0.0625) core2/diff_drive/wheel_separation (float, default: 0.33) core2/diff_drive/angular_velocity_multiplier (float, default: 0.0625) core2/diff_drive/input_timeout (int, default: 500) core2/motors/encoder_resolution (float, default: 878.4) core2/motors/encoder_pullup (int, default: 1) core2/motors/max_speed (float, default: 800.0) core2/motors/pid/p (float, default: 0.0) core2/motors/pid/i (float, default: 0.005) core2/motors/pid/d (float, default: 0.0) core2/motors/power_limit (float, default: 1000.0) core2/motors/torque_limit (float, default: 1000.0) core2/servo_voltage (int, default: 2) core2/servoX/period (int, default: 20000) core2/servoX/angle_min (int, default: -90) core2/servoX/angle_max (int, default: 90) core2/servoX/width_min (int, default: 1000) core2/servoX/width_max (int, default: 2000) core2/robot_frame_id (string, default: "base_link") core2/odom_frame_id (string, default: "odom")
Only if IMU is enabled:
core2/imu_frame_id (string, default: "imu")
Only if GPS is enabled:
core2/gps_frame_id (string, default: 'gps')

Wiki: leo_fw (last edited 2022-02-21 17:45:46 by BlazejSowa)