All Projects → UbiquityRobotics → ubiquity_motor

UbiquityRobotics / ubiquity_motor

Licence: BSD-3-Clause License
Package that provides a ROS interface for the motors in UbiquityRobotics robots

Programming Languages

C++
36643 projects - #6 most used programming language
python
139335 projects - #7 most used programming language
CMake
9771 projects

Labels

Projects that are alternatives of or similar to ubiquity motor

magni robot
Starting point for Magni Robots. Includes launch files and configuration.
Stars: ✭ 33 (+73.68%)
Mutual labels:  ros, magni
rosjava android template
A small Android Studio project containing all ROS dependencies, an example node and a ProGuard configuration.
Stars: ✭ 23 (+21.05%)
Mutual labels:  ros
airsim ros
AirSim ROS packages: modified ros wrapper for airsim, and some vslam related tools. (Mainly focused on Car SimMode)
Stars: ✭ 28 (+47.37%)
Mutual labels:  ros
Virtual-Robot-Challenge
How-to on simulating a robot with V-REP and controlling it with ROS
Stars: ✭ 83 (+336.84%)
Mutual labels:  ros
linorobot2
Autonomous mobile robots (2WD, 4WD, Mecanum Drive)
Stars: ✭ 97 (+410.53%)
Mutual labels:  ros
ar-tu-do
ROS & Gazebo project for 1/10th scale self-driving race cars
Stars: ✭ 65 (+242.11%)
Mutual labels:  ros
smart grasping sandbox
A public sandbox for Shadow's Smart Grasping System
Stars: ✭ 69 (+263.16%)
Mutual labels:  ros
erwhi-hedgehog
Erwhi Hedgehog main repository
Stars: ✭ 31 (+63.16%)
Mutual labels:  ros
Autonomus Indoor Drone
Final year project, autonomus indoor drone developed in ROS using DWM1001 dev-board
Stars: ✭ 26 (+36.84%)
Mutual labels:  ros
multicam calibration
No description or website provided.
Stars: ✭ 91 (+378.95%)
Mutual labels:  ros
rqt ez publisher
ROS topic publisher GUI for rqt
Stars: ✭ 32 (+68.42%)
Mutual labels:  ros
2019-UGRP-DPoom
2019 DGIST DPoom project under UGRP : SBC and RGB-D camera based full autonomous driving system for mobile robot with indoor SLAM
Stars: ✭ 35 (+84.21%)
Mutual labels:  ros
robotiq arg85 description
URDF model of Robotiq 2-Finger Adaptive Robot Gripper 85
Stars: ✭ 20 (+5.26%)
Mutual labels:  ros
direct lidar odometry
Direct LiDAR Odometry: Fast Localization with Dense Point Clouds
Stars: ✭ 202 (+963.16%)
Mutual labels:  ros
urban road filter
Real-time LIDAR-based Urban Road and Sidewalk detection for Autonomous Vehicles 🚗
Stars: ✭ 134 (+605.26%)
Mutual labels:  ros
moveit python
Pure Python Bindings to ROS MoveIt!
Stars: ✭ 107 (+463.16%)
Mutual labels:  ros
firmware
Firmware for the ROSflight autopilot
Stars: ✭ 115 (+505.26%)
Mutual labels:  ros
aruw-vision-platform-2019
ARUW's vision code from the 2019 season. Published here, read-only, for public reference.
Stars: ✭ 37 (+94.74%)
Mutual labels:  ros
uav core
The main integrator of MRS UAV packages in ROS, part of the "mrs_uav_system".
Stars: ✭ 28 (+47.37%)
Mutual labels:  ros
RoboticsAcademy
Learn Robotics with JdeRobot
Stars: ✭ 160 (+742.11%)
Mutual labels:  ros

ubiquity_motor

Build Status

Introduction

This is a Package that provides a ROS interface for the motors in UbiquityRobotics robots. It communicates with the motor controller via a serial port.

Installation

This package may be installed from binaries for both x86 and ARM architectures.

