Code Monkey home page Code Monkey logo

mecanum_drive's Introduction

mecanum_drive — Mecanum-Drive Controller

This package implements ROS nodes to control and monitor a mecanum-drive robot.

The package is intended as a lighter-weight solution than the ROS controller framework, albeit with lower performance since it is written in Python. If you need tight, real-time control, you may want to look at ros_controllers. Those controllers are designed to integrate with hardware in the same process, rather than using topics. Instead, this package expects to publish the desired motor speeds using standard ROS messages.

Supplied Nodes

  • mecanum_drive_controller — Converts from twist to wheel velocities for motors.

  • mecanum_drive_odometry — Publishes odometry from wheel encoder data.

The nodes in this package are designed with these considerations:

  • The node and hardware implementing mecanum drive should deal only in encoder ticks.

  • Conversions to and from physical coordinates should happen within the nodes in this package.

  • This package should integrate cleanly with the navigation stack, perhaps with remappings.

  • Nodes should use standard topic and parameter names used by the navigation stack, but should allow remapping.

ROS API

1. mecanum_drive_controller

Listens for desired linear and angular velocity, and publishes corresponding wheel velocities, in encoder ticks per second, required to achieve those velocities.

Published Topics

~wheels_desired_rate (std_msgs/Int16MultiArray)

Desired [front left, front right, rear left, rear right] wheel rotation rates, in encoder ticks per second.

Subscribed Topics

~cmd_vel (geometry_msgs/Twist)

Desired linear and angular velocity.

Parameters

~ticks_per_meter (double)

Number of encoder ticks per meter of travel.

~wheel_separation (double)

Distance between the two wheels on the same axis (meters).

~wheel_separation_length (double)

Distance between the front and rear axis (meters).

~rate (int, default: 50)

The rate that the output velocity target messages will be published (Hz).

~timeout_ticks (int, default: 2)

The number of velocity target messages that will be published after the last twist message is received.

2. mecanum_drive_odometry

Listens for wheel movement and rates and publishes the transform between the odom frame and the robot frame.

Published Topics

~odom — (nav_msgs/Odometry)

The robot odometry — the current robot pose.

~tf

The transform between the odometry frame and the robot frame.

Subscribed Topics

~wheel_ticks (std_msgs/Int16MultiArray)

Cumulative encoder ticks of the [front left, front right, rear left, rear right] wheels.

Parameters

~ticks_per_meter (double)

Number of encoder ticks per meter of travel.

~wheel_separation (double)

Distance between the two wheels (m).

~wheel_separation_length (double)

Distance between the front and rear axis (meters).

~rate (double, default 10.0)

The rate at which the tf and odom topics are published (Hz).

~timeout (double, default 0.2)

The amount of time to continue publishing desired wheel rates after receiving a twist message (seconds). If set to zero, wheel velocities will be sent only when a new twist message is received.

~base_frame_id (string, default: "base_link")

The name of the base frame of the robot.

~odom_frame_id (string, default: "odom")

The name of the odometry reference frame.

~encoder_min (int, default: -32768)
~encoder_max (int, default: 32768)

The min and max value the encoder should output. Used to calculate odometry when the values wrap around.

~wheel_low_wrap (int, default: 0.3 * (encoder_max - encoder_min + 1) + encoder_min)
~wheel_high_wrap (int, default: 0.7 * (encoder_max - encoder_min + 1) + encoder_min)

If a reading is greater than wheel_high_wrap and the next reading is less than wheel_low_wrap, then the reading has wrapped around in the positive direction, and the odometry will be calculated appropriately. The same concept applies for the negative direction.

mecanum_drive's People

Contributors

dudasdavid avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.