ROS Developers LIVE-Class #18: Let’s Simulate a World in Gazebo Simulator

ROS Developers LIVE-Class #18: Let’s Simulate a World in Gazebo Simulator

 

In this ROS LIVE-Class we’re going to create a world in the Gazebo simulator for the previous differential drive manipulator we created in the previous class, so the robot can navigate around and interact with the objects.

The model of the robot was created using URDF. However, the model of the environment will be created using SDF.

We will see:
▸ How to create the world for the robot using SDF
▸ How to add models of any object you may think of
▸ How to spawn ROS based robots in the world

Part 1

Part 2

Every Wednesday at 18:00 CET/CEST. 

This is a LIVE Class on how to develop with ROS. In Live Classes you practice with me at the same time that I explain, with the provided free ROS material.

IMPORTANT: Remember to be on time for the class because at the beginning of the class we will share the code with the attendants.

IMPORTANT 2: in order to start practicing quickly, we are using the ROS Development Studio for doing the practice. You will need a free account to attend the class. Go to http://rds.theconstructsim.com and create an account prior to the class.

// RELATED LINKS
▸ Gazebo simulator
▸ SDF format

ROS Developers LIVE-Class #19: Let’s Use Gazebo Plugins

ROS Developers LIVE-Class #19: Let’s Use Gazebo Plugins

 

In this ROS LIVE-Class we’re going to show how to create a Gazebo plugin for a robot simulated world. The plugin will allow us to connect/disconnect the light of the world by means of a ROS topic.
The plugin will be created using C++.

We will use the simulation we created on the previous Live Class of a wheeled robot on a home room. Do not worry, you will receive the code of the simulation at the beginning of this Live Class (only provided to those who attend live to the class. The code will be provided during the first 5 minutes of the class, so be in time).

We will see:
▸ Which types of Gazebo plugins exist
▸ How to create a world plugin that allows you to control anything in the simulated world (very useful for Reinforcement Learning)
▸ How to add ROS to the plugin so we can use it from our ROS programs.

Every Tuesday at 18:00 CET/CEST.
This is a LIVE Class on how to develop with ROS. In Live Classes you practice with the teacher in real time, at the same time that he explains the lesson with the provided free ROS material.

IMPORTANT: Remember to be on time for the class because at the beginning of the class we will share the code with the attendants.

IMPORTANT 2: in order to start practicing quickly, we are using the ROS Development Studio the practice. You will need a free account to attend the class. Go to http://rds.theconstructsim.com and create an account prior to the class. Otherwise you will not be able to practice during the class.

// RELATED LINKS

▸ The ROS Development Studio: https://www.theconstruct.ai/rds-ros-development-studio/

ROS Developers LIVE-Class #20: Simulate an Industrial Environment

ROS Developers LIVE-Class #20: Simulate an Industrial Environment

 

In this Live Class we are going to see how to apply all that we have learnt in the previous classes about Gazebo. We are going to execute ARIAC simulation made by the OSRF. We are going to learn how to manage that simulation in order to make the robots perform useful tasks in the environment. We will indicate where Gazebo plugins were applied, how SDF was used to create the environment, were ROS control was applied, where ROS navigation was applied, etc. We will see how to create a simple Python program that allows us to make the robots do useful things.

A new ROS Live Class every Tuesday at 18:00 CET/CEST.
This is a LIVE Class on how to develop with ROS. In Live Classes you practice with me at the same time that I explain, with the provided free ROS material.

IMPORTANT: Remember to be on time for the class because at the beginning of the class we will share the code with the attendants.

IMPORTANT 2: in order to start practicing quickly, we are using the ROS Development Studio for doing the practice. You will need a free account to attend the class. Go to http://rds.theconstructsim.com and create an account prior to the class.

// RELATED LINKS

* ARIAC competition: http://gazebosim.org/ariac
* ROS Development Studio: https://www.theconstruct.ai/rds-ros-development-studio/
* Robot Ignite Academy: https://wp.me/P9Rthq-1sB

[ROS Q&A] 127 – How to stop robot if /cmd_vel doesn’t receive any message

In this video we are going to see how to create a Python script that stops a robot if no message is received in the /cmd_vel topic after a certain period of time.

This is a video trying to answer the following question posted at the ROS answers forum.

// RELATED LINKS

