Interfacing robot hardware with ROS
In this section, we will see how we can interface a robot's embedded controller with ROS. The embedded controller can send speed commands to the motors and obtain speed commands from robot controller nodes. The ROS robot controller nodes receive linear and angular Twist
command from the ROS navigation stack. The Twist
command will be subscribed to by the robot controller node and converted into equivalent motor velocity, that is Vl and Vr.
The robot controller nodes also receive encoder ticks from the embedded controller and calculate the distance traveled by each wheel. Let's take a look at the robot controller nodes.
The Chefbot robot controller nodes are placed in chefbot_bringup/scripts
. You can check out each node; they're all written in Python.
Gmapping and localization in Chefbot
After launching the ROS driver, we can teleop the robot using keyboard teleop. We can use the following command to start keyboard teleoperation:
$ roslaunch chefbot_bringup keyboard_teleop.launch
If we want to map the robot environment, we can start the gmapping launch file like we did in the simulation:
$ roslaunch chefbot_bringup gmapping_demo.launch
You can visualize the map building in Rviz using the following command:
$ roslaunch chefbot_bringup view_navigation.launch
You can build the map by teleoperating the robot around the room. After mapping, save the map as we did in the simulation:
$ rosrun map_server map_saver -f ~/test_map
After getting the map, launch AMCL nodes to perform final navigation. You have to restart all the launch files and start again.
Let's look at the commands to launch the AMCL nodes.
First, start the ROS driver nodes using the following command:
$ roslaunch chefbot_bringup robot_standalone.launch
Now start the AMCL nodes:
...
In this chapter, we designed and built an autonomous mobile robot from scratch. The design of the robot started with its specification. From the specification, we designed various parameters of the robot, such as motor torque and speed. After finding out each parameter, we modeled the robot chassis and simulated it using ROS and Gazebo. After simulation, we saw how to create the actual hardware. We selected the components and interconnected the sensors and actuators to the embedded board. We wrote the firmware of the embedded board. The board can communicate with the PC on which the ROS is running. The ROS driver node receives the data from the robot and interfaces with the gmapping and AMCL packages to perform autonomous navigation.
In the next chapter, we will see how to create a self-driving car and interface to Robot Operating System.