This repository showcases the practical implementation of robotics concepts, encompassing hardware and software components. It comprises six distinct experiments that delve into various aspects of robotics. The experiments covered are as follows:
- Introduction to ROS.
- Control of Turtlebot3.
- Control of Open Manipulator X.
- End Effector and Trajectory Control of Open Manipulator X.
- Jacobian-based Control of the End Effector of Open Manipulator X.
To initiate TurtleSim simulation with linear and angular velocities as inputs, follow these steps:
-
Open two separate Linux terminals.
-
Run the following commands in the respective terminals:
$ roscore $ rosrun turtlesim turtlesim_node
-
In the second terminal, execute:
$ rostopic pub /turtle1/cmd_vel geometry_msgs/Twist -r 1 -- '[2.0, 0.0, 0.0]' '[0.0, 0.0, 1.5]'
This command publishes velocity commands at a rate of 1 Hz, with a linear velocity of 2 m/sec in the x-direction and an angular velocity of 1.5 rad/sec.
To move TurtleSim to a desired position, a custom code is provided. See the solutions for both Python and C++ implementations:
TurtleSim.__.Go.to.goal.behaviour._.Proportional.Control.mp4
Implement a custom service and client node where the client requests basic calculations from the server:
Learn how to create a ROS package manually, without using the "catkin_create_pkg" command:
This section highlights a combination of software and hardware experiments executed using the TurtleBot3 Waffle Pi model.
This task employs proportional control to guide the TurtleBot to a designated destination. The error function computes the Euclidean distance between the current and target positions, serving as the foundation for generating linear velocity commands. Simultaneously, heading error calculates angular velocity commands.
TurtleBot3.__.GoToGoal.__.Hardware.Simulation.on.Waffle.Pi.mp4
This task introduces SLAM (Simultaneous Localization and Mapping), a technique that constructs maps by estimating current locations in a given space. TurtleBot3's proficiency in SLAM is showcased as it accurately maps a compact and cost-effective platform.
Navigation involves moving the robot from one point to another in a designated environment. Achieving this requires a map containing spatial information about furniture, objects, and walls. The map is generated through SLAM, utilizing sensor distance data and robot pose information.
- OpenMANIPULATOR-X is based on ROS and OpenSource. ROS official hardware platform, TurtleBot series has been supporting “TurtleBot Arm”. The OpenMANIPULATOR-X has full hardware compatibility with TurtleBot3. Users can also control it more easily by adopting the MoveIt! package. Even if you do not have an actual robot, you can control the robot in the Gazebo simulator.
Objective - 1: Connecting the Robot with a computer using U2D2 and Learning basic operations on the Robot using existing packages
- In the Linux(Ubuntu platform) environment, USB latency time is set to 16ms by default. Follow the steps below to set the communication latency time to the lowest value (1ms) between DYNAMIXELs and PCs connected via USB.
-
Open a terminal window.
-
Run the ROS core with the following command:
$ roscore
This command initializes the ROS master, which is essential for ROS communication.
-
Open a new terminal window.
-
To change the USB latency to 1 ms, use the following commands:
$ rosrun open_manipulator_controller create_udev_rules $ cat /sys/bus/usb-serial/devices/ttyUSB0/latency_timer
The first command configures the USB rules for your device, and the second command displays the current USB latency timer value for
ttyUSB0
. -
Move the manipulator using keyboard teleoperation
$ roslaunch open_manipulator_teleop open_manipulator_teleop_keyboard.launch
Open.Manipulator.X.__.Teleoperation.mp4
The robot was controlles by a GUI program to draw 3 different shapes .
Control.of.Open.Manipulator.using.GUI.__.Drawing.Circle.Rhombus.and.Heart.mp4
Objective - 3: Connecting the Robot with a computer using U2D2 and Learning basic operations on the Robot using existing packages
- In this example, if the user is holding the master OpenMANIPULATOR, the slave OpenMANIPULATOR-X moves like master robot. Recording mode allows you to save the trajectory as you move the master OpenMANIPULATOR-X and play it back to the slave OpenMANIPULATOR