▸ Original question: https://answers.ros.org/question/292512/stop-my-robot-if-cmd_vel-doesnt-receive-a-message-within-a-certain-time-period/
▸ Robot Ignite Academy: robotigniteacademy.com
▸ ROS Basics in 5 days (Python): /ros-basics-in-5-days/
▸ ROS Development Studio (RDS): /rds-ros-development-studio/

▸ You can get the code and the simulation of this video ready to be used in the ROS Development Studio following this link: https://goo.gl/3u9RuV

[ROS Q&A] 126 – How to configure the differential drive ROS controller

[ROS Q&A] 126 – How to configure the differential drive ROS controller

 

In this video we are going to see how to configure the differential drive ROS controller for a wheeled robot using a Gazebo simulation.

This is a video trying to answer the question of Jaime posted at the ROS answers forum about how he cannot make the controller work, and receiving the error:

Controller Spawner couldn’t find the expected controller_manager ROS interface

 

Step1. Create Project

Let’s start with creating a new project in ROS development studio.

Notice: If you haven’t had an account yet. You can register one here for free.

Step2. Spawn a robot

As an example, we’ll use a self-build two-wheel differential drive robot.

You can test the code with your own robot with differential drive configuration.

Step3. Add the controller configuration file for your robot

Put the configuration file(e.g. the my_diff_drive.yaml file shows here) under the config folder, your source tree may look like this.

Let’s start by pasting the whole code from the question into the my_diff_drive.yaml file.

mobile_base_controller:
  type        : "diff_drive_controller/DiffDriveController"
  left_wheel  : 'wheel_left_joint'
  right_wheel : 'wheel_right_joint'
  publish_rate: 50.0               # default: 50
  pose_covariance_diagonal : [0.001, 0.001, 1000000.0, 1000000.0, 1000000.0, 1000.0]
  twist_covariance_diagonal: [0.001, 0.001, 1000000.0, 1000000.0, 1000000.0, 1000.0]

  # Wheel separation and diameter. These are both optional.
  # diff_drive_controller will attempt to read either one or both from the
  # URDF if not specified as a parameter
  wheel_separation : 1.0
  wheel_radius : 0.3

  # Wheel separation and radius multipliers
  wheel_separation_multiplier: 1.0 # default: 1.0
  wheel_radius_multiplier    : 1.0 # default: 1.0

  # Velocity commands timeout [s], default 0.5
  cmd_vel_timeout: 0.25

  # Base frame_id
  base_frame_id: base_footprint #default: base_link

  # Velocity and acceleration limits
  # Whenever a min_* is unspecified, default to -max_*
  linear:
    x:
      has_velocity_limits    : true
      max_velocity           : 1.0  # m/s
      min_velocity           : -0.5 # m/s
      has_acceleration_limits: true
      max_acceleration       : 0.8  # m/s^2
      min_acceleration       : -0.4 # m/s^2
      has_jerk_limits        : true
      max_jerk               : 5.0  # m/s^3
  angular:
    z:
      has_velocity_limits    : true
      max_velocity           : 1.7  # rad/s
      has_acceleration_limits: true
      max_acceleration       : 1.5  # rad/s^2
      has_jerk_limits        : true
      max_jerk               : 2.5  # rad/s^3

Step4. Create Launch file

For our case, the launch file should look something similar like this.

<?xml version="1.0" encoding="UTF-8"?>
<launch>
    <param name="robot_description" command="cat '$(find two_wheels_description)/urdf/two_wheels.urdf'" />
    
    <arg name="x" default="-2"/>
    <arg name="y" default="0"/>
    <arg name="z" default="0.1"/>
    
    <node name="mybot_spawn" pkg="gazebo_ros" type="spawn_model" output="screen"
          args="-urdf -param robot_description -model mybot -x $(arg x) -y $(arg y) -z $(arg z)" />
          
    <rosparam file="$(find two_wheels_description)/config/my_diff_drive.yaml" command="load" />
    
    <node name="SARA_controller manager" pkg="controller_manager" type="spawner"
          respawn="false" output="screen" args="mobile_base_controller" />
          
          
</launch>

NOTICE:

Two errors are the spot when we are doing this. 

  1. The args for the controller should have the same name in the .yaml file which is “mobile_base_controller”
  2. According to the .yaml file, there is no namespace /robot here, so we don’t need to add this to the controller node.

Things to make sure:

  1. The left wheel and right wheel in the .yaml file should be the same as your robot’s URDF definition.
  2. The gazebo controller should be added to the URDF definition as well as the transmission tag which will be used for the gazebo controller. In our case, we add the following code in the .urdf to add gazebo control in it.