The package may be installed with:

sudo apt-get install ros-kinetic-ubiquity-motor

Configuration launch files for the Magni robot are in the package magni_robot.

ROS API

Subscribed topics

cmd_vel geometry_msgs/Twist The command input.

system_control std_msgs/String A channel to command the motor node to change mode of operation. A text string with a commnad followed by parameter such as enable or disable are used.

motor_control disable      Stops the MCB control over serial (used for firmware load)
motor_control enable       Re-attaches the MCB control over serial for normal operation


speed_control disable      Stops the robot so no speed control is used for collision avoiance
speed_control enable       Re-enables the motor node to respond to cmd_vel speed messages

Published topics

odom nav_msgs/Odometry Odometry computed from motor controller messages.

/tf tf/tfMessage The transform from odom to base_link

firmware_version std_msgs/String Version of motor control board (MCB) firmware formatted as "vXX YYYYMMDD" or just "vXX" if there's no daycode found.

battery_state sensor_msgs/BatteryState Charge state of the robot's batteries.

publish_cmd geometry_msgs/TwistStamped The value of cmd_vel after limits were applied. Available if the publish_cmd paramater is set.

motor_power_active std_msgs/Bool The state of motor power being active is published. This follows the ESTOP switch within about a half second.

motor_state ubiquity_motor::MotorState The combined motor state for both wheels with positions, rotate rates, currents, pwm drive values

left_error std_msgs/Int32 The error in expected left wheel position relative to current left wheel position is published for diagnostics purposes.

right_error std_msgs/Int32 The error in expected right wheel position relative to current right wheel position is published for diagnostics purposes.

left_current std_msgs/Int32 The motor current in amps that the left motor is running at at this time

right_current std_msgs/Int32 The motor current in amps that the right motor is running at at this time

left_tick_interval std_msgs/Int32 A value that is proportional to the time between left wheel encoder ticks for usage in diagnostics. This unsigned value is only published when velocity is non zero.

right_tick_interval std_msgs/Int32 A value that is proportional to the time between right wheel encoder ticks for usage in diagnostics. This unsigned value is only published when velocity is non zero.

Parameters

Comms paramaters

serial_port (string, default: "/dev/ttyS0") Name of device with which to communicate with motor controller hardware.

baud_rate (int, default: 9600) Baud rate for serial communication with motor controller hardware.

Firmware parameters

pid_proportional (int, default: 5000) The P paramater for the motor controller's PID controller.

pid_integral (int, default: 10) The I paramater for the motor controller's PID controller.

pid_derivative (int, default: 1) The D paramater for the motor controller's PID controller.

pid_denominator (int, default: 1000) Divisor for the above PID paramaters.

pid_moving_buffer_size (int, default: 10) Size of a moving buffer used in the control loop.

pid_control (int, default: 0) This word enables non-standard modes for motor control in the firmware. Consult factory for guidance in usage of this parameter.

drive_type (string, default: "standard") This modifies turning and some other motor control parameters if not set to 'standard'. This parameter is set to '4wd' on some custom systems but those require dual MCB controllers and are far more complex systems so do not change this unless instructed to do so by the factory. This setting is only of value for MCB firmware of version v41 or later.

wheel_type (string, default: "standard") This is used to change the type of wheel and encoder combination in use. The origional Magni up into 2021 was only one wheel type which we call 'standard' here. This wheel had a chrome hubcap. In 2021 we started some custom development for a wheel that would set this parameter to 'thin' as the wheel was thinner but also had different drive characteristics. This setting is only of value for MCB firmware of version v41 or later.

wheel_gear_ratio (float, default: 4.294) We are looking into different ratios for the gearing internal to the wheel hub. This ratio impacts the wheel control logic as it is in effect a ratio between the wheel encoders and the wheel itself on the ground. The only other value of use as of late 2021 here is '5.17' which is not released at this time.

fw_max_pwm (int, default: 350) This is a safety cap on the max value we will drive our low level motor control hardware. Do not change this unless instructed to do so by the factory. Prior to late 2021 this was defaulted to 250 internally in the firmware.

