About the Authors |
|
xi | |
About the Technical Reviewer |
|
xiii | |
|
Chapter 1 Getting Started with Ubuntu Linux for Robotics |
|
|
1 | (52) |
|
Getting Started with GNU/Linux |
|
|
1 | (1) |
|
|
2 | (1) |
|
|
3 | (1) |
|
|
3 | (1) |
|
|
4 | (1) |
|
|
4 | (1) |
|
|
5 | (1) |
|
Creating a VirtualBox Machine |
|
|
6 | (11) |
|
Step 1 Adding a New Virtual Machine |
|
|
6 | (1) |
|
Step 2 Naming the Guest Operating System |
|
|
7 | (1) |
|
Step 3 Allocating RAM for the Guest OS |
|
|
7 | (1) |
|
Step 4 Creating a Virtual Hard Disk |
|
|
8 | (2) |
|
Step 5 Configuring the Type of Virtual Disk |
|
|
10 | (2) |
|
Step 6 Choosing Ubuntu DVD Image |
|
|
12 | (4) |
|
Step 7 Starting Virtual Machine |
|
|
16 | (1) |
|
Installing Ubuntu on VirtualBox |
|
|
17 | (11) |
|
Installing Ubuntu on a PC |
|
|
28 | (2) |
|
Playing with the Ubuntu Graphical User Interface |
|
|
30 | (1) |
|
|
31 | (2) |
|
Useful Ubuntu Applications |
|
|
33 | (1) |
|
Getting Started with Shell Commands |
|
|
34 | (2) |
|
Terminal Commands Cheat Sheet |
|
|
36 | (16) |
|
Man: Manual Pages for Shell Commands |
|
|
36 | (1) |
|
Is: List Directory Content |
|
|
36 | (1) |
|
|
37 | (1) |
|
Pwd: Current Terminal Path |
|
|
37 | (1) |
|
|
38 | (1) |
|
|
38 | (1) |
|
|
39 | (1) |
|
Mv: Move a File from One Place to Another |
|
|
40 | (1) |
|
Cp: Copy a File from One Path to Another |
|
|
41 | (1) |
|
Dmesg: Display a Kernel Message |
|
|
41 | (1) |
|
Ispci: List of PCI Devices in the System |
|
|
42 | (1) |
|
Isusb: List of USB Devices in the System |
|
|
43 | (1) |
|
Sudo: Run a Command in Administrative Mode |
|
|
43 | (1) |
|
Ps: List the Running Process |
|
|
44 | (1) |
|
|
45 | (1) |
|
Apt-get: Install a Package in Ubuntu |
|
|
45 | (3) |
|
Dpkg-i: Install a Package in Ubuntu |
|
|
48 | (1) |
|
Reboot: Reboot the System |
|
|
49 | (1) |
|
Poweroff: Switch Off the System |
|
|
49 | (1) |
|
Htop: Terminal Process View |
|
|
50 | (1) |
|
Nano: Text Editor in Terminal |
|
|
51 | (1) |
|
|
52 | (1) |
|
Chapter 2 Fundamentals of C++ for Robotics Programming |
|
|
53 | (40) |
|
|
54 | (1) |
|
Timeline: The C++ Language |
|
|
54 | (1) |
|
|
54 | (1) |
|
Introduction to GCC and G++ Compilers |
|
|
55 | (2) |
|
Installing C/C++ Compiler |
|
|
55 | (1) |
|
|
56 | (1) |
|
Introduction to GNU Project Debugger (GDB) |
|
|
57 | (2) |
|
Installing GDB in Ubuntu Linux |
|
|
57 | (1) |
|
|
58 | (1) |
|
|
59 | (7) |
|
|
61 | (1) |
|
|
61 | (2) |
|
|
63 | (3) |
|
Learning OOP Concepts from Examples |
|
|
66 | (18) |
|
The Differences Between Classes and Structs |
|
|
67 | (3) |
|
|
70 | (2) |
|
|
72 | (1) |
|
|
73 | (5) |
|
|
78 | (2) |
|
|
80 | (2) |
|
|
82 | (2) |
|
C++ Standard Template Libraries |
|
|
84 | (1) |
|
|
84 | (1) |
|
Creating a Linux Makefile |
|
|
85 | (5) |
|
|
88 | (2) |
|
|
90 | (3) |
|
Chapter 3 Fundamentals of Python for Robotics Programming |
|
|
93 | (32) |
|
Getting Started with Python |
|
|
94 | (1) |
|
Timeline: The Python Language |
|
|
94 | (1) |
|
|
95 | (2) |
|
Introduction to Python Interpreter |
|
|
95 | (1) |
|
Setting Python 3 on Ubuntu 20.04 LTS |
|
|
95 | (1) |
|
Verifying Python Installation |
|
|
96 | (1) |
|
|
97 | (2) |
|
|
99 | (1) |
|
Understanding Python Basics |
|
|
100 | (1) |
|
|
101 | (19) |
|
Static and Dynamic Typing |
|
|
101 | (1) |
|
|
102 | (1) |
|
|
102 | (1) |
|
|
102 | (2) |
|
Python Input and Conditional Statement |
|
|
104 | (2) |
|
|
106 | (2) |
|
|
108 | (2) |
|
Python: Handling Exception |
|
|
110 | (1) |
|
|
111 | (3) |
|
|
114 | (1) |
|
|
115 | (2) |
|
Python: Handling Serial Ports |
|
|
117 | (1) |
|
Installing PySerial in Ubuntu 20.04 |
|
|
118 | (2) |
|
Python: Scientific Computing and Visualization |
|
|
120 | (3) |
|
Python: Machine Learning and Deep Learning |
|
|
121 | (1) |
|
|
122 | (1) |
|
|
122 | (1) |
|
|
122 | (1) |
|
|
123 | (2) |
|
Chapter 4 Kick-Starting Robot Programming Using ROS |
|
|
125 | (48) |
|
What Is Robot Programming? |
|
|
125 | (2) |
|
Why Robot Programming Is Different |
|
|
127 | (3) |
|
|
130 | (7) |
|
|
133 | (1) |
|
Robot Programming Before and After ROS |
|
|
133 | (1) |
|
|
134 | (3) |
|
|
137 | (1) |
|
|
137 | (1) |
|
|
138 | (8) |
|
Robots and Sensors Supporting ROS |
|
|
146 | (3) |
|
Popular ROS Computing Platforms |
|
|
149 | (1) |
|
ROS Architecture and Concepts |
|
|
150 | (3) |
|
|
153 | (2) |
|
|
155 | (1) |
|
|
156 | (1) |
|
|
156 | (5) |
|
ROS Demo: Hello World Example |
|
|
161 | (7) |
|
|
163 | (3) |
|
|
166 | (2) |
|
Moving the Turtle in a Square |
|
|
168 | (1) |
|
ROS GUI Tools: Rviz and Rqt |
|
|
169 | (2) |
|
|
171 | (2) |
|
Chapter 5 Programming with ROS |
|
|
173 | (68) |
|
|
173 | (1) |
|
Creating a ROS Workspace and Package |
|
|
174 | (4) |
|
|
178 | (2) |
|
|
179 | (1) |
|
|
179 | (1) |
|
|
179 | (1) |
|
|
179 | (1) |
|
|
180 | (1) |
|
|
180 | (2) |
|
Using ROS Client Libraries |
|
|
182 | (1) |
|
|
183 | (1) |
|
Header Files and ROS Modules |
|
|
183 | (2) |
|
|
185 | (1) |
|
Printing Messages in a ROS Node |
|
|
186 | (1) |
|
|
186 | (1) |
|
Creating a ROS Message Definition |
|
|
187 | (1) |
|
Publishing a Topic in ROS Node |
|
|
187 | (1) |
|
Subscribing a Topic in ROS Node |
|
|
188 | (1) |
|
Writing the Callback Function in ROS Node |
|
|
189 | (1) |
|
The ROS Spin Function in ROS Node |
|
|
190 | (1) |
|
The ROS Sleep Function in ROS Node |
|
|
190 | (1) |
|
Setting and Getting a ROS Parameter |
|
|
191 | (1) |
|
The Hello World Example Using ROS |
|
|
192 | (13) |
|
Creating a hello_world Package |
|
|
192 | (2) |
|
|
194 | (2) |
|
Editing the CMakeLists.txt File |
|
|
196 | (1) |
|
|
197 | (1) |
|
|
198 | (3) |
|
|
201 | (1) |
|
|
202 | (1) |
|
|
203 | (2) |
|
Visualizing a Computing Graph |
|
|
205 | (1) |
|
Programming turtlesim Using rospy |
|
|
206 | (6) |
|
|
207 | (5) |
|
Printing the Robot's Position |
|
|
212 | (5) |
|
Moving the Robot with Position Feedback |
|
|
217 | (2) |
|
Reset and Change the Background Color |
|
|
219 | (5) |
|
Programming TurtleBot Simulation Using rospy |
|
|
224 | (1) |
|
Installing TurtleBot 3 Packages |
|
|
224 | (1) |
|
Launching the TurtleBot Simulation |
|
|
225 | (2) |
|
|
226 | (1) |
|
Moving a Fixed Distance Using a Python Node |
|
|
227 | (2) |
|
|
229 | (1) |
|
Programming Embedded Boards Using ROS |
|
|
230 | (1) |
|
Interfacing Arduino with ROS |
|
|
230 | (7) |
|
Installing ROS on a Raspberry Pi |
|
|
237 | (2) |
|
Burning an Ubuntu Mate Image to a Micro SD Card |
|
|
239 | (1) |
|
|
239 | (1) |
|
Installing ROS on a Raspberry Pi |
|
|
240 | (1) |
|
|
240 | (1) |
|
Chapter 6 Robotics Project Using ROS |
|
|
241 | (34) |
|
Getting Started with Wheeled Robots |
|
|
241 | (1) |
|
Differential Drive Robot Kinematics |
|
|
242 | (4) |
|
|
246 | (1) |
|
|
247 | (8) |
|
|
247 | (1) |
|
Additional Motors and Wheels |
|
|
248 | (1) |
|
|
248 | (1) |
|
|
249 | (2) |
|
|
251 | (1) |
|
|
251 | (1) |
|
|
252 | (1) |
|
Block Diagram of the Robot |
|
|
253 | (2) |
|
Assembling Robot Hardware |
|
|
255 | (1) |
|
Creating a 3D ROS Model Using URDF |
|
|
255 | (6) |
|
Working with Robot Firmware |
|
|
261 | (3) |
|
Programming Robot Using ROS |
|
|
264 | (4) |
|
|
268 | (1) |
|
The Twist Message to Motor Velocity Node |
|
|
269 | (1) |
|
|
269 | (1) |
|
|
270 | (1) |
|
|
271 | (3) |
|
|
274 | (1) |
Index |
|
275 | |