...

<transmission name="left_wheel_transmission">
  <type>transmission_interface/SimpleTransmission</type>
  <joint name="wheel_left_joint">
    <hardwareInterface>hardware_interface/VelocityJointInterface</hardwareInterface>  
  </joint>
  <actuator name="left_wheel_actuator">
    <mechanicalReduction>7</mechanicalReduction>
    <hardwareInterface>VelocityJointInterface</hardwareInterface>
  </actuator>
</transmission>

<transmission name="right_wheel_transmission">
  <type>transmission_interface/SimpleTransmission</type>
  <joint name="wheel_right_joint">
    <hardwareInterface>hardware_interface/VelocityJointInterface</hardwareInterface>  
  </joint>
  <actuator name="right_wheel_actuator">
    <mechanicalReduction>7</mechanicalReduction>
    <hardwareInterface>VelocityJointInterface</hardwareInterface>
  </actuator>
</transmission>

...

<gazebo>
  <plugin name="gazebo_ros_control" filename="libgazebo_ros_contol.so">
  </plugin>
</gazebo>

 

Step4. Lanch again

It’s better to compile again and run:

cd ~/simulation_ws

catkin_make

source devel/setup.bash

roslaunch two_wheel_drscription question.launch

Then you can use

rostopic list

If you see the following topics, then your controller is up and run correctly.

Takeaway today:

  1. The arg name of the controller node should be the same as in the controller configuration file.
  2. Don’t specify robot namespace if you are not using it.
  3. The joint name in the controller configuration file should be the same as the name in urdf
  4. The gazebo_ros_control plugin should also be added to the urdf file.
  5. Remember to compile again before you run.

If you want to learn more about ROS control and how to build a two-wheel robot in ROS from scratch, please visit Robot Ignite Academy for more information.

 

// RELATED LINKS

▸ Original question: https://answers.ros.org/question/289561/help-to-run-diff_drive_controller/
▸ Robot Ignite Academy: https://goo.gl/pF81sN
▸ ROS Basics in 5 days (Python): https://goo.gl/HGPP1M
▸ ROS Basics in 5 days (C++): https://goo.gl/evXQCA
▸ ROS Development Studio: https://goo.gl/FzHTQU

[ROS Q&A] 125 – Save and load RViz configuration

[ROS Q&A] 125 – Save and load RViz configuration

 

In this video we are going to show how you can easily save and load RViz configurations, using the Robot Ignite Academy.

Step 1. Go to the Robot Ignite Academy

Here is the link: https://goo.gl/631YF4

You can preview every course for free.

Let’s start with the Ch.4 -Path planning 1

Step 2. Visualize path planning in RViz

3 elements are essential for the visualization of the path planning.

  • Map Display (Costmaps)
  • Path Displays (Plans)
  • 2D Tools

Let’s start with launching the move_base by typing the following command in the shell

$ roslaunch husky_navigation move_base_demo.launch

Then start RViz in another shell with

$ rosrun rviz rviz

To visualize the robot model and laser scan, click add at the left bottom corner and select robot model and laser scan. Select topic /scan in the laser scan and make sure you choose a proper size.

Then we add two map visualization by clicking add and set one to visualize the global cost map and another to visualize the local cost map.

To visualize the path plan, we add two Path visualization. Notice: choose correct topics

Now if you close the Rviz, every setting you’ve done will disappear!

Step 3. Save Rviz settings

let’s create a package named husky_nav_rviz by type the following command under ~/catkin_ws/src directory

$ catkin_create_pkg husky_nav_rviz

and create a rviz folder under it.

Then we back to rviz and select File -> save config as to save the path_planning.rviz config file under the folder we just created.

You can close RViz once you are sure the path_planning.rviz is in the folder.

Step 4. Load Rviz settings

By select the path_planning.rviz file from File -> Open Config you can get all your settings back, or you can use the following command

$ rosrun rviz rviz -d `rospack find husky_nav_rviz`/rviz/path_planning.rviz

 

Takeaway Today:

Always save your RViz configuration with .rviz file, so you can restore every setting you’ve done when you launch RViz next time.

 

// RELATED LINKS

▸ Robot Ignite Academy: https://goo.gl/631YF4
▸ ROS Navigation in 5 days online course: https://goo.gl/fkQTR7

Pin It on Pinterest