Skip to content

Commit

Permalink
Autonomous-Robotics-Course
Browse files Browse the repository at this point in the history
  • Loading branch information
nomeera committed Sep 27, 2023
0 parents commit adfea42
Show file tree
Hide file tree
Showing 112 changed files with 13,978 additions and 0 deletions.
130 changes: 130 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,130 @@
# Autonomous Robotics Course
## Instructor: [Eng.Khaled Gabr](https://github.com/khaledgabr77) | Robotics Corner Academy

![Course Level](https://img.shields.io/badge/Level-Beginner-green.svg)
![ROS](https://img.shields.io/badge/skills-ROS-green.svg)
![Robotics](https://img.shields.io/badge/skills-Robotics-green.svg)
![Language](https://img.shields.io/badge/Language-Python-blue.svg)
![Language](https://img.shields.io/badge/Language-C++-blue.svg)

<details>
<summary>click to show course content</summary>

### Course Content

- Introduction to Linux, Terminal, and Shell
- Python Programming
- C++ Programming
- Introduction to ROS and ROS installation
- ROS Core Concepts:
- Master
- Nodes
- Topics
- Messages
- Services
- ROS Labs (rostopic, rosmsg, rosnode, rosservice)
- Creating a ROS WorkSpace and Packages
- Writing a ROS Publisher and Subscriber
- Writing a ROS Service and Client
- Creating a Custom ROS Message
- ROS Tools:
- Launch files
- ROS Bag
- RQT
- Remap
- Gazebo, RVIZ: creating a custom robot using Gazebo
- Creating a custom robot using URDF
- Adding Gazebo plugins with ROS
- Kinematics with ROS
- Turtlebot3 Lab
- ROS project
- TF ROS
- 2D and 3D Frames
- Transformations
- Localization:
- Kalman Filter
- MCL
- AMCL Package
- SLAM
- Navigation
</details>

<img src="https://cdn-icons-png.flaticon.com/512/2814/2814666.png" width="30" />

## ROS Tasks

> Note: All nodes written in C++ and Python also.
### Task 1
* [count_ws](Task_1/count_ws)
* publisher and subscriber to start count from 100 until the user uses CTRL C.
* ![](Task_1/count_ws/rosgraph.png)
* [nomeer_ws](Task_1/nomeer_ws)
* publisher and subscriber using String msg("I am Learning Robotics and ROS") until the user uses CTRL C.
* ![](Task_1/nomeer_ws/rosgraph.png)

---
### Task 2
* [nomeer_robot_ws](Task_2/nomeer_robot_ws)
* move_pkg with robot_py.launch file.
* publish data to the /cmd_vel topic.
* Modify the code in order to print the odometry of the robot.
* Python file that creates a publisher that indicates the age of the robot

![](Task_2/nomeer_robot_ws/rosgraph.png)

---
### Task 3
* [control_nomeer_roboot_ws](Task_3/control_nomeer_roboot_ws)
* Users can input a linear (x) velocity in the range [2,6] (floating point allowed)
* Users can input an angular (z) velocity [2,6] (floating point allowed)
* another node to publish data to the /cmd_vel topic

![](Task_3/control_nomeer_roboot_ws/rosgraph.png)

---
### Task 4
* [nomeer_ws](Task_4/nomeer_ws)
* publisher and subscriber to count from 0 until the user uses CTRL C.
* message nodes that publish Complex(real, imaginary) numbers.
* a service that can count the number of words, ex: i love you >> 3, you are the best >> 4. [![](https://img.shields.io/badge/-issue-critical.svg)](https://github.com/nomeera/Autonomous-Robotics-Course/tree/master/4.ROS/Tasks/Task_4/nomeer_ws/src/n_words_pkg)

![](Task_4/nomeer_ws/rosgraph.png)

---
### Task 5
* [gazebo](Task_5/src)
* first gazebo task
* create Model(Robot) & Environment
* Adding the Environment + Model inside a World

<img src="Task_5/src/nomeer_gazebo_pkg/default_gzclient_camera(1)-2023-02-11T20_32_22.012985.jpg" width="600">

---
### Task 6
* [URDF](Task_6/src/nomeer_xacro_pkg/urdf/)
* [Tasks 6.1:](/4.ROS/Tasks/Task_6/src/nomeer_xacro_pkg/urdf/Robot_1/nomeer1_robot.xacro)
- Create custom robot using URDF/XACRO the robot should have:
- 4 driver wheels
- Normal Camera, the camera should be in front of robot.
- Lidar should be at the center of robot.

![](Task_6/src/nomeer_xacro_pkg/urdf/Robot_1/urdf_task1.jpeg)
---
* [Tasks 6.2:](Task_7/src/robot_description/urdf/robot.xacro)
- Create custom robot using URDF/XACRO the robot should have:
- 4 driver wheels OR 2 driver wheels and 1 driven free wheel(Castor wheel)
- Normal Camera, the camera should be in front of robot.
- the robot should have a tour at least 1m height attached with last edge of robot.
- 1 Depth Camera(Xbox camera, RealSense Camera,..), the camera should be attached to the tour and at least at height 1m of robot.
- Lidar should be at the center of robot.

![](Task_7/src/robot_description/urdf/robot.jpeg)

---
### Task 7
* [Gazebo Plugin](/4.ROS/Tasks/Task_7/src)
* Add Gazebo Plugin (lidar, camera, diff) for [Task 6.2](Task_7/src/robot_description/urdf/robot.xacro) Robot. ([gazebo.xacro](4.ROS/Tasks/Task_7/src/robot_description/urdf/gazebo.xacro))
* download .stl or .dae file for the lidar and added to mesh folder also added to your URDF
* create your world in gazebo
* launching the robot in your world ([robot.launch](Task_7/src/robot_gazebo/launch/robot.launch))
Binary file added Task_1/count_ws/rosgraph.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
1 change: 1 addition & 0 deletions Task_1/count_ws/src/CMakeLists.txt
206 changes: 206 additions & 0 deletions Task_1/count_ws/src/SubCount_pkg/CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,206 @@
cmake_minimum_required(VERSION 3.0.2)
project(SubCount_pkg)

## Compile as C++11, supported in ROS Kinetic and newer
# add_compile_options(-std=c++11)

## Find catkin macros and libraries
## if COMPONENTS list like find_package(catkin REQUIRED COMPONENTS xyz)
## is used, also find other catkin packages
find_package(catkin REQUIRED COMPONENTS
roscpp
rospy
std_msgs
)

## System dependencies are found with CMake's conventions
# find_package(Boost REQUIRED COMPONENTS system)


## Uncomment this if the package has a setup.py. This macro ensures
## modules and global scripts declared therein get installed
## See http://ros.org/doc/api/catkin/html/user_guide/setup_dot_py.html
# catkin_python_setup()

################################################
## Declare ROS messages, services and actions ##
################################################

## To declare and build messages, services or actions from within this
## package, follow these steps:
## * Let MSG_DEP_SET be the set of packages whose message types you use in
## your messages/services/actions (e.g. std_msgs, actionlib_msgs, ...).
## * In the file package.xml:
## * add a build_depend tag for "message_generation"
## * add a build_depend and a exec_depend tag for each package in MSG_DEP_SET
## * If MSG_DEP_SET isn't empty the following dependency has been pulled in
## but can be declared for certainty nonetheless:
## * add a exec_depend tag for "message_runtime"
## * In this file (CMakeLists.txt):
## * add "message_generation" and every package in MSG_DEP_SET to
## find_package(catkin REQUIRED COMPONENTS ...)
## * add "message_runtime" and every package in MSG_DEP_SET to
## catkin_package(CATKIN_DEPENDS ...)
## * uncomment the add_*_files sections below as needed
## and list every .msg/.srv/.action file to be processed
## * uncomment the generate_messages entry below
## * add every package in MSG_DEP_SET to generate_messages(DEPENDENCIES ...)

## Generate messages in the 'msg' folder
# add_message_files(
# FILES
# Message1.msg
# Message2.msg
# )

## Generate services in the 'srv' folder
# add_service_files(
# FILES
# Service1.srv
# Service2.srv
# )

## Generate actions in the 'action' folder
# add_action_files(
# FILES
# Action1.action
# Action2.action
# )

## Generate added messages and services with any dependencies listed here
# generate_messages(
# DEPENDENCIES
# std_msgs
# )

################################################
## Declare ROS dynamic reconfigure parameters ##
################################################

## To declare and build dynamic reconfigure parameters within this
## package, follow these steps:
## * In the file package.xml:
## * add a build_depend and a exec_depend tag for "dynamic_reconfigure"
## * In this file (CMakeLists.txt):
## * add "dynamic_reconfigure" to
## find_package(catkin REQUIRED COMPONENTS ...)
## * uncomment the "generate_dynamic_reconfigure_options" section below
## and list every .cfg file to be processed

## Generate dynamic reconfigure parameters in the 'cfg' folder
# generate_dynamic_reconfigure_options(
# cfg/DynReconf1.cfg
# cfg/DynReconf2.cfg
# )

###################################
## catkin specific configuration ##
###################################
## The catkin_package macro generates cmake config files for your package
## Declare things to be passed to dependent projects
## INCLUDE_DIRS: uncomment this if your package contains header files
## LIBRARIES: libraries you create in this project that dependent projects also need
## CATKIN_DEPENDS: catkin_packages dependent projects also need
## DEPENDS: system dependencies of this project that dependent projects also need
catkin_package(
# INCLUDE_DIRS include
# LIBRARIES SubCount_pkg
# CATKIN_DEPENDS roscpp rospy std_msgs
# DEPENDS system_lib
)

###########
## Build ##
###########

## Specify additional locations of header files
## Your package locations should be listed before other locations
include_directories(
# include
${catkin_INCLUDE_DIRS}
)

## Declare a C++ library
# add_library(${PROJECT_NAME}
# src/${PROJECT_NAME}/SubCount_pkg.cpp
# )

## Add cmake target dependencies of the library
## as an example, code may need to be generated before libraries
## either from message generation or dynamic reconfigure
# add_dependencies(${PROJECT_NAME} ${${PROJECT_NAME}_EXPORTED_TARGETS} ${catkin_EXPORTED_TARGETS})

## Declare a C++ executable
## With catkin_make all packages are built within a single CMake context
## The recommended prefix ensures that target names across packages don't collide
add_executable(Subscriber src/sub.cpp)

## Rename C++ executable without prefix
## The above recommended prefix causes long target names, the following renames the
## target back to the shorter version for ease of user use
## e.g. "rosrun someones_pkg node" instead of "rosrun someones_pkg someones_pkg_node"
# set_target_properties(${PROJECT_NAME}_node PROPERTIES OUTPUT_NAME node PREFIX "")

## Add cmake target dependencies of the executable
## same as for the library above
# add_dependencies(${PROJECT_NAME}_node ${${PROJECT_NAME}_EXPORTED_TARGETS} ${catkin_EXPORTED_TARGETS})

## Specify libraries to link a library or executable target against
target_link_libraries(Subscriber
${catkin_LIBRARIES}
)

#############
## Install ##
#############

# all install targets should use catkin DESTINATION variables
# See http://ros.org/doc/api/catkin/html/adv_user_guide/variables.html

## Mark executable scripts (Python etc.) for installation
## in contrast to setup.py, you can choose the destination
# catkin_install_python(PROGRAMS
# scripts/my_python_script
# DESTINATION ${CATKIN_PACKAGE_BIN_DESTINATION}
# )

## Mark executables for installation
## See http://docs.ros.org/melodic/api/catkin/html/howto/format1/building_executables.html
# install(TARGETS ${PROJECT_NAME}_node
# RUNTIME DESTINATION ${CATKIN_PACKAGE_BIN_DESTINATION}
# )

## Mark libraries for installation
## See http://docs.ros.org/melodic/api/catkin/html/howto/format1/building_libraries.html
# install(TARGETS ${PROJECT_NAME}
# ARCHIVE DESTINATION ${CATKIN_PACKAGE_LIB_DESTINATION}
# LIBRARY DESTINATION ${CATKIN_PACKAGE_LIB_DESTINATION}
# RUNTIME DESTINATION ${CATKIN_GLOBAL_BIN_DESTINATION}
# )

## Mark cpp header files for installation
# install(DIRECTORY include/${PROJECT_NAME}/
# DESTINATION ${CATKIN_PACKAGE_INCLUDE_DESTINATION}
# FILES_MATCHING PATTERN "*.h"
# PATTERN ".svn" EXCLUDE
# )

## Mark other files for installation (e.g. launch and bag files, etc.)
# install(FILES
# # myfile1
# # myfile2
# DESTINATION ${CATKIN_PACKAGE_SHARE_DESTINATION}
# )

#############
## Testing ##
#############

## Add gtest based cpp test target and link libraries
# catkin_add_gtest(${PROJECT_NAME}-test test/test_SubCount_pkg.cpp)
# if(TARGET ${PROJECT_NAME}-test)
# target_link_libraries(${PROJECT_NAME}-test ${PROJECT_NAME})
# endif()

## Add folders to be run by python nosetests
# catkin_add_nosetests(test)
Loading

0 comments on commit adfea42

Please sign in to comment.