deadman_timer (int, default: 2400000) If a message is not received after this interval (in MCU clock ticks), the motor controller should assume an error condition and stop.

battery_voltage_multiplier (float, default: 0.5185) Used to calculate battery voltage from motor controller messages.

battery_voltage_offset (float, default: 0.40948) Used to calculate battery voltage from motor controller messages.

Node parameters

controller_loop_rate (double, default: 20.0) Rate (in Hz) at which to send commands to the motor controller hardware.

diff_drive_controller paramaters

left_wheel (string | string[...]) Left wheel joint name or list of joint names.

right_wheel (string | string[...]) Right wheel joint name or list of joint names.

pose_covariance_diagonal (double[6]) Diagonal of the covariance matrix for odometry pose publishing.

twist_covariance_diagonal (double[6]) Diagonal of the covariance matrix for odometry twist publishing.

publish_rate (double, default: 50.0) Frequency (in Hz) at which the odometry is published. Used for both tf and odom.

wheel_separation_multiplier (double, default: 1.0) Multiplier applied to the wheel separation parameter. This is used to account for a difference between the robot model and a real robot.

wheel_radius_multiplier (double, default: 1.0) Multiplier applied to the wheel radius parameter. This is used to account for a difference between the robot model and a real robot.

cmd_vel_timeout (double, default: 0.5) Allowed period (in seconds) allowed between two successive velocity commands. After this delay, a zero speed command will be sent to the wheels.

base_frame_id (string, default: base_link) Base frame_id, which is used to fill in the child_frame_id of the Odometry messages and TF.

linear/x/has_velocity_limits (bool, default: false) Whether the controller should limit linear speed.

linear/x/max_velocity (double) Maximum linear velocity (in m/s).

linear/x/min_velocity (double) Minimum linear velocity (in m/s). Setting this to 0.0 will disable backwards motion. When unspecified, -max_velocity is used.

linear/x/has_acceleration_limits (bool, default: false) Whether the controller should limit linear acceleration.

linear/x/max_acceleration (double) Maximum linear acceleration (in m/s^2).

linear/x/min_acceleration (double) Minimum linear acceleration (in m/s^2). When unspecified, -max_acceleration is used.

linear/x/has_jerk_limits (bool, default: false) Whether the controller should limit linear jerk.

linear/x/max_jerk (double) Maximum linear jerk (in m/s^3).

angular/z/has_velocity_limits (bool, default: false) Whether the controller should limit angular velocity.

angular/z/max_velocity (double) Maximum angular velocity (in rad/s).

angular/z/min_velocity (double) Minimum angular velocity (in rad/s). Setting this to 0.0 will disable counter-clockwise rotation. When unspecified, -max_velocity is used.

angular/z/has_acceleration_limits (bool, default: false) Whether the controller should limit angular acceleration.

angular/z/max_acceleration (double) Maximum angular acceleration (in rad/s^2).

angular/z/min_acceleration (double) Minimum angular acceleration (in rad/s^2). When unspecified, -max_acceleration is used.

angular/z/has_jerk_limits (bool, default: false) Whether the controller should limit angular jerk.

angular/z/max_jerk (double) Maximum angular jerk (in m/s^3).

enable_odom_tf (bool, default: true) Whether to publish to TF directly.

wheel_separation (double) The distance of the left and right wheel(s). The diff_drive_controller will attempt to read the value from the URDF if this parameter is not specified.

wheel_radius (double) Radius of the wheels. It is expected they all have the same size. The diff_drive_controller will attempt to read the value from the URDF if this parameter is not specified.

odom_frame_id (string, default: "/odom") Name of frame in which to publish odometry.

publish_cmd (bool, default: false) Publish the velocity command to be executed. It is to monitor the effect of limiters on the controller input.

allow_multiple_cmd_vel_publishers (bool, default: false) When enabled the controller will brake if there is more than one publishers on its input topic, ~/cmd_vel.

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].