top of page
ros.webp

ROBOT OPERATING SYSTEM (ROS)

The Brain Behind The Operations is The Jetson Nano

Why ROS?

  • Easy connection of component over various types of protocols (IE i2C, wifi, etc)  s

  • Packages are easily available and can be available for all types of robotic projects

  • Multiple points for communications in the terms of nodes which can connect wheels, arms, LEDs and other variety of products.

  • ROS knowledge is becoming an increasing skill set as industries are starting to adopt it

Limitations of ROS

  • Steep learning curve to get nodes and different lines of code working properly

  • Resources are available, but figuring out which corresponds to specific needs is a challenge

  • Packages are created for specific robot designs, so any deviation from the intended package's design will require a high level of knowledge of ROS to reconfigure or create new package dependencies 

Roscore

Roscore is the main package needed to run ROS. It's main role is to manage the traffic of data passing through the network and ensure the data travels from the appropriate master node to the correct slave node. 

​

http://wiki.ros.org/roscore

Rosserial

Rosserial is used to create a communication link over serial connections.

​

http://wiki.ros.org/rosserial_python

http://wiki.ros.org/rosserial

Teleop Twist Keyboard

Teleoptwist is the package that acts as the master node for user inputs. The package reads inputs from the keyboard and published the data to the networks with the tag geometry_msgs.

​

http://wiki.ros.org/teleop_twist_keyboard

Differential Drive

Differential Dirve is the package that reads messages with the geometry_msg tags and converts the movement instructions into actual movements. The package is intended for robots that have a skid steer design verse an ackerman steering type designs like a passenger vehicle. This package also contains the vehicle specifications for the robot like wheel diameter and vehicle size.

​

http://wiki.ros.org/differential_drive

roscore.png
Image by mostafa mahmoudi
tele.png

ATmega32u4 Keyboard Macro

The Atmega32U4 has the unique ability of handling USB peripheral communication compared to most microchips in the Atmega family.

This functionally gave us the opportunity to program the movements of the Robot by specifying the direction and distance of movement via the emulation of the 9 keyboard keys.

Since the intend of the robot was to run  the entirety of the track and come back to the start location.  The  preprogrammed movements were calculated by measuring the distances needed to travel and converted that information to an array of meters per second, time, and direction measurements. 

​

Why the Keyboard Macro?

After weeks of trial and error with goal location, we needed a plausible fix for our non-autonomous robot. 

​

The software team then decided the best course of action was to preprogram the robot's movements.

​

This was the most realistic course action due to the fact the track layout was already predefined and we could get the robot to run a set of movement controls. 

​

​

Automation Steps

Point cloud Generation

​
  • A point cloud is created with the Realsense lidar and stereo camera.

  • The combined data is overlapped to create a 3D model of the surrounding environment. 


Virtual Map
​
  • The virtual map is a 2D compression of the 3D point cloud. which results in a black and gray image

  • Black outlines are obstructions and white is a possible pathway.

  • The Virtual map also create a coordinate reference that can be used later to navigate

 


Goal location

​

  • Using a virtual map as a coordinate reference, Goal locations assign a point in the map for the robot to navigate towards


 

Combination of Processes (Autonomy)

​

​
  • In theory once all the components are finished and the goal location is set, the Robot will travel to the desired location avoiding any obstacle in its path.

  • The Robot is directed through its travel by ROS' built-in programs that send publish geometry_msgs on the network for the differential_drive package to receive.

​

  • In practice this process was more complicated than it seemed. The issue comes when establishing the paths for the navigation data, Robot's location, and desired Goal location. Multiple scripts(.xml, .bash, .yaml) and programs(C++, python) need to be created and altered to accomplish this task.

  • This process is not for the novice  and requires a good understanding of the ROS networks architecture.

  • Although one could accomplished this autonomy without all the difficulties via per-designed robots where others have done of work of establishing the correct data paths.

 

 

https://github.com/IntelRealSense/realsense-ros/wiki/SLAM-with-D435i

​

​

Point Cloud

Virtual Map

map.png
bwmap.png

ROS Gmapping Tool (RVIZ)

settings1.png

Animation of Process

bottom of page