Esmacat
Published © GPL3+

Teleoperate robot using EASE with ROS

Use ROS (running on Esmacat Master S) to teleoperate robot in Gazebo simulation environment using analog input from LCD Shield with EASE.

IntermediateFull instructions provided3 hours1,718

Things used in this project

Hardware components

Esmacat Master S
To run ROS and Gazebo Simulation environment
×1
EtherCAT Arduino Shield by Esmacat (EASE)
EtherCAT Slave
×1
Arduino UNO
Arduino UNO
×1
Ethernet Cable, Cat6a
Ethernet Cable, Cat6a
×2
Power over Ethernet (POE) Injector
×1
DC Adapter
DC Adapter to power the EASE and Arduino boards
×1
16x2 LCD Shield
×1

Software apps and online services

Arduino IDE
Arduino IDE
To flash the arduino code into the Arduino Uno board.
Robot Operating System
ROS Robot Operating System
ROS kinetic or above to interface with the EASE board.
Gazebo Simulation Software

Story

Read more

Schematics

Hardware Setup Schematic

Schematic of the connection used in the tutorial

Code

arduino_with_ease_and_lcd_shield

Arduino
Arduino Code to get input from the user from LCD Shield to control the differential drive robot in Gazebo
 /*
  Liquid Crystal & Esmacat Arduino Library - Controling Robot in Gazebo
  
  This sketch does the following:
  1) Prints the User input (button pressed) onto the 
     LCD Screen
  2) Sends and receives the encoded value based on the 
     button pressed to the EASE (EtherCAT Arduino Shield by Esmacat) Registers.

  created 19 Aug 2020
  by Harmonic Bionics Inc. (https://www.harmonicbionics.com/).
  
*/

/*
    PIN CONFIGURATION of Keyestudio LCD Shield
    |-----------------------------------------|
    |  LCD PIN Number  |   Arduino PIN Number |
    |-----------------------------------------|
    |       RS         |      Digital Pin 8   |
    |     ENABLE       |      Digital Pin 9   |
    |       D4         |      Digital Pin 4   |
    |       D5         |      Digital Pin 5   |
    |       D6         |      Digital Pin 6   |
    |       D7         |      Digital Pin 7   |
    |     Buttons      |      Analog Pin A0   |
    |-----------------------------------------|
    
 */

/*
  Analog Input Values for the Push Buttons
  |------------------------------------------------|
  |    Push Button     |          A0 value         |
  |------------------------------------------------|
  |       SELECT       |   val >= 500 & val <= 750 |
  |        LEFT        |   val >= 300 & val < 500  |
  |         UP         |   val >= 50  & val < 150  |
  |        DOWN        |   val >= 150 & val < 300  |
  |        RIGHT       |   val >= 0   & val < 50   |
  |------------------------------------------------|
*/

# include <LiquidCrystal.h>      // Include LCD Arduino Library
# include <Esmacatshield.h>      //Include the Esmacat Arduino Library

// Define the Pin numbers as Macros
# define RS_pin 8
# define Enable_pin 9

# define LCD_coloumns 16
# define LCD_rows 2

# define ARDUINO_UNO_SLAVE_SELECT 10      // The chip selector pin for Arduino Uno is 10 

LiquidCrystal lcd_display(RS_pin, Enable_pin, 4, 5, 6, 7);      // Create an object for the Library class
Esmacatshield ease_1(ARDUINO_UNO_SLAVE_SELECT);      // Create a slave object and specify the Chip Selector Pin
                                

int ease_registers[8];      // EASE 8 registers

int analog_value;      // Initialise analog input value variable
int button_pressed;      // Encoded value for the buttons

/*
    -------------------------------------------
    |    Button on LCD     |    Encoded Value  |
    -------------------------------------------
    |         Left         |          1        |
    |          Up          |          2        |
    |         Down         |          3        |
    |         Right        |          4        |
    |        Select        |          5        |
    --------------------------------------------
 */

void setup() {
  
  lcd_display.begin(LCD_coloumns,LCD_rows);      //Initialise the number of (coloumns, rows) in the LCD
  
  lcd_display.print("Gazebo Control..");      // Print a message onto the LCD Display

  ease_1.start_spi();      // Start SPI for EASE
  
  Serial.begin(9600);      // Initialise the Serial Communication with the specified Baud Rate
}

void loop() {

  // Code to print the button pressed on the LCD to the Serial Monitor
  analog_value = analogRead(A0);
  
  ease_1.write_reg_value(0,analog_value);      //Write register data (register,value, led_on)
  
  ease_1.get_ecat_registers(ease_registers);
  button_pressed = ease_registers[1];      // Receive the encode the value for register 
  
  if (button_pressed == 1)
  {
    lcd_display.setCursor(0,1);      // set the LCD cursor position (Coloumn number,Row number)
    lcd_display.print("L"); 
  }
  
  if (button_pressed == 2)
  {
    lcd_display.setCursor(0,1);
    lcd_display.print("U"); 
  }

  if (button_pressed == 3)
  {
    lcd_display.setCursor(0,1);
    lcd_display.print("D"); 
  }
  
  if (button_pressed == 4)
  {
    lcd_display.setCursor(0,1);      
    lcd_display.print("R");
  }

  if (button_pressed == 5)
  {
    lcd_display.setCursor(0,1);
    lcd_display.print("S"); 
  }
}

EtherCAT Arduino Shield by Esmacat (EASE) Arduino Library

Esmacat Arduino Library

Credits

Esmacat
11 projects • 17 followers
Esmacat is an easy yet powerful EtherCAT solution for robotics. Our EtherCAT tech allow users to run EtherCAT applications in minutes!
Contact

Comments

Please log in or sign up to comment.