└── README.md /README.md: -------------------------------------------------------------------------------- 1 | --- 2 | marp: true 3 | author: Khaled Gabr 4 | theme: custom-theme 5 | footer: ![width:200px](roboicscornerlogo.jpeg) 6 | 7 | --- 8 | 9 | 10 | # Learn Linux and Command Line :rotating_light: 11 | 12 | - Install Linux 13 | - Understand Linux file system 14 | - Basic Commands Lines 15 | 16 | --- 17 | 18 | # Learn Shell Tools and Scripting :rotating_light: 19 | 20 | - What is the shell? 21 | - Using the shell 22 | - Navigating in the shell 23 | - Shell Scripting 24 | - Shell Tools 25 | - Finding how to use commands 26 | - Finding files 27 | - Finding code 28 | - Finding shell commands 29 | 30 | --- 31 | 32 | # Editors (Vim) :rotating_light: 33 | 34 | - Which editor to learn? 35 | - Vim 36 | - Philosophy of Vim 37 | - Modal editing 38 | - Basics Vim 39 | - Inserting text 40 | - Buffers, tabs, and windows 41 | - Command-line 42 | 43 | 44 | --- 45 | 46 | # Version Control (Git) :rotating_light: 47 | 48 | - Git’s data model 49 | - Snapshots 50 | - Modeling history 51 | - Data model, as pseudocode 52 | - Repositories 53 | - Git command-line interface 54 | - Basics 55 | - Branching and merging 56 | - Remotes 57 | - Undo 58 | 59 | --- 60 | 61 | # Learn C++ :rotating_light: 62 | 63 | Learn how to develop, compile, and execute C++ programs. 64 | 65 | - C++ Foundations 66 | 67 | - Data Types 68 | - Variables 69 | - Operators 70 | - Control Structures 71 | - IF conditions 72 | - Loops 73 | - For 74 | - while 75 | - Functions 76 | - Arrays 77 | 78 | --- 79 | 80 | # Learn C++ :rotating_light: 81 | 82 | Learn to control static and dynamic memory in C++. 83 | 84 | - Memory Management 85 | 86 | - Pointers 87 | - Reference 88 | - Heap 89 | 90 | --- 91 | 92 | # Learn C++ :rotating_light: 93 | 94 | Learn to build classes, interfaces, and generic templates to create an object-oriented C++ program. 95 | 96 | - Object-Oriented Programming (OOP) 97 | - Encapsulation 98 | - Inheritance 99 | - Polymorphism 100 | 101 | - Templates 102 | 103 | --- 104 | 105 | # Introduction to Robotics :rotating_light: 106 | 107 | Learning the essential elements of robotics is a great starting point for anyone interested in pursuing a career in robotics. 108 | 109 | - Definition and brief history of robotics 110 | - Types of robots and their applications 111 | - Anatomy of a robot: actuators, sensors, controllers, and effectors 112 | - Introduction to programming languages used in robotics 113 | 114 | --- 115 | 116 | # Introduction to ROS :rotating_light: 117 | 118 | Learning ROS (Robot Operating System) can add significant value to your career in robotics or related fields. 119 | 120 | - Overview of ROS 121 | - ROS architecture and components 122 | - ROS installation and setup 123 | - Basic ROS commands and tools 124 | 125 | # ROS Messages and Topics :rotating_light: 126 | 127 | - ROS messages and message types 128 | - Creating custom messages 129 | - ROS topics and publishers/subscribers 130 | - Using rostopic and rqt tools 131 | 132 | --- 133 | 134 | # ROS Services and Actions :rotating_light: 135 | 136 | - ROS services and service types 137 | - Creating custom services 138 | - ROS actions and action servers/clients 139 | - Using rosservice and rqt tools 140 | 141 | # ROS Nodes and Launch Files :rotating_light: 142 | 143 | - ROS nodes and nodelets 144 | - Creating custom nodes 145 | - ROS launch files and launch parameters 146 | - Using roslaunch and rqt tools 147 | - ROS Bag 148 | 149 | --- 150 | 151 | # ROS Packages and Catkin :rotating_light: 152 | 153 | - ROS packages and package structure 154 | - Creating custom packages 155 | - Using catkin build and catkin_make 156 | - Working with dependencies and third-party libraries 157 | 158 | **By the end of this course, students will have a strong understanding of the ROS ecosystem and be able to develop and debug ROS applications for various robotics projects. They will have experience with the most commonly used ROS packages and tools, as well as an understanding of best practices for ROS development.** 159 | 160 | --- 161 | 162 | # Gazebo :rotating_light: 163 | 164 | Learning how to simulate robotic environments with Gazebo is a valuable skill for roboticists, as it allows for testing and development of robotic systems without the need for physical hardware. 165 | 166 | - Introduction to ROS and Gazebo 167 | 168 | - Overview of ROS and Gazebo and their benefits for robotics development 169 | - Installation and setup of ROS and Gazebo 170 | - Creating a ROS workspace and project structure 171 | 172 | - Building robot models in Gazebo 173 | - Gazebo model structure and file formats 174 | - Importing 3D models into Gazebo 175 | - Creating custom robot models in Gazebo using plugins 176 | 177 | --- 178 | 179 | - Controlling robots with ROS 180 | - ROS topics, messages, and services 181 | - Building ROS nodes and publishers/subscribers 182 | - Controlling robot movements using ROS 183 | 184 | - Simulating robot behavior in Gazebo 185 | - Writing Gazebo plugins to control robot behavior 186 | - Simulating sensors and their data using Gazebo plugins 187 | - Visualizing robot behavior and sensor data in Gazebo 188 | 189 | --- 190 | 191 | # URDF (Unified Robot Description Format) :rotating_light: 192 | 193 | is an XML format used to describe robots and their components in ROS (Robot Operating System). 194 | 195 | - Introduction to URDF and ROS 196 | - Overview of URDF and its role in ROS 197 | - Benefits of creating custom robots using URDF 198 | 199 | - Creating a robot description in URDF 200 | - URDF file format and syntax 201 | - Basic robot components: links and joints 202 | - Defining geometry and visuals for robot components 203 | 204 | - Advanced robot components in URDF 205 | - Adding sensors(Lidar- Camera- IMU,..) to the robot model 206 | - Using plugins to customize robot behavior and functionality 207 | 208 | --- 209 | 210 | - Integration with other ROS packages and tools 211 | 212 | - Using RViz for robot visualization and debugging 213 | - Building custom ROS nodes to control the robot 214 | 215 | --- 216 | 217 | # mobile robot kinematics :rotating_light: 218 | 219 | - Introduction to Mobile Robot Kinematics 220 | - Definition of kinematics and its importance in mobile robotics 221 | - Types of mobile robots and their kinematic properties 222 | - Overview of coordinate frames, transforms, and transformations 223 | 224 | - Differential Drive Kinematics 225 | - Differential drive robots and their kinematics 226 | - Deriving the kinematic model for a differential drive robot 227 | - Control of differential drive robots using kinematics 228 | 229 | - Mobile Robot Localization 230 | - Overview of mobile robot localization 231 | - Sensor-based localization techniques, including odometry and wheel encoders 232 | 233 | --- 234 | 235 | # Transformations and Frames(TF) :rotating_light: 236 | 237 | Transformation and frames are fundamental concepts in the Robot Operating System (ROS). In ROS, a frame is a coordinate system that represents the position and orientation of a physical object, such as a robot, sensor, or camera. Transformations describe the relationship between different frames in the environment, allowing us to determine the position and orientation of objects relative to one another. 238 | 239 | - Frames and Transformations 240 | - Transformation Types 241 | - Translation 242 | - Rotation 243 | - Transformation Matrix 244 | - TF ROS 245 | 246 | --- 247 | 248 | # Localization :rotating_light: 249 | 250 | Learn how Kalman filter(KF) and Monte Carlo Localization (MCL) can be used to estimate noisy sensor readings, and how to estimate a robot’s position relative to a known map of the environment 251 | 252 | # KF 253 | 254 | - Introduction to Kalman Filters 255 | - Linear Systems and State Space Models 256 | - The Prediction Step 257 | - The Update Step 258 | - Nonlinear Systems and Extended Kalman Filters 259 | - Robot Loclization and robot_robot_pose ROS Packages 260 | 261 | --- 262 | 263 | # Localization :rotating_light: 264 | 265 | # MCL 266 | 267 | - Introduction to Monte Carlo Localization 268 | - What's MCL? 269 | - Particle Filters 270 | - Bayes Filtering 271 | - How MCL Algorithm works? 272 | - AMCL Package with ROS 273 | 274 | --- 275 | 276 | # Mapping and SLAM :rotating_light: 277 | 278 | Simultaneous Localization and Mapping (SLAM) is a technique used in robotics to map an unknown environment while simultaneously estimating the robot's pose within that environment. 279 | 280 | - Introduction to Mapping & SLAM 281 | - Occupancy Grid Mapping 282 | - Grid-Based FastSLAM(Gmapping) 283 | - GraphSLAM(Cartographer) 284 | - SLAM integration with ROS 285 | - Creating a ROS package for mapping 286 | - create 2D map using Laser and Odometry 287 | - save the map 288 | 289 | --- 290 | 291 | # Path Planning and Navigation :rotating_light: 292 | 293 | Path planning and navigation are critical components of autonomous robots that allow them to move around their environment and perform tasks. There are various path planning and navigation algorithms that can be used. 294 | 295 | - Introduction to Path Planning and Navigation 296 | - What is path planning and navigation? 297 | - Importance of path planning and navigation in robotics 298 | - Types of environments robots navigate in 299 | 300 | --- 301 | 302 | # Path Planning and Navigation :rotating_light: 303 | 304 | - Path Planning Algorithms 305 | - Breadth First Search(BFS) Algorithm 306 | - Bepth First Search(DFS) Algorithm 307 | - Dijkstra's Algorithm 308 | - A* Algorithm 309 | - RRT (Rapidly-exploring Random Tree) Algorithm 310 | - Comparison of different path planning algorithms 311 | 312 | - Integration of SLAM and navigation 313 | - Navigation Integration 314 | - Benefits of SLAM and navigation integration 315 | 316 | --- 317 | 318 | # Path Planning and Navigation :rotating_light: 319 | 320 | - Move_Base ROS Package 321 | - Local and Global Planner 322 | - Local and Global Costmap 323 | - Recovery Behaivor 324 | --------------------------------------------------------------------------------