Updated 15 Oct 2019
This toolbox provides utilities for robot simulation and algorithm development. This includes:
- 2D kinematic models for robot geometries such as differential drive, three, and four-wheeled vehicles, including forward and inverse kinematics
- Configurable lidar, object, and robot detector simulators
- Visualization of robotic vehicles and sensors in occupancy maps
- MATLAB and Simulink examples and documentation
MathWorks Student Competitions Team (2020). Mobile Robotics Simulation Toolbox (https://www.github.com/mathworks-robotics/mobile-robotics-simulation-toolbox), GitHub. Retrieved .
Hello, friend, good morning!
I am trying to run omniwhels scripts with the same code and including arduino in version 2018b, to execute with the link procedures:
start code: a = arduino ('COM4', 'Mega2560', 'Libraries', 'RotaryEncoder')
using the rotary encoder library for odometry. Do you have examples for arduino or any other microcontroller to constrain the path with these codes?
Grateful and I look forward to it!
%% EXAMPLE: Triple Omniwheel discrete simulation
% Copyright 2018 The MathWorks, Inc.
a = arduino('COM4','Mega2560','Libraries','RotaryEncoder');
channelA1 = 'D2';
channelB1 = 'D3';
channelA2 = 'D18';
channelB2 = 'D19';
encoder1 = rotaryEncoder(a,channelA1,channelB1,102);
encoder2 = rotaryEncoder(a,channelA2,channelB2,102);
motor1SpeedPin = 'D6';
motor1DirectionPin = 'D7';
motor2SpeedPin = 'D9';
motor2DirectionPin = 'D8';
direction = 0;
initialPWMVoltage = 3;
rpm = readSpeed(encoder1);
%rpm2 = readSpeed(encoder2);
fprintf('A velocidade do motor é: %.2f\n',rpm);
%fprintf('A velocidade do motor é: %.2f\n',rpm2);
%% Define vehicle
wheelRadius = 2.5e-3; % Wheel radius [m]
robotRadius = 8.5e-3; % Robot radius [m]
wheelAngles = [0, 2*pi/3, -2*pi/3]; % Wheel angles [rad]
vehicle = TripleOmniwheel(wheelRadius,robotRadius,wheelAngles);
%% Simulation parameters
sampleTime = 0.01; % Sample time [s]
initPose = [0; 0; pi/4]; % Initial pose (x y theta)
bodyMode = true; % True for body frame speeds, false for world frame speeds
targetSpeed = 500;
% Initialize time, input, and pose arrays
executionTime = 0:sampleTime:10; % Time array
vxRef = 0.2*ones(size(executionTime)); % Reference x speed
vyRef = 0.1*ones(size(executionTime)); % Reference y speed
wRef = zeros(size(executionTime)); % Reference angular speed
wRef(executionTime < 5) = -0.5;
wRef(executionTime >=5) = 0.5;
vel = [vxRef;vyRef;wRef];
pose = zeros(3,numel(executionTime)); % Pose matrix
pose(:,1) = initPose;
%% Simulation loop
for idx = 2:numel(executionTime)
% Solve inverse kinematics to find wheel speeds
rpm = inverseKinematics(vehicle,vel(:,idx-1));
refWorld = worldToBody(vel(:,idx-1),pose(:,idx-1));
rpm = inverseKinematics(vehicle,refWorld);
% Compute the velocities
velB = forwardKinematics(vehicle,rpm);
vel = bodyToWorld(velB,pose(:,idx-1));
% Perform forward discrete integration step
pose(:,idx) = pose(:,idx-1) + vel*sampleTime;
%% Display results
@Bernd -- there is a Simulink preference that should let you load models from newer versions, which I believe should work for these models because nothing major was done besides saving them in R2019b format: https://www.mathworks.com/help/simulink/gui/simulink-preferences-model-file-pane.html#brti7y2-1
The MATLAB Release Compatibility tells that the toolbox works with R2018a to any release. Today's Installation in R2018b via the Add-On Explorer shows that only R2019b is supported (simulink models do not work). Also the github repository only contains release 2.1 and 2.2 and no release 2.0 which worked with R2018b on another machine for a student project. This makes things a bit complicated and unpredictable.
@Rakeshwar: These maps need to be occupancy map objects according to Robotics System Toolbox. Also, the tool right now only plots circular robots but you can always customize the source code to plot a square if you'd like. If you'd like more details or clarifications, email us at email@example.com.
In this toolbox example "mrsCarRRT.m" 1) How the "complexMap.mat" is created because when I created a Map it was not accepting, when I tried to load in that program!
2)During the simulation the robot is shown circular but can you please guide how to make the robot look rectangular like a car instead of circular.
@Manish: Yes, it should be possible. There are several examples for single-robot waypoint following, and it's just a matter of using this same functionality with the multi-robot environment.
Hi, i am trying to perform multi-robot environment (say 3 robots) with each robot following the waypoint. is it possible with current toolbox utilities? if yes, could you please give the example.
@Zhuofan: The wheel angles are the angles the wheels are pointing towards, relative to the body frame of the robot. This angle affects the direction of motion when you spin wheels -- for example, the triple omniwheel model has the wheels at 0, +120, and -120 degrees. If you look at the help file, there should be a diagram explaining it.
@Kristi: I think your question is about the UAV Library which is a separate File Exchange submission. My understanding, though, is that quadrotors don't need a separate waypoint follower since you have full control over the direction of motion, and can instantly change direction unlike a fixed-wing aircraft which has a limited turning radius.
I have a Question about the generic omniwheels example.
What does the "Wheel angle" exactly mean?
I mean, what is the coordinate of the wheels' angle?
How do I adapt the fixed wing waypoint path following model to a quadrotor? I can change the type of the waypoint follower block, the UAV guidance model block, and the UAV animation block, but the heading control from the fixed wing remains and the guidnace model requires roll, pitch, yaw and thrust and I only see roll, and yaw to feed in.
@Juan Pablo: You can use the VideoWriter functionality in MATLAB. https://www.mathworks.com/help/matlab/ref/videowriter.html
How I can create a video mp4 or avi from the simulations?
@Thanh: Because a differential drive robot can only move in the body X direction!
In the block "Differential Drive Simulation". body's speed inlcude Vx and Vy. why did you force Vy = 0?
@Dabarshi -- no, it does not. You will need at least R2016b, due to the MATLAB features required by the toolbox.
I wanted to know if this toolbox works with Matlab R2015a, because in my case i can't access the simulink library for this toolbox.
Hi, regarding my last question. I solved the problem now! I installed the toolbox into 2 different foldes, so matlab was not able to find the new library!
Hello Mr Sebastian and everybody,
I need a simulation environment to apply noisy sensor models and noisy motion model for a differential drive. As far as I understand, this toolbox is sufficient for that purpose, with maybe little modifications to add noise. I still want to ask you though, do you think I can use this toolbox for that study?
Thanks in advance!
@Truong -- as of yesterday, there's a new MultiRobotEnv that does support multi-robots (as well as equivalent Simulink functionality). Give it a look :)
Thank you for this great toolbox Sebastian. If the Visualizer2D works for multi-robots, I bet this toolbox will be extremely useful for academic as well as application purposes.
Thanks for the input, Martin!
Make sure you add this entry to your Watch List so you know when we make updates.
Also, if there's anything else you want to reach me about, you can email us at firstname.lastname@example.org
maybe you can remember we already meet at robocup german open last year. I am no working on a new university, and changed the field of research from Rescue Robots to Industrial Applications. But still in the field of mobile robotics.
Multiple robots would be nice. I know it is posible in a more complex simulation, but for fast and easy visualisation it would be great in the robot visualisation tool. Just plot more robots, additional it would be great to inklude the outer dimentions of the robot in the plot (as a box, or circle) and additional y-axes.
Thank you for your fast response.
Right now it's just single-robot, but I have a future plan to make it work with multiple robot. Glad that people are asking about it!
My idea was to have a "floating" block that represents the world itself, and then each robot you put in will plot itself on that map.
Hi, i work in the research field of mobile robotics and control systems. I would like to work with this toolbox more. I started to implement my own kinematics and i want to compare different solutions.
I had a problem with the robot visualisation tool.
Is it posible to use more robots in one plot or to use more plots simultanious? If i try that i always get an error.
are u have simple analysis for kinematic modeling for mobile robot using script. for example when robot to moving left, moving right, moving forward, and rotational moving in centre.
Added navigation and obstacle avoidance with reinforcement learning example. Added simple examples of RRT path planner. Updated all toolbox reference and syntax to R2019b
Added robot soccer and path following with obstacle avoidance examples. Visualization now has customizable robot colors and object markers. Bug fixes.
Added multi-robot support.
Other new features: Nonzero robot radius for visualization and multi-robot detection with lidar sensors, "Generic Omniwheel" kinematic model for simulating vehicles with arbitrary wheel configurations, new examples.
Inspired: Robotics Playground