From adfea420cfd6601a11f472bae165612a76467264 Mon Sep 17 00:00:00 2001 From: nomeer Date: Wed, 27 Sep 2023 09:42:58 +0300 Subject: [PATCH] Autonomous-Robotics-Course --- README.md | 130 + Task_1/count_ws/rosgraph.png | Bin 0 -> 14277 bytes Task_1/count_ws/src/CMakeLists.txt | 1 + .../count_ws/src/SubCount_pkg/CMakeLists.txt | 206 ++ Task_1/count_ws/src/SubCount_pkg/package.xml | 68 + .../count_ws/src/SubCount_pkg/scripts/sub.py | 19 + Task_1/count_ws/src/SubCount_pkg/src/sub.cpp | 23 + .../count_ws/src/pubCount_pkg/CMakeLists.txt | 206 ++ Task_1/count_ws/src/pubCount_pkg/package.xml | 68 + .../count_ws/src/pubCount_pkg/scripts/pub.py | 24 + Task_1/count_ws/src/pubCount_pkg/src/pub.cpp | 27 + Task_1/nomeer_ws/rosgraph.png | Bin 0 -> 13873 bytes Task_1/nomeer_ws/src/CMakeLists.txt | 1 + Task_1/nomeer_ws/src/pub_pkg/CMakeLists.txt | 206 ++ Task_1/nomeer_ws/src/pub_pkg/package.xml | 68 + Task_1/nomeer_ws/src/pub_pkg/scripts/pub.py | 20 + Task_1/nomeer_ws/src/pub_pkg/src/pub.cpp | 27 + Task_1/nomeer_ws/src/sub_pkg/CMakeLists.txt | 206 ++ Task_1/nomeer_ws/src/sub_pkg/package.xml | 68 + Task_1/nomeer_ws/src/sub_pkg/scripts/sub.py | 17 + Task_1/nomeer_ws/src/sub_pkg/src/sub.cpp | 18 + Task_2/nomeer_robot_ws/rosgraph.png | Bin 0 -> 55204 bytes Task_2/nomeer_robot_ws/src/CMakeLists.txt | 1 + .../src/move_pkg/CMakeLists.txt | 218 ++ .../src/move_pkg/launch/robot_cpp.launch | 6 + .../src/move_pkg/launch/robot_py.launch | 6 + .../nomeer_robot_ws/src/move_pkg/msg/Age.msg | 3 + .../nomeer_robot_ws/src/move_pkg/package.xml | 71 + .../src/move_pkg/scripts/pub_age.py | 35 + .../src/move_pkg/scripts/pub_twist.py | 38 + .../src/move_pkg/scripts/sub_age.py | 19 + .../src/move_pkg/scripts/sub_odom.py | 25 + .../src/move_pkg/src/pub_ageC.cpp | 24 + .../src/move_pkg/src/pub_twistC.cpp | 31 + .../src/move_pkg/src/sub_ageC.cpp | 20 + .../src/move_pkg/src/sub_odomC.cpp | 47 + Task_3/control_nomeer_roboot_ws/rosgraph.png | Bin 0 -> 30363 bytes .../src/CMakeLists.txt | 1 + .../src/move_turtlesim/CMakeLists.txt | 210 ++ .../src/move_turtlesim/package.xml | 68 + .../src/move_turtlesim/scripts/input_user.py | 49 + .../move_turtlesim/scripts/move_turtlesim.py | 38 + .../src/move_turtlesim/src/input_user.cpp | 53 + .../src/move_turtlesim/src/move_turtlesim.cpp | 31 + Task_4/nomeer_ws/rosgraph.png | Bin 0 -> 33995 bytes Task_4/nomeer_ws/src/CMakeLists.txt | 1 + .../src/cmplx_num_pkg/CMakeLists.txt | 210 ++ .../nomeer_ws/src/cmplx_num_pkg/msg/cmplx.msg | 2 + .../nomeer_ws/src/cmplx_num_pkg/package.xml | 71 + .../src/cmplx_num_pkg/scripts/pub_cmplx.py | 30 + .../src/cmplx_num_pkg/scripts/sub_cmplx.py | 16 + .../src/cmplx_num_pkg/src/pub_cmplx.cpp | 27 + .../src/cmplx_num_pkg/src/sub_cmplx.cpp | 18 + Task_4/nomeer_ws/src/count_pkg/CMakeLists.txt | 211 ++ Task_4/nomeer_ws/src/count_pkg/package.xml | 68 + .../src/count_pkg/scripts/pub_count.py | 35 + .../src/count_pkg/scripts/sub_count.py | 17 + .../nomeer_ws/src/count_pkg/src/pub_count.cpp | 23 + .../nomeer_ws/src/count_pkg/src/sub_count.cpp | 17 + .../nomeer_ws/src/n_words_pkg/CMakeLists.txt | 206 ++ Task_4/nomeer_ws/src/n_words_pkg/package.xml | 71 + .../src/n_words_pkg/scripts/client.py | 33 + .../src/n_words_pkg/scripts/server.py | 23 + .../nomeer_ws/src/n_words_pkg/src/client.cpp | 1 + .../nomeer_ws/src/n_words_pkg/src/server.cpp | 1 + .../src/n_words_pkg/srv/count_words.srv | 5 + Task_5/src/CMakeLists.txt | 1 + Task_5/src/nomeer_gazebo_pkg/CMakeLists.txt | 206 ++ ...t_camera(1)-2023-02-11T20_32_22.012985.jpg | Bin 0 -> 77805 bytes .../model/building_model/model.config | 11 + .../model/building_model/model.sdf | 1138 +++++++ .../model/nomeer_model/model.config | 11 + .../model/nomeer_model/model.sdf | 745 +++++ Task_5/src/nomeer_gazebo_pkg/package.xml | 68 + .../src/nomeer_gazebo_pkg/world/nomeerWorld | 2897 +++++++++++++++++ .../src/nomeer_gazebo_pkg/world/nomeer_world | 900 +++++ Task_6/src/CMakeLists.txt | 1 + Task_6/src/nomeer_xacro_pkg/CMakeLists.txt | 204 ++ Task_6/src/nomeer_xacro_pkg/package.xml | 62 + .../urdf/Robot Accessories/camera.xacro | 34 + .../urdf/Robot Accessories/lidar.xacro | 35 + .../urdf/Robot Accessories/material.xacro | 24 + .../urdf/Robot Accessories/wheel.xacro | 35 + .../nomeer_xacro_pkg/urdf/Robot_1/base.xacro | 33 + .../nomeer_xacro_pkg/urdf/Robot_1/nomeer.urdf | 208 ++ .../urdf/Robot_1/nomeer1_robot.xacro | 69 + .../urdf/Robot_1/urdf_task1.jpeg | Bin 0 -> 68341 bytes .../nomeer_xacro_pkg/urdf/Robot_2/base.xacro | 0 Task_7/src/CMakeLists.txt | 1 + Task_7/src/robot_description/CMakeLists.txt | 204 ++ Task_7/src/robot_description/package.xml | 62 + .../urdf/.vscode/settings.json | 5 + Task_7/src/robot_description/urdf/base.xacro | 36 + Task_7/src/robot_description/urdf/body.xacro | 37 + .../src/robot_description/urdf/camera.xacro | 37 + .../src/robot_description/urdf/caster.xacro | 46 + .../src/robot_description/urdf/gazebo.xacro | 145 + .../urdf/inertial_macros.xacro | 34 + Task_7/src/robot_description/urdf/lidar.xacro | 37 + .../src/robot_description/urdf/material.xacro | 24 + Task_7/src/robot_description/urdf/robot.jpeg | Bin 0 -> 59071 bytes Task_7/src/robot_description/urdf/robot.urdf | 215 ++ Task_7/src/robot_description/urdf/robot.xacro | 79 + Task_7/src/robot_description/urdf/wheel.xacro | 37 + Task_7/src/robot_gazebo/CMakeLists.txt | 202 ++ Task_7/src/robot_gazebo/launch/robot.launch | 48 + .../src/robot_gazebo/models/wall/model.config | 11 + Task_7/src/robot_gazebo/models/wall/model.sdf | 268 ++ Task_7/src/robot_gazebo/package.xml | 59 + .../robot_gazebo/worlds/world/model.config | 11 + .../src/robot_gazebo/worlds/world/model.sdf | 239 ++ .../src/robot_gazebo/worlds/world/robot_world | 1976 +++++++++++ 112 files changed, 13978 insertions(+) create mode 100644 README.md create mode 100644 Task_1/count_ws/rosgraph.png create mode 120000 Task_1/count_ws/src/CMakeLists.txt create mode 100644 Task_1/count_ws/src/SubCount_pkg/CMakeLists.txt create mode 100644 Task_1/count_ws/src/SubCount_pkg/package.xml create mode 100755 Task_1/count_ws/src/SubCount_pkg/scripts/sub.py create mode 100755 Task_1/count_ws/src/SubCount_pkg/src/sub.cpp create mode 100644 Task_1/count_ws/src/pubCount_pkg/CMakeLists.txt create mode 100644 Task_1/count_ws/src/pubCount_pkg/package.xml create mode 100755 Task_1/count_ws/src/pubCount_pkg/scripts/pub.py create mode 100755 Task_1/count_ws/src/pubCount_pkg/src/pub.cpp create mode 100644 Task_1/nomeer_ws/rosgraph.png create mode 120000 Task_1/nomeer_ws/src/CMakeLists.txt create mode 100644 Task_1/nomeer_ws/src/pub_pkg/CMakeLists.txt create mode 100644 Task_1/nomeer_ws/src/pub_pkg/package.xml create mode 100755 Task_1/nomeer_ws/src/pub_pkg/scripts/pub.py create mode 100755 Task_1/nomeer_ws/src/pub_pkg/src/pub.cpp create mode 100644 Task_1/nomeer_ws/src/sub_pkg/CMakeLists.txt create mode 100644 Task_1/nomeer_ws/src/sub_pkg/package.xml create mode 100755 Task_1/nomeer_ws/src/sub_pkg/scripts/sub.py create mode 100755 Task_1/nomeer_ws/src/sub_pkg/src/sub.cpp create mode 100644 Task_2/nomeer_robot_ws/rosgraph.png create mode 120000 Task_2/nomeer_robot_ws/src/CMakeLists.txt create mode 100644 Task_2/nomeer_robot_ws/src/move_pkg/CMakeLists.txt create mode 100755 Task_2/nomeer_robot_ws/src/move_pkg/launch/robot_cpp.launch create mode 100755 Task_2/nomeer_robot_ws/src/move_pkg/launch/robot_py.launch create mode 100644 Task_2/nomeer_robot_ws/src/move_pkg/msg/Age.msg create mode 100644 Task_2/nomeer_robot_ws/src/move_pkg/package.xml create mode 100755 Task_2/nomeer_robot_ws/src/move_pkg/scripts/pub_age.py create mode 100755 Task_2/nomeer_robot_ws/src/move_pkg/scripts/pub_twist.py create mode 100755 Task_2/nomeer_robot_ws/src/move_pkg/scripts/sub_age.py create mode 100755 Task_2/nomeer_robot_ws/src/move_pkg/scripts/sub_odom.py create mode 100755 Task_2/nomeer_robot_ws/src/move_pkg/src/pub_ageC.cpp create mode 100755 Task_2/nomeer_robot_ws/src/move_pkg/src/pub_twistC.cpp create mode 100755 Task_2/nomeer_robot_ws/src/move_pkg/src/sub_ageC.cpp create mode 100755 Task_2/nomeer_robot_ws/src/move_pkg/src/sub_odomC.cpp create mode 100644 Task_3/control_nomeer_roboot_ws/rosgraph.png create mode 120000 Task_3/control_nomeer_roboot_ws/src/CMakeLists.txt create mode 100644 Task_3/control_nomeer_roboot_ws/src/move_turtlesim/CMakeLists.txt create mode 100644 Task_3/control_nomeer_roboot_ws/src/move_turtlesim/package.xml create mode 100755 Task_3/control_nomeer_roboot_ws/src/move_turtlesim/scripts/input_user.py create mode 100755 Task_3/control_nomeer_roboot_ws/src/move_turtlesim/scripts/move_turtlesim.py create mode 100755 Task_3/control_nomeer_roboot_ws/src/move_turtlesim/src/input_user.cpp create mode 100755 Task_3/control_nomeer_roboot_ws/src/move_turtlesim/src/move_turtlesim.cpp create mode 100644 Task_4/nomeer_ws/rosgraph.png create mode 120000 Task_4/nomeer_ws/src/CMakeLists.txt create mode 100644 Task_4/nomeer_ws/src/cmplx_num_pkg/CMakeLists.txt create mode 100755 Task_4/nomeer_ws/src/cmplx_num_pkg/msg/cmplx.msg create mode 100644 Task_4/nomeer_ws/src/cmplx_num_pkg/package.xml create mode 100755 Task_4/nomeer_ws/src/cmplx_num_pkg/scripts/pub_cmplx.py create mode 100755 Task_4/nomeer_ws/src/cmplx_num_pkg/scripts/sub_cmplx.py create mode 100755 Task_4/nomeer_ws/src/cmplx_num_pkg/src/pub_cmplx.cpp create mode 100755 Task_4/nomeer_ws/src/cmplx_num_pkg/src/sub_cmplx.cpp create mode 100644 Task_4/nomeer_ws/src/count_pkg/CMakeLists.txt create mode 100644 Task_4/nomeer_ws/src/count_pkg/package.xml create mode 100755 Task_4/nomeer_ws/src/count_pkg/scripts/pub_count.py create mode 100755 Task_4/nomeer_ws/src/count_pkg/scripts/sub_count.py create mode 100755 Task_4/nomeer_ws/src/count_pkg/src/pub_count.cpp create mode 100755 Task_4/nomeer_ws/src/count_pkg/src/sub_count.cpp create mode 100644 Task_4/nomeer_ws/src/n_words_pkg/CMakeLists.txt create mode 100644 Task_4/nomeer_ws/src/n_words_pkg/package.xml create mode 100755 Task_4/nomeer_ws/src/n_words_pkg/scripts/client.py create mode 100755 Task_4/nomeer_ws/src/n_words_pkg/scripts/server.py create mode 100755 Task_4/nomeer_ws/src/n_words_pkg/src/client.cpp create mode 100755 Task_4/nomeer_ws/src/n_words_pkg/src/server.cpp create mode 100755 Task_4/nomeer_ws/src/n_words_pkg/srv/count_words.srv create mode 120000 Task_5/src/CMakeLists.txt create mode 100644 Task_5/src/nomeer_gazebo_pkg/CMakeLists.txt create mode 100644 Task_5/src/nomeer_gazebo_pkg/default_gzclient_camera(1)-2023-02-11T20_32_22.012985.jpg create mode 100644 Task_5/src/nomeer_gazebo_pkg/model/building_model/model.config create mode 100644 Task_5/src/nomeer_gazebo_pkg/model/building_model/model.sdf create mode 100644 Task_5/src/nomeer_gazebo_pkg/model/nomeer_model/model.config create mode 100644 Task_5/src/nomeer_gazebo_pkg/model/nomeer_model/model.sdf create mode 100644 Task_5/src/nomeer_gazebo_pkg/package.xml create mode 100644 Task_5/src/nomeer_gazebo_pkg/world/nomeerWorld create mode 100644 Task_5/src/nomeer_gazebo_pkg/world/nomeer_world create mode 120000 Task_6/src/CMakeLists.txt create mode 100644 Task_6/src/nomeer_xacro_pkg/CMakeLists.txt create mode 100644 Task_6/src/nomeer_xacro_pkg/package.xml create mode 100644 Task_6/src/nomeer_xacro_pkg/urdf/Robot Accessories/camera.xacro create mode 100644 Task_6/src/nomeer_xacro_pkg/urdf/Robot Accessories/lidar.xacro create mode 100644 Task_6/src/nomeer_xacro_pkg/urdf/Robot Accessories/material.xacro create mode 100644 Task_6/src/nomeer_xacro_pkg/urdf/Robot Accessories/wheel.xacro create mode 100644 Task_6/src/nomeer_xacro_pkg/urdf/Robot_1/base.xacro create mode 100644 Task_6/src/nomeer_xacro_pkg/urdf/Robot_1/nomeer.urdf create mode 100644 Task_6/src/nomeer_xacro_pkg/urdf/Robot_1/nomeer1_robot.xacro create mode 100644 Task_6/src/nomeer_xacro_pkg/urdf/Robot_1/urdf_task1.jpeg create mode 100644 Task_6/src/nomeer_xacro_pkg/urdf/Robot_2/base.xacro create mode 120000 Task_7/src/CMakeLists.txt create mode 100644 Task_7/src/robot_description/CMakeLists.txt create mode 100644 Task_7/src/robot_description/package.xml create mode 100644 Task_7/src/robot_description/urdf/.vscode/settings.json create mode 100644 Task_7/src/robot_description/urdf/base.xacro create mode 100644 Task_7/src/robot_description/urdf/body.xacro create mode 100644 Task_7/src/robot_description/urdf/camera.xacro create mode 100644 Task_7/src/robot_description/urdf/caster.xacro create mode 100644 Task_7/src/robot_description/urdf/gazebo.xacro create mode 100644 Task_7/src/robot_description/urdf/inertial_macros.xacro create mode 100644 Task_7/src/robot_description/urdf/lidar.xacro create mode 100644 Task_7/src/robot_description/urdf/material.xacro create mode 100644 Task_7/src/robot_description/urdf/robot.jpeg create mode 100644 Task_7/src/robot_description/urdf/robot.urdf create mode 100644 Task_7/src/robot_description/urdf/robot.xacro create mode 100644 Task_7/src/robot_description/urdf/wheel.xacro create mode 100644 Task_7/src/robot_gazebo/CMakeLists.txt create mode 100644 Task_7/src/robot_gazebo/launch/robot.launch create mode 100644 Task_7/src/robot_gazebo/models/wall/model.config create mode 100644 Task_7/src/robot_gazebo/models/wall/model.sdf create mode 100644 Task_7/src/robot_gazebo/package.xml create mode 100644 Task_7/src/robot_gazebo/worlds/world/model.config create mode 100644 Task_7/src/robot_gazebo/worlds/world/model.sdf create mode 100644 Task_7/src/robot_gazebo/worlds/world/robot_world diff --git a/README.md b/README.md new file mode 100644 index 0000000..cdeb03e --- /dev/null +++ b/README.md @@ -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) + +
+ click to show course content + + ### 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 +
+ + + +## 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 + + + +--- +### 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)) diff --git a/Task_1/count_ws/rosgraph.png b/Task_1/count_ws/rosgraph.png new file mode 100644 index 0000000000000000000000000000000000000000..b98c10fe707976a92c2a884d81e96a1edb7621e1 GIT binary patch literal 14277 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 JOC*ef{vU)%lc@jz literal 0 HcmV?d00001 diff --git a/Task_1/count_ws/src/CMakeLists.txt b/Task_1/count_ws/src/CMakeLists.txt new file mode 120000 index 0000000..2016816 --- /dev/null +++ b/Task_1/count_ws/src/CMakeLists.txt @@ -0,0 +1 @@ +/opt/ros/noetic/share/catkin/cmake/toplevel.cmake \ No newline at end of file diff --git a/Task_1/count_ws/src/SubCount_pkg/CMakeLists.txt b/Task_1/count_ws/src/SubCount_pkg/CMakeLists.txt new file mode 100644 index 0000000..7f8bf6e --- /dev/null +++ b/Task_1/count_ws/src/SubCount_pkg/CMakeLists.txt @@ -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) diff --git a/Task_1/count_ws/src/SubCount_pkg/package.xml b/Task_1/count_ws/src/SubCount_pkg/package.xml new file mode 100644 index 0000000..c039053 --- /dev/null +++ b/Task_1/count_ws/src/SubCount_pkg/package.xml @@ -0,0 +1,68 @@ + + + SubCount_pkg + 0.0.0 + The SubCount_pkg package + + + + + nomeer + + + + + + TODO + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + catkin + roscpp + rospy + std_msgs + roscpp + rospy + std_msgs + roscpp + rospy + std_msgs + + + + + + + + diff --git a/Task_1/count_ws/src/SubCount_pkg/scripts/sub.py b/Task_1/count_ws/src/SubCount_pkg/scripts/sub.py new file mode 100755 index 0000000..076d012 --- /dev/null +++ b/Task_1/count_ws/src/SubCount_pkg/scripts/sub.py @@ -0,0 +1,19 @@ +#!/usr/bin/python3 + +import rospy +from std_msgs.msg import Int32 + +def listener(): + # create node + rospy.init_node("Listener") + # subscribe count_topic + rospy.Subscriber("count_topic", Int32, callback) + rospy.spin() # processes incoming messages until the node is shut down. + +def callback(count): # callback function to handle msg + rospy.loginfo("count = %d", count.data) + + + +if __name__ == "__main__": + listener() \ No newline at end of file diff --git a/Task_1/count_ws/src/SubCount_pkg/src/sub.cpp b/Task_1/count_ws/src/SubCount_pkg/src/sub.cpp new file mode 100755 index 0000000..fd8e04a --- /dev/null +++ b/Task_1/count_ws/src/SubCount_pkg/src/sub.cpp @@ -0,0 +1,23 @@ +#include "ros/ros.h" +#include "std_msgs/Int32.h" + +// callback function to handle messgae +void callback(const std_msgs::Int32::ConstPtr& msg) // ConstPtr: smart pointer that provides automatic memory management for the message. +{ + ROS_INFO("count = %d", msg->data); // print msg on screen | -> point to class +} + +int main(int argc, char** argv) +{ + // create node + ros::init(argc, argv, "Subscriber"); + ros::NodeHandle nh; + + // create subscriber object + ros::Subscriber sub; + // subscribe message from counter topic + sub = nh.subscribe("counter", 1, callback); + ros::spin(); + + return 0; +} \ No newline at end of file diff --git a/Task_1/count_ws/src/pubCount_pkg/CMakeLists.txt b/Task_1/count_ws/src/pubCount_pkg/CMakeLists.txt new file mode 100644 index 0000000..33fed32 --- /dev/null +++ b/Task_1/count_ws/src/pubCount_pkg/CMakeLists.txt @@ -0,0 +1,206 @@ +cmake_minimum_required(VERSION 3.0.2) +project(pubCount_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 pubCount_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}/pubCount_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(Publisher src/pub.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(Publisher + ${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_pubCount_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) diff --git a/Task_1/count_ws/src/pubCount_pkg/package.xml b/Task_1/count_ws/src/pubCount_pkg/package.xml new file mode 100644 index 0000000..3b9dfd9 --- /dev/null +++ b/Task_1/count_ws/src/pubCount_pkg/package.xml @@ -0,0 +1,68 @@ + + + pubCount_pkg + 0.0.0 + The pubCount_pkg package + + + + + nomeer + + + + + + TODO + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + catkin + roscpp + rospy + std_msgs + roscpp + rospy + std_msgs + roscpp + rospy + std_msgs + + + + + + + + diff --git a/Task_1/count_ws/src/pubCount_pkg/scripts/pub.py b/Task_1/count_ws/src/pubCount_pkg/scripts/pub.py new file mode 100755 index 0000000..3f267a2 --- /dev/null +++ b/Task_1/count_ws/src/pubCount_pkg/scripts/pub.py @@ -0,0 +1,24 @@ +#!/usr/bin/python3 + +import rospy +from std_msgs.msg import Int32 + +def talker(): + # create node + rospy.init_node("Talker") + # create topic + pub = rospy.Publisher("count_topic", Int32, queue_size=1) + rate = rospy.Rate(1) # publish rate = 1 hz + + count_msg = 100 + while not rospy.is_shutdown(): # untill ROS shutdown + count_msg += 1 + rospy.loginfo(count_msg) # print count_msg on screen + pub.publish(count_msg) # publish count_msg on /count_topic + rate.sleep() + +if __name__ == "__main__": + try: + talker() + except rospy.ROSInterruptException: + pass \ No newline at end of file diff --git a/Task_1/count_ws/src/pubCount_pkg/src/pub.cpp b/Task_1/count_ws/src/pubCount_pkg/src/pub.cpp new file mode 100755 index 0000000..0af1237 --- /dev/null +++ b/Task_1/count_ws/src/pubCount_pkg/src/pub.cpp @@ -0,0 +1,27 @@ +#include +#include + +int main(int argc, char** argv) // argc & argv to make node conect each other in ROS system +{ + // crate node + ros::init(argc, argv, "Publisher"); + ros::NodeHandle nh; + ros::Rate rate(1); // publish rate = 1 hz + // create publisher object + ros::Publisher pub; + // publisher object publisher via counter topic + pub = nh.advertise("counter", 1); + + std_msgs::Int32 count; + count.data = 100; // create count msg + + while (ros::ok()) // loop until ROS shutdowm + { + pub.publish(count); // publish msg + ros::spinOnce(); // + rate.sleep(); // to make sure that we publish with 1 hz + ++count.data; + } + + return 0; +} \ No newline at end of file diff --git a/Task_1/nomeer_ws/rosgraph.png b/Task_1/nomeer_ws/rosgraph.png new file mode 100644 index 0000000000000000000000000000000000000000..dfe1527b9216ca54c4c6c223b416a7c2ec88de92 GIT binary patch literal 13873 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 literal 0 HcmV?d00001 diff --git a/Task_1/nomeer_ws/src/CMakeLists.txt b/Task_1/nomeer_ws/src/CMakeLists.txt new file mode 120000 index 0000000..2016816 --- /dev/null +++ b/Task_1/nomeer_ws/src/CMakeLists.txt @@ -0,0 +1 @@ +/opt/ros/noetic/share/catkin/cmake/toplevel.cmake \ No newline at end of file diff --git a/Task_1/nomeer_ws/src/pub_pkg/CMakeLists.txt b/Task_1/nomeer_ws/src/pub_pkg/CMakeLists.txt new file mode 100644 index 0000000..d133741 --- /dev/null +++ b/Task_1/nomeer_ws/src/pub_pkg/CMakeLists.txt @@ -0,0 +1,206 @@ +cmake_minimum_required(VERSION 3.0.2) +project(pub_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 pub_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}/pub_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(publisher src/pub.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(publisher + ${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_pub_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) diff --git a/Task_1/nomeer_ws/src/pub_pkg/package.xml b/Task_1/nomeer_ws/src/pub_pkg/package.xml new file mode 100644 index 0000000..a3e9bde --- /dev/null +++ b/Task_1/nomeer_ws/src/pub_pkg/package.xml @@ -0,0 +1,68 @@ + + + pub_pkg + 0.0.0 + The pub_pkg package + + + + + nomeer + + + + + + TODO + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + catkin + roscpp + rospy + std_msgs + roscpp + rospy + std_msgs + roscpp + rospy + std_msgs + + + + + + + + diff --git a/Task_1/nomeer_ws/src/pub_pkg/scripts/pub.py b/Task_1/nomeer_ws/src/pub_pkg/scripts/pub.py new file mode 100755 index 0000000..8867262 --- /dev/null +++ b/Task_1/nomeer_ws/src/pub_pkg/scripts/pub.py @@ -0,0 +1,20 @@ +#!/usr/bin/python3 + +import rospy +from std_msgs.msg import String + +def Talker(): + rospy.init_node("talker") + pub = rospy.Publisher("msg_topic", String, queue_size=1) + rate = rospy.Rate(1) + + msg = "I am Learning Robotics and ROS" + while not rospy.is_shutdown(): + pub.publish(msg) + rate.sleep() + +if __name__ == "__main__": + try: + Talker() + except rospy.ROSInterruptException: + pass \ No newline at end of file diff --git a/Task_1/nomeer_ws/src/pub_pkg/src/pub.cpp b/Task_1/nomeer_ws/src/pub_pkg/src/pub.cpp new file mode 100755 index 0000000..c92f7db --- /dev/null +++ b/Task_1/nomeer_ws/src/pub_pkg/src/pub.cpp @@ -0,0 +1,27 @@ +#include +#include +#include + +int main(int argc, char** argv) +{ + ros::init(argc, argv, "publisher"); + ros::NodeHandle nh; + ros::Rate rate(1); + + ros::Publisher pub; + pub = nh.advertise("string_topic",1); + + std_msgs::String msg; + std::stringstream ss; + ss << "I am Learning Robotics and ROS"; + msg.data = ss.str(); + + while(ros::ok()) + { + pub.publish(msg); + ros::spinOnce(); + rate.sleep(); + } + + return 0; +} \ No newline at end of file diff --git a/Task_1/nomeer_ws/src/sub_pkg/CMakeLists.txt b/Task_1/nomeer_ws/src/sub_pkg/CMakeLists.txt new file mode 100644 index 0000000..d847b9b --- /dev/null +++ b/Task_1/nomeer_ws/src/sub_pkg/CMakeLists.txt @@ -0,0 +1,206 @@ +cmake_minimum_required(VERSION 3.0.2) +project(sub_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 sub_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}/sub_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_sub_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) diff --git a/Task_1/nomeer_ws/src/sub_pkg/package.xml b/Task_1/nomeer_ws/src/sub_pkg/package.xml new file mode 100644 index 0000000..0b3a8e7 --- /dev/null +++ b/Task_1/nomeer_ws/src/sub_pkg/package.xml @@ -0,0 +1,68 @@ + + + sub_pkg + 0.0.0 + The sub_pkg package + + + + + nomeer + + + + + + TODO + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + catkin + roscpp + rospy + std_msgs + roscpp + rospy + std_msgs + roscpp + rospy + std_msgs + + + + + + + + diff --git a/Task_1/nomeer_ws/src/sub_pkg/scripts/sub.py b/Task_1/nomeer_ws/src/sub_pkg/scripts/sub.py new file mode 100755 index 0000000..dd7cff9 --- /dev/null +++ b/Task_1/nomeer_ws/src/sub_pkg/scripts/sub.py @@ -0,0 +1,17 @@ +#!/usr/bin/python3 + +import rospy +from std_msgs.msg import String + +def Lisener(): + rospy.init_node("lisener") + sub = rospy.Subscriber("msg_topic", String, callback) + rospy.spin() + + +def callback(msg): + rospy.loginfo("%s", msg.data) + + +if __name__ == "__main__": + Lisener() \ No newline at end of file diff --git a/Task_1/nomeer_ws/src/sub_pkg/src/sub.cpp b/Task_1/nomeer_ws/src/sub_pkg/src/sub.cpp new file mode 100755 index 0000000..9d7b915 --- /dev/null +++ b/Task_1/nomeer_ws/src/sub_pkg/src/sub.cpp @@ -0,0 +1,18 @@ +#include +#include + +void callback(const std_msgs::String::ConstPtr& msg) +{ + ROS_INFO("%s", msg->data.c_str()); +} +int main(int argc, char** argv) +{ + ros::init(argc, argv, "subscriber"); + ros::NodeHandle nh; + ros::Subscriber sub; + sub = nh.subscribe("string_topic",1,callback); + ros::spin(); + + + return 0; +} \ No newline at end of file diff --git a/Task_2/nomeer_robot_ws/rosgraph.png b/Task_2/nomeer_robot_ws/rosgraph.png new file mode 100644 index 0000000000000000000000000000000000000000..4da797d7023a23c1f4aa343808fbb85766858bce GIT binary patch literal 55204 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 H1g!lZVRFb_ literal 0 HcmV?d00001 diff --git a/Task_2/nomeer_robot_ws/src/CMakeLists.txt b/Task_2/nomeer_robot_ws/src/CMakeLists.txt new file mode 120000 index 0000000..2016816 --- /dev/null +++ b/Task_2/nomeer_robot_ws/src/CMakeLists.txt @@ -0,0 +1 @@ +/opt/ros/noetic/share/catkin/cmake/toplevel.cmake \ No newline at end of file diff --git a/Task_2/nomeer_robot_ws/src/move_pkg/CMakeLists.txt b/Task_2/nomeer_robot_ws/src/move_pkg/CMakeLists.txt new file mode 100644 index 0000000..e52514f --- /dev/null +++ b/Task_2/nomeer_robot_ws/src/move_pkg/CMakeLists.txt @@ -0,0 +1,218 @@ +cmake_minimum_required(VERSION 3.0.2) +project(move_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 + message_generation +) + +## 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 + Age.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 move_pkg + CATKIN_DEPENDS roscpp rospy std_msgs message_runtime +# 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}/move_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(pub_twist_cpp src/pub_twistC.cpp) +add_executable(sub_odom_cpp src/sub_odomC.cpp) +add_executable(pub_age_node_cpp src/pub_ageC.cpp) +add_executable(sub_age_node_cpp src/sub_ageC.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(pub_twist_cpp + ${catkin_LIBRARIES} + ) + target_link_libraries(sub_odom_cpp + ${catkin_LIBRARIES} + ) + target_link_libraries(pub_age_node_cpp + ${catkin_LIBRARIES} + ) + target_link_libraries(sub_age_node_cpp + ${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_move_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) diff --git a/Task_2/nomeer_robot_ws/src/move_pkg/launch/robot_cpp.launch b/Task_2/nomeer_robot_ws/src/move_pkg/launch/robot_cpp.launch new file mode 100755 index 0000000..ee14a44 --- /dev/null +++ b/Task_2/nomeer_robot_ws/src/move_pkg/launch/robot_cpp.launch @@ -0,0 +1,6 @@ + + + + + + diff --git a/Task_2/nomeer_robot_ws/src/move_pkg/launch/robot_py.launch b/Task_2/nomeer_robot_ws/src/move_pkg/launch/robot_py.launch new file mode 100755 index 0000000..e499ba9 --- /dev/null +++ b/Task_2/nomeer_robot_ws/src/move_pkg/launch/robot_py.launch @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/Task_2/nomeer_robot_ws/src/move_pkg/msg/Age.msg b/Task_2/nomeer_robot_ws/src/move_pkg/msg/Age.msg new file mode 100644 index 0000000..589d725 --- /dev/null +++ b/Task_2/nomeer_robot_ws/src/move_pkg/msg/Age.msg @@ -0,0 +1,3 @@ +int64 days +int64 months +int64 years \ No newline at end of file diff --git a/Task_2/nomeer_robot_ws/src/move_pkg/package.xml b/Task_2/nomeer_robot_ws/src/move_pkg/package.xml new file mode 100644 index 0000000..ae3c00f --- /dev/null +++ b/Task_2/nomeer_robot_ws/src/move_pkg/package.xml @@ -0,0 +1,71 @@ + + + move_pkg + 0.0.0 + The move_pkg package + + + + + nomeer + + + + + + TODO + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + catkin + roscpp + rospy + std_msgs + message_generation + roscpp + rospy + std_msgs + message_runtime + roscpp + rospy + std_msgs + message_runtime + + + + + + + + diff --git a/Task_2/nomeer_robot_ws/src/move_pkg/scripts/pub_age.py b/Task_2/nomeer_robot_ws/src/move_pkg/scripts/pub_age.py new file mode 100755 index 0000000..a7f9961 --- /dev/null +++ b/Task_2/nomeer_robot_ws/src/move_pkg/scripts/pub_age.py @@ -0,0 +1,35 @@ +#!/usr/bin/python3 +''' +use custom message Age.msg to define robot age +publish robot age via /age_topic +''' + +import rospy +from move_pkg.msg import Age + +def pub_age(): + # create pub node + rospy.init_node("pub_age_node") + # create publisher object and publish via /age_topic + pub = rospy.Publisher("age_topic",Age,queue_size=1) + rate = rospy.Rate(1) + + # define robot age + age = Age() + age.days = 17 + age.months = 3 + age.years = 22 + + # publish message + while not rospy.is_shutdown(): + pub.publish(age) + rate.sleep() + + + + +if __name__ == "__main__": + try: + pub_age() + except rospy.ROSInterruptException: + pass diff --git a/Task_2/nomeer_robot_ws/src/move_pkg/scripts/pub_twist.py b/Task_2/nomeer_robot_ws/src/move_pkg/scripts/pub_twist.py new file mode 100755 index 0000000..c3ed841 --- /dev/null +++ b/Task_2/nomeer_robot_ws/src/move_pkg/scripts/pub_twist.py @@ -0,0 +1,38 @@ +#!/usr/bin/python3 + +''' +create node to move turtle1 robot +publish Twist msg via /turtle1/cmd_vel +''' + +import rospy +from geometry_msgs.msg import Twist + + +def pub_twist(): + # create publisher node + rospy.init_node("pub_twist") + + # create publisher object & topic + pub = rospy.Publisher("/turtle1/cmd_vel", Twist, queue_size=1) + + rate = rospy.Rate(1) # publish twish with 1 hz rate + + # define twist msg + twist = Twist() + twist.linear.x = 1 + twist.angular.z = 1 # robot will rotate in circle + + # publish msg + while not rospy.is_shutdown(): + rospy.loginfo("\n") + rospy.loginfo(twist) + pub.publish(twist) + rate.sleep() # ensure that node publish with 1 hz + + +if __name__ == "__main__": + try: + pub_twist() + except rospy.ROSInternalException: + pass diff --git a/Task_2/nomeer_robot_ws/src/move_pkg/scripts/sub_age.py b/Task_2/nomeer_robot_ws/src/move_pkg/scripts/sub_age.py new file mode 100755 index 0000000..e2ab2a8 --- /dev/null +++ b/Task_2/nomeer_robot_ws/src/move_pkg/scripts/sub_age.py @@ -0,0 +1,19 @@ +#!/usr/bin/python3 + +import rospy +from move_pkg.msg import Age + +def callback(age): + rospy.loginfo("\n") + rospy.loginfo(age) + +def sub_age(): + rospy.init_node("sub_age_node") + sub = rospy.Subscriber("age_topic", Age,callback) + rospy.spin() + + + + +if __name__ == "__main__": + sub_age() \ No newline at end of file diff --git a/Task_2/nomeer_robot_ws/src/move_pkg/scripts/sub_odom.py b/Task_2/nomeer_robot_ws/src/move_pkg/scripts/sub_odom.py new file mode 100755 index 0000000..5e3dd95 --- /dev/null +++ b/Task_2/nomeer_robot_ws/src/move_pkg/scripts/sub_odom.py @@ -0,0 +1,25 @@ +#!/usr/bin/python3 + +''' +we need to prinet the odometry of the robot +we will subscribe /odom topic +''' +import rospy +from nav_msgs.msg import Odometry + +def callback(odom): + rospy.loginfo(odom) # print whole odometry data on screen + +def sub_odom(): + # creat subscribe node + rospy.init_node("sub_odom") + + # subscribe /odom topic + rospy.Subscriber("/odom", Odometry,callback) + rospy.spin() + + + + +if __name__ == "__main__": + sub_odom() diff --git a/Task_2/nomeer_robot_ws/src/move_pkg/src/pub_ageC.cpp b/Task_2/nomeer_robot_ws/src/move_pkg/src/pub_ageC.cpp new file mode 100755 index 0000000..177e7fa --- /dev/null +++ b/Task_2/nomeer_robot_ws/src/move_pkg/src/pub_ageC.cpp @@ -0,0 +1,24 @@ +#include +#include + +int main(int argc, char** argv) +{ + ros::init(argc, argv,"pub_age_node_cpp"); + ros::NodeHandle nh; + ros::Publisher pub = nh.advertise("age_topic_cpp",1); + ros::Rate rate(1); + + move_pkg::Age age; + age.days = 17; + age.months = 3; + age.years = 22; + + while (ros::ok()) + { + pub.publish(age); + ros::spinOnce(); + rate.sleep(); + } + + return 0; +} \ No newline at end of file diff --git a/Task_2/nomeer_robot_ws/src/move_pkg/src/pub_twistC.cpp b/Task_2/nomeer_robot_ws/src/move_pkg/src/pub_twistC.cpp new file mode 100755 index 0000000..332042e --- /dev/null +++ b/Task_2/nomeer_robot_ws/src/move_pkg/src/pub_twistC.cpp @@ -0,0 +1,31 @@ +#include +#include + +int main(int argc, char** argv) +{ + // create publisher node + ros::init(argc, argv, "pub_twist_cpp"); + ros::NodeHandle nh; // to create a communication interface between your ROS node and the rest of the ROS network + + // create publisher object + ros::Publisher pub; + // pub object publish via /turtle1/cmd_vel object + pub = nh.advertise("/turtle1/cmd_vel",1); + ros::Rate rate(1); // publish twish with 1 hz rate + + // define twist msg + geometry_msgs::Twist twist; + twist.linear.x = 1; + twist.angular.z = 1; // robot will rotate in circle + + // publish msg + while(ros::ok()) + { + pub.publish(twist); + ros::spinOnce(); // used to handle incoming ROS messages + rate.sleep(); // ensure that node publish with 1 hz + + } + + return 0; +} \ No newline at end of file diff --git a/Task_2/nomeer_robot_ws/src/move_pkg/src/sub_ageC.cpp b/Task_2/nomeer_robot_ws/src/move_pkg/src/sub_ageC.cpp new file mode 100755 index 0000000..98cefb6 --- /dev/null +++ b/Task_2/nomeer_robot_ws/src/move_pkg/src/sub_ageC.cpp @@ -0,0 +1,20 @@ +#include +#include + +void callback(const move_pkg::Age::ConstPtr& age) +{ + float days = age->days; + float months = age->months; + float years = age->years; + ROS_INFO("\ndays = %f\nmonths = %f\ndays = %f\n", days, months, years); +} + +int main(int argc, char** argv) +{ + ros::init(argc, argv, "sub_age_node_cpp"); + ros::NodeHandle nh; + ros::Subscriber sub = nh.subscribe("age_topic_cpp", 1, callback); + ros::spin(); + + return 0; +} \ No newline at end of file diff --git a/Task_2/nomeer_robot_ws/src/move_pkg/src/sub_odomC.cpp b/Task_2/nomeer_robot_ws/src/move_pkg/src/sub_odomC.cpp new file mode 100755 index 0000000..9fa65bd --- /dev/null +++ b/Task_2/nomeer_robot_ws/src/move_pkg/src/sub_odomC.cpp @@ -0,0 +1,47 @@ +#include +#include + +void printOdomData(const nav_msgs::Odometry::ConstPtr& odom) +{ + // print pose and twist from Odometry + double x = odom->pose.pose.position.x; + double y = odom->pose.pose.position.y; + double z = odom->pose.pose.position.z; + ROS_INFO("Position: [%f, %f, %f]", x, y, z); + + double qx = odom->pose.pose.orientation.x; + double qy = odom->pose.pose.orientation.y; + double qz = odom->pose.pose.orientation.z; + double qw = odom->pose.pose.orientation.w; + ROS_INFO("Orientation: [%f, %f, %f, %f]", qx, qy, qz, qw); + + double vx = odom->twist.twist.linear.x; + double vy = odom->twist.twist.linear.y; + double vz = odom->twist.twist.linear.z; + ROS_INFO("Linear Velocity: [%f, %f, %f]", vx, vy, vz); + + double wx = odom->twist.twist.angular.x; + double wy = odom->twist.twist.angular.y; + double wz = odom->twist.twist.angular.z; + ROS_INFO("Angular Velocity: [%f, %f, %f]", wx, wy, wz); +} + +void callback(const nav_msgs::Odometry::ConstPtr& odom) +{ + printOdomData(odom); +} + +int main(int argc, char** argv) +{ + // creat subscribe node + ros::init(argc, argv, "sub_odom_cpp"); + ros::NodeHandle nh; + + // create subscribe object + ros::Subscriber sub; + // subscribe /odom topic + sub = nh.subscribe("/odom",1000, callback); + ros::spin(); + + return 0; +} \ No newline at end of file diff --git a/Task_3/control_nomeer_roboot_ws/rosgraph.png b/Task_3/control_nomeer_roboot_ws/rosgraph.png new file mode 100644 index 0000000000000000000000000000000000000000..34d3c2b52ad3bc1c2943b247485cc307bdb2e082 GIT binary patch literal 30363 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

Ik-Jt<1Bl>QLoBQ%1BrDwqEfIl(Mq2 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 x8sZNJz}IJC%;9>! + + move_turtlesim + 0.0.0 + The move_turtlesim package + + + + + nomeer + + + + + + TODO + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + catkin + roscpp + rospy + std_msgs + roscpp + rospy + std_msgs + roscpp + rospy + std_msgs + + + + + + + + diff --git a/Task_3/control_nomeer_roboot_ws/src/move_turtlesim/scripts/input_user.py b/Task_3/control_nomeer_roboot_ws/src/move_turtlesim/scripts/input_user.py new file mode 100755 index 0000000..f64559e --- /dev/null +++ b/Task_3/control_nomeer_roboot_ws/src/move_turtlesim/scripts/input_user.py @@ -0,0 +1,49 @@ +#!/usr/bin/python3 + +''' +create node to move turtle1 robot +publish Twist msg via /turtle1/cmd_vel +Users can input a linear (x) velocity in the range [2,6] +Users can input an angular (z) velocity [1,3]ew +''' + +import rospy +from geometry_msgs.msg import Twist + + +def pub_twist(): + # create publisher node + rospy.init_node("input_user") + + # create publisher object & topic + pub = rospy.Publisher("/turtle1/cmd_vel", Twist, queue_size=1) + + rate = rospy.Rate(1) # publish twish with 1 hz rate + + # ask user to input linear.x & angular.z + while not rospy.is_shutdown(): + # define twist msg + try: + twist = Twist() + twist.linear.x = float(input("Enter linear.x value [2-6]: ")) + twist.angular.z = float(input("Enter angular.z value [2-6]: ")) + + # ensure that linear.x & angular.z = [2-6] + if 2 <= twist.linear.x <= 6 and 2 <= twist.angular.z <= 6: + break + else: + print("\nPLEASE ENTER VALUE FROM 2 TO 6\n") + except ValueError: # error handling + print("\ninvalid input, try again") + print("PLEASE ENTER VALUE FROM 2 TO 6\n") + + + # publish msg + pub.publish(twist) + + +if __name__ == "__main__": + try: + pub_twist() + except rospy.ROSInternalException: + pass diff --git a/Task_3/control_nomeer_roboot_ws/src/move_turtlesim/scripts/move_turtlesim.py b/Task_3/control_nomeer_roboot_ws/src/move_turtlesim/scripts/move_turtlesim.py new file mode 100755 index 0000000..c3ed841 --- /dev/null +++ b/Task_3/control_nomeer_roboot_ws/src/move_turtlesim/scripts/move_turtlesim.py @@ -0,0 +1,38 @@ +#!/usr/bin/python3 + +''' +create node to move turtle1 robot +publish Twist msg via /turtle1/cmd_vel +''' + +import rospy +from geometry_msgs.msg import Twist + + +def pub_twist(): + # create publisher node + rospy.init_node("pub_twist") + + # create publisher object & topic + pub = rospy.Publisher("/turtle1/cmd_vel", Twist, queue_size=1) + + rate = rospy.Rate(1) # publish twish with 1 hz rate + + # define twist msg + twist = Twist() + twist.linear.x = 1 + twist.angular.z = 1 # robot will rotate in circle + + # publish msg + while not rospy.is_shutdown(): + rospy.loginfo("\n") + rospy.loginfo(twist) + pub.publish(twist) + rate.sleep() # ensure that node publish with 1 hz + + +if __name__ == "__main__": + try: + pub_twist() + except rospy.ROSInternalException: + pass diff --git a/Task_3/control_nomeer_roboot_ws/src/move_turtlesim/src/input_user.cpp b/Task_3/control_nomeer_roboot_ws/src/move_turtlesim/src/input_user.cpp new file mode 100755 index 0000000..aef05f0 --- /dev/null +++ b/Task_3/control_nomeer_roboot_ws/src/move_turtlesim/src/input_user.cpp @@ -0,0 +1,53 @@ +#include +#include +#include + +int main(int argc, char** argv) +{ + // create publisher node + ros::init(argc, argv, "input_user_cpp"); + ros::NodeHandle nh; // to create a communication interface between your ROS node and the rest of the ROS network + + // create publisher object + ros::Publisher pub; + // pub object publish via /turtle1/cmd_vel object + pub = nh.advertise("/turtle1/cmd_vel",1); + ros::Rate rate(5); // publish twish with 1 hz rate + + // define twist object + geometry_msgs::Twist twist; + + // ask user to input linear.x & angular.z + while (ros::ok()) + { + std::cout << "Enter linear.x value [2-6]: " ; + std::cin >> twist.linear.x ; + std::cout << "Enter angular.z value [2-6]: " ; + std::cin >> twist.angular.z ; + + // error handling to check if user enter int value or no + { + // add code in this section + } + + // ensure that linear.x & angular.z = [2-6] + if (twist.linear.x >= 2 && twist.linear.x <= 6 && + twist.angular.z >= 2 && twist.angular.z <= 6) + break; + else + std::cout << "\nPLEASE ENTER VALUE FROM 2 TO 6\n"; + + } + + // to ensure that node will publish msg just one time and prevent node to shutdown before publishing + // rate.sleep return true after node jumped forward in time + while(!rate.sleep()) + { + pub.publish(twist); + ros::spinOnce(); // used to handle incoming ROS messages + } + + + + return 0; +} \ No newline at end of file diff --git a/Task_3/control_nomeer_roboot_ws/src/move_turtlesim/src/move_turtlesim.cpp b/Task_3/control_nomeer_roboot_ws/src/move_turtlesim/src/move_turtlesim.cpp new file mode 100755 index 0000000..332042e --- /dev/null +++ b/Task_3/control_nomeer_roboot_ws/src/move_turtlesim/src/move_turtlesim.cpp @@ -0,0 +1,31 @@ +#include +#include + +int main(int argc, char** argv) +{ + // create publisher node + ros::init(argc, argv, "pub_twist_cpp"); + ros::NodeHandle nh; // to create a communication interface between your ROS node and the rest of the ROS network + + // create publisher object + ros::Publisher pub; + // pub object publish via /turtle1/cmd_vel object + pub = nh.advertise("/turtle1/cmd_vel",1); + ros::Rate rate(1); // publish twish with 1 hz rate + + // define twist msg + geometry_msgs::Twist twist; + twist.linear.x = 1; + twist.angular.z = 1; // robot will rotate in circle + + // publish msg + while(ros::ok()) + { + pub.publish(twist); + ros::spinOnce(); // used to handle incoming ROS messages + rate.sleep(); // ensure that node publish with 1 hz + + } + + return 0; +} \ No newline at end of file diff --git a/Task_4/nomeer_ws/rosgraph.png b/Task_4/nomeer_ws/rosgraph.png new file mode 100644 index 0000000000000000000000000000000000000000..0cbc27d2ba456049df340d0a6bcb17dcc7ec61e9 GIT binary patch literal 33995 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 IU9#i<0BN$@6aWAK literal 0 HcmV?d00001 diff --git a/Task_4/nomeer_ws/src/CMakeLists.txt b/Task_4/nomeer_ws/src/CMakeLists.txt new file mode 120000 index 0000000..2016816 --- /dev/null +++ b/Task_4/nomeer_ws/src/CMakeLists.txt @@ -0,0 +1 @@ +/opt/ros/noetic/share/catkin/cmake/toplevel.cmake \ No newline at end of file diff --git a/Task_4/nomeer_ws/src/cmplx_num_pkg/CMakeLists.txt b/Task_4/nomeer_ws/src/cmplx_num_pkg/CMakeLists.txt new file mode 100644 index 0000000..d1ad538 --- /dev/null +++ b/Task_4/nomeer_ws/src/cmplx_num_pkg/CMakeLists.txt @@ -0,0 +1,210 @@ +cmake_minimum_required(VERSION 3.0.2) +project(cmplx_num_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 + message_generation +) + +## 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 + cmplx.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 cmplx_num_pkg + CATKIN_DEPENDS roscpp rospy std_msgs message_runtime +# 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}/cmplx_num_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(pub_cmplx_cpp src/pub_cmplx.cpp) +add_executable(sub_cmplx_cpp src/sub_cmplx.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(pub_cmplx_cpp + ${catkin_LIBRARIES} + ) + target_link_libraries(sub_cmplx_cpp + ${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_cmplx_num_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) diff --git a/Task_4/nomeer_ws/src/cmplx_num_pkg/msg/cmplx.msg b/Task_4/nomeer_ws/src/cmplx_num_pkg/msg/cmplx.msg new file mode 100755 index 0000000..8316ea0 --- /dev/null +++ b/Task_4/nomeer_ws/src/cmplx_num_pkg/msg/cmplx.msg @@ -0,0 +1,2 @@ +float64 real +float64 imaginary diff --git a/Task_4/nomeer_ws/src/cmplx_num_pkg/package.xml b/Task_4/nomeer_ws/src/cmplx_num_pkg/package.xml new file mode 100644 index 0000000..a2853cb --- /dev/null +++ b/Task_4/nomeer_ws/src/cmplx_num_pkg/package.xml @@ -0,0 +1,71 @@ + + + cmplx_num_pkg + 0.0.0 + The cmplx_num_pkg package + + + + + nomeer + + + + + + TODO + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + catkin + roscpp + rospy + std_msgs + message_generation + roscpp + rospy + std_msgs + message_runtime + roscpp + rospy + std_msgs + message_runtime + + + + + + + + diff --git a/Task_4/nomeer_ws/src/cmplx_num_pkg/scripts/pub_cmplx.py b/Task_4/nomeer_ws/src/cmplx_num_pkg/scripts/pub_cmplx.py new file mode 100755 index 0000000..3166849 --- /dev/null +++ b/Task_4/nomeer_ws/src/cmplx_num_pkg/scripts/pub_cmplx.py @@ -0,0 +1,30 @@ +#!/usr/bin/python3 + +import rospy +from cmplx_num_pkg.msg import cmplx +import random + +def pub_cmplx(): + # node & topic + rospy.init_node("pub_cmplx") + pub = rospy.Publisher("cmplx_topic", cmplx, queue_size=1) + rate = rospy.Rate(1) + + # message + cmplxNum = cmplx() + + # publishing + while not rospy.is_shutdown(): + cmplxNum.real = round(random.random() * 100,3) + cmplxNum.imaginary = round(random.random() * 100,3) + + pub.publish(cmplxNum) + rate.sleep() + + + +if __name__ == "__main__": + try: + pub_cmplx() + except rospy.ROSInterruptException: + pass diff --git a/Task_4/nomeer_ws/src/cmplx_num_pkg/scripts/sub_cmplx.py b/Task_4/nomeer_ws/src/cmplx_num_pkg/scripts/sub_cmplx.py new file mode 100755 index 0000000..569ce13 --- /dev/null +++ b/Task_4/nomeer_ws/src/cmplx_num_pkg/scripts/sub_cmplx.py @@ -0,0 +1,16 @@ +#!/usr/bin/python3 + +import rospy +from cmplx_num_pkg.msg import cmplx + + +def callback(cmplx): + rospy.loginfo("(%.3fi + %.3fj)", cmplx.real, cmplx.imaginary) +def sub_cmplx(): + rospy.init_node("sub_cmplx") + sub = rospy.Subscriber("cmplx_topic", cmplx, callback) + rospy.spin() + + +if __name__ == "__main__": + sub_cmplx() \ No newline at end of file diff --git a/Task_4/nomeer_ws/src/cmplx_num_pkg/src/pub_cmplx.cpp b/Task_4/nomeer_ws/src/cmplx_num_pkg/src/pub_cmplx.cpp new file mode 100755 index 0000000..01d1985 --- /dev/null +++ b/Task_4/nomeer_ws/src/cmplx_num_pkg/src/pub_cmplx.cpp @@ -0,0 +1,27 @@ +#include +#include +#include +int main(int argc, char** argv) +{ + // node & topic + ros::init(argc, argv, "pub_cmplx_cpp"); + ros::NodeHandle nh; + ros::Publisher pub = nh.advertise("cmplx_topic_cpp",1); + ros::Rate rate(1); + + // message + cmplx_num_pkg::cmplx cmplxNum; + + while (ros::ok()) + { + srand(time(0)); + cmplxNum.real = ( (float)rand() / RAND_MAX) * 100; + cmplxNum.imaginary = ( (float)rand() / RAND_MAX) * 100; + pub.publish(cmplxNum); + ros::spinOnce(); + rate.sleep(); + } + + + return 0; +} \ No newline at end of file diff --git a/Task_4/nomeer_ws/src/cmplx_num_pkg/src/sub_cmplx.cpp b/Task_4/nomeer_ws/src/cmplx_num_pkg/src/sub_cmplx.cpp new file mode 100755 index 0000000..dff2fdd --- /dev/null +++ b/Task_4/nomeer_ws/src/cmplx_num_pkg/src/sub_cmplx.cpp @@ -0,0 +1,18 @@ +#include +#include + + +void callback(const cmplx_num_pkg::cmplx::ConstPtr& cmplxNum) +{ + ROS_INFO("(%.3fi + %.3fj)", cmplxNum->real, cmplxNum->imaginary); + +} +int main(int argc, char** argv) +{ + ros::init(argc, argv, "sub_cmplx_cpp"); + ros::NodeHandle nh; + ros::Subscriber sub = nh.subscribe("cmplx_topic_cpp",1,callback); + ros::spin(); + + return 0; +} \ No newline at end of file diff --git a/Task_4/nomeer_ws/src/count_pkg/CMakeLists.txt b/Task_4/nomeer_ws/src/count_pkg/CMakeLists.txt new file mode 100644 index 0000000..2fdd0d3 --- /dev/null +++ b/Task_4/nomeer_ws/src/count_pkg/CMakeLists.txt @@ -0,0 +1,211 @@ +cmake_minimum_required(VERSION 3.0.2) +project(count_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 count_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}/count_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(pub_count_cpp src/pub_count.cpp) +add_executable(sub_count_cpp src/sub_count.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(pub_count_cpp + ${catkin_LIBRARIES} + ) + target_link_libraries(sub_count_cpp + ${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_count_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) diff --git a/Task_4/nomeer_ws/src/count_pkg/package.xml b/Task_4/nomeer_ws/src/count_pkg/package.xml new file mode 100644 index 0000000..7ab3bc9 --- /dev/null +++ b/Task_4/nomeer_ws/src/count_pkg/package.xml @@ -0,0 +1,68 @@ + + + count_pkg + 0.0.0 + The count_pkg package + + + + + nomeer + + + + + + TODO + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + catkin + roscpp + rospy + std_msgs + roscpp + rospy + std_msgs + roscpp + rospy + std_msgs + + + + + + + + diff --git a/Task_4/nomeer_ws/src/count_pkg/scripts/pub_count.py b/Task_4/nomeer_ws/src/count_pkg/scripts/pub_count.py new file mode 100755 index 0000000..ba1df62 --- /dev/null +++ b/Task_4/nomeer_ws/src/count_pkg/scripts/pub_count.py @@ -0,0 +1,35 @@ +#!/usr/bin/python3 + +''' +count from 0 until user input ctrl+c +we need to publish count msg +''' + +import rospy +from std_msgs.msg import Int32 + + +def pub_count(): + # create publisher node + rospy.init_node("pub_count") + + # create publisher object & topic + pub = rospy.Publisher("count_topic", Int32, queue_size=1) + + rate = rospy.Rate(1) # publish count with 1 hz rate + + # define count msg + count = 0 + + # publish msg + while not rospy.is_shutdown(): + rospy.loginfo(count) + pub.publish(count) + rate.sleep() # ensure that node publish with 1 hz + count +=1 + +if __name__ == "__main__": + try: + pub_count() + except rospy.ROSInternalException: + pass diff --git a/Task_4/nomeer_ws/src/count_pkg/scripts/sub_count.py b/Task_4/nomeer_ws/src/count_pkg/scripts/sub_count.py new file mode 100755 index 0000000..36b422c --- /dev/null +++ b/Task_4/nomeer_ws/src/count_pkg/scripts/sub_count.py @@ -0,0 +1,17 @@ +#!/usr/bin/python3 + +import rospy +from std_msgs.msg import Int32 + +def callback(count): + rospy.loginfo("\n") + rospy.loginfo(count) + +def sub_age(): + rospy.init_node("sub_count") + sub = rospy.Subscriber("count_topic", Int32,callback) + rospy.spin() + + +if __name__ == "__main__": + sub_age() \ No newline at end of file diff --git a/Task_4/nomeer_ws/src/count_pkg/src/pub_count.cpp b/Task_4/nomeer_ws/src/count_pkg/src/pub_count.cpp new file mode 100755 index 0000000..0d623ba --- /dev/null +++ b/Task_4/nomeer_ws/src/count_pkg/src/pub_count.cpp @@ -0,0 +1,23 @@ +#include +#include + +int main(int argc, char** argv) +{ + ros::init(argc, argv,"pub_count_cpp"); + ros::NodeHandle nh; + ros::Publisher pub = nh.advertise("count_topic_cpp",1); + ros::Rate rate(1); + + std_msgs::Int32 count; + count.data = 0; + + while (ros::ok()) + { + pub.publish(count); + ros::spinOnce(); + rate.sleep(); + ++count.data; + } + + return 0; +} \ No newline at end of file diff --git a/Task_4/nomeer_ws/src/count_pkg/src/sub_count.cpp b/Task_4/nomeer_ws/src/count_pkg/src/sub_count.cpp new file mode 100755 index 0000000..6c1d23d --- /dev/null +++ b/Task_4/nomeer_ws/src/count_pkg/src/sub_count.cpp @@ -0,0 +1,17 @@ +#include +#include + +void callback(const std_msgs::Int32::ConstPtr& count) +{ + ROS_INFO("count: %d", count->data); +} + +int main(int argc, char** argv) +{ + ros::init(argc, argv, "sub_count_cpp"); + ros::NodeHandle nh; + ros::Subscriber sub = nh.subscribe("count_topic_cpp", 1, callback); + ros::spin(); + + return 0; +} \ No newline at end of file diff --git a/Task_4/nomeer_ws/src/n_words_pkg/CMakeLists.txt b/Task_4/nomeer_ws/src/n_words_pkg/CMakeLists.txt new file mode 100644 index 0000000..8062f92 --- /dev/null +++ b/Task_4/nomeer_ws/src/n_words_pkg/CMakeLists.txt @@ -0,0 +1,206 @@ +cmake_minimum_required(VERSION 3.0.2) +project(n_words_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 + message_generation +) + +## 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 + count_words.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 n_of_words_pkg + CATKIN_DEPENDS roscpp rospy std_msgs message_runtime +) + +########### +## 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}/n_of_words_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(${PROJECT_NAME}_node src/n_of_words_pkg_node.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(${PROJECT_NAME}_node +# ${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_n_of_words_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) diff --git a/Task_4/nomeer_ws/src/n_words_pkg/package.xml b/Task_4/nomeer_ws/src/n_words_pkg/package.xml new file mode 100644 index 0000000..dd6ba8d --- /dev/null +++ b/Task_4/nomeer_ws/src/n_words_pkg/package.xml @@ -0,0 +1,71 @@ + + + n_words_pkg + 0.0.0 + The n_words_pkg package + + + + + nomeer + + + + + + TODO + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + catkin + roscpp + rospy + std_msgs + message_generation + roscpp + rospy + std_msgs + message_runtime + roscpp + rospy + std_msgs + message_runtime + + + + + + + + diff --git a/Task_4/nomeer_ws/src/n_words_pkg/scripts/client.py b/Task_4/nomeer_ws/src/n_words_pkg/scripts/client.py new file mode 100755 index 0000000..a9f41fa --- /dev/null +++ b/Task_4/nomeer_ws/src/n_words_pkg/scripts/client.py @@ -0,0 +1,33 @@ +#!/usr/bin/python3 + +import sys +import rospy +from n_words_pkg.srv import count_words + +# Define a function that acts as the client +def pub_words(words): + # Wait until the service is available + rospy.wait_for_service("countWords") # Name of the service + + try: + # Create a proxy to the service + get_words = rospy.ServiceProxy("countWords", count_words) + + # Call the service and get the response + resp = get_words(words) + # return string from te response + return resp.count + except rospy.ServiceException as e: + print("Service Call failed %s", e) + + +def usage(): + return sys.argv[0] + + +if __name__ == "__main__": + words = sys.argv[0] + print("The sentence you entered: %s", words) + count = pub_words(words) + print("Number of Words: %d") + \ No newline at end of file diff --git a/Task_4/nomeer_ws/src/n_words_pkg/scripts/server.py b/Task_4/nomeer_ws/src/n_words_pkg/scripts/server.py new file mode 100755 index 0000000..be6a36e --- /dev/null +++ b/Task_4/nomeer_ws/src/n_words_pkg/scripts/server.py @@ -0,0 +1,23 @@ +#!/usr/bin/python3 + +import rospy +from n_words_pkg.srv import count_words, count_wordsRequest, count_wordsResponse + +def num_of_words(req): + req.count = len(req.split(' ')) + print("Number of Words is: %d", req.count) + return count_wordsResponse(req.count) + +def count_words_service(): + # Initialize the service node + rospy.init_node("count_words_service") + # Create the service with the name "count_words_service" and the function to handle the request + s = rospy.Service("countWords", count_words, num_of_words) + # Print a message indicating that the server is ready + print("Ready to count number of words") + # Spin to keep the node running + rospy.spin() + +if __name__ == "__main__": + # Call the server function to start the server node + count_words_service() \ No newline at end of file diff --git a/Task_4/nomeer_ws/src/n_words_pkg/src/client.cpp b/Task_4/nomeer_ws/src/n_words_pkg/src/client.cpp new file mode 100755 index 0000000..789ec54 --- /dev/null +++ b/Task_4/nomeer_ws/src/n_words_pkg/src/client.cpp @@ -0,0 +1 @@ +// The code is being prepared \ No newline at end of file diff --git a/Task_4/nomeer_ws/src/n_words_pkg/src/server.cpp b/Task_4/nomeer_ws/src/n_words_pkg/src/server.cpp new file mode 100755 index 0000000..789ec54 --- /dev/null +++ b/Task_4/nomeer_ws/src/n_words_pkg/src/server.cpp @@ -0,0 +1 @@ +// The code is being prepared \ No newline at end of file diff --git a/Task_4/nomeer_ws/src/n_words_pkg/srv/count_words.srv b/Task_4/nomeer_ws/src/n_words_pkg/srv/count_words.srv new file mode 100755 index 0000000..940b837 --- /dev/null +++ b/Task_4/nomeer_ws/src/n_words_pkg/srv/count_words.srv @@ -0,0 +1,5 @@ +string words + +--- + +int32 count \ No newline at end of file diff --git a/Task_5/src/CMakeLists.txt b/Task_5/src/CMakeLists.txt new file mode 120000 index 0000000..2016816 --- /dev/null +++ b/Task_5/src/CMakeLists.txt @@ -0,0 +1 @@ +/opt/ros/noetic/share/catkin/cmake/toplevel.cmake \ No newline at end of file diff --git a/Task_5/src/nomeer_gazebo_pkg/CMakeLists.txt b/Task_5/src/nomeer_gazebo_pkg/CMakeLists.txt new file mode 100644 index 0000000..1c6450f --- /dev/null +++ b/Task_5/src/nomeer_gazebo_pkg/CMakeLists.txt @@ -0,0 +1,206 @@ +cmake_minimum_required(VERSION 3.0.2) +project(nomeer_gazebo_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 nomeer_gazebo_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}/nomeer_gazebo_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(${PROJECT_NAME}_node src/nomeer_gazebo_pkg_node.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(${PROJECT_NAME}_node +# ${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_nomeer_gazebo_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) diff --git a/Task_5/src/nomeer_gazebo_pkg/default_gzclient_camera(1)-2023-02-11T20_32_22.012985.jpg b/Task_5/src/nomeer_gazebo_pkg/default_gzclient_camera(1)-2023-02-11T20_32_22.012985.jpg new file mode 100644 index 0000000000000000000000000000000000000000..61beb48b791755b46e2717b09ec38963196a970b GIT binary patch literal 77805 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 a&fd+;HAVEv&-PINUtqUii80ZiUi=SuQw#F| literal 0 HcmV?d00001 diff --git a/Task_5/src/nomeer_gazebo_pkg/model/building_model/model.config b/Task_5/src/nomeer_gazebo_pkg/model/building_model/model.config new file mode 100644 index 0000000..d615120 --- /dev/null +++ b/Task_5/src/nomeer_gazebo_pkg/model/building_model/model.config @@ -0,0 +1,11 @@ + + + building_model + 1.0 + model.sdf + + + + + + diff --git a/Task_5/src/nomeer_gazebo_pkg/model/building_model/model.sdf b/Task_5/src/nomeer_gazebo_pkg/model/building_model/model.sdf new file mode 100644 index 0000000..37ee2bf --- /dev/null +++ b/Task_5/src/nomeer_gazebo_pkg/model/building_model/model.sdf @@ -0,0 +1,1138 @@ + + + + -2.415 -2.70167 0 0 -0 0 + + + + + 2.5 0.15 2.5 + + + 0 0 1.25 0 -0 0 + + + 0 0 1.25 0 -0 0 + + + 2.5 0.15 2.5 + + + + + 1 1 1 1 + + + 0 + + + 8.75 2.65167 0 0 -0 3.14159 + + + + + + 2 0.15 2.5 + + + 0 0 1.25 0 -0 0 + + + 0 0 1.25 0 -0 0 + + + 2 0.15 2.5 + + + + + 1 1 1 1 + + + 0 + + + 7.575 1.72667 0 0 -0 -1.5708 + + + + + + 1.75 0.15 2.5 + + + 0 0 1.25 0 -0 0 + + + 0 0 1.25 0 -0 0 + + + 1.75 0.15 2.5 + + + + + 1 1 1 1 + + + 0 + + + 6.775 0.801673 0 0 -0 3.14159 + + + + + + 1.75 0.15 2.5 + + + 0 0 1.25 0 -0 0 + + + 0 0 1.25 0 -0 0 + + + 1.75 0.15 2.5 + + + + + 1 1 1 1 + + + 0 + + + 5.975 0.001673 0 0 -0 -1.5708 + + + + + + 2.25 0.15 2.5 + + + 0 0 1.25 0 -0 0 + + + 0 0 1.25 0 -0 0 + + + 2.25 0.15 2.5 + + + + + 1 1 1 1 + + + 0 + + + 7.025 -0.798327 0 0 -0 0 + + + + + + 0.75 0.15 2.5 + + + 0 0 1.25 0 -0 0 + + + 0 0 1.25 0 -0 0 + + + 0.75 0.15 2.5 + + + + + 1 1 1 1 + + + 0 + + + 8.075 -1.09833 0 0 -0 -1.5708 + + + + + + 3.75 0.15 2.5 + + + 0 0 1.25 0 -0 0 + + + 0 0 1.25 0 -0 0 + + + 3.75 0.15 2.5 + + + + + 1 1 1 1 + + + 0 + + + 6.275 -1.39833 0 0 -0 3.14159 + + + + + + 2.25 0.15 2.5 + + + 0 0 1.25 0 -0 0 + + + 0 0 1.25 0 -0 0 + + + 2.25 0.15 2.5 + + + + + 1 1 1 1 + + + 0 + + + 4.475 -0.348327 0 0 -0 1.5708 + + + + + + 1.5 0.15 2.5 + + + 0 0 1.25 0 -0 0 + + + 0 0 1.25 0 -0 0 + + + 1.5 0.15 2.5 + + + + + 1 1 1 1 + + + 0 + + + 4.475 1.37667 0 0 -0 1.5708 + + + + + + 1.5 0.15 2.5 + + + 0 0 1.25 0 -0 0 + + + 0 0 1.25 0 -0 0 + + + 1.5 0.15 2.5 + + + + + 1 1 1 1 + + + 0 + + + 5.15 2.05167 0 0 -0 0 + + + + + + 1 0.15 2.5 + + + 0 0 1.25 0 -0 0 + + + 0 0 1.25 0 -0 0 + + + 1 0.15 2.5 + + + + + 1 1 1 1 + + + 0 + + + 5.825 2.47667 0 0 -0 1.5708 + + + + + + 4.25 0.15 2.5 + + + 0 0 1.25 0 -0 0 + + + 0 0 1.25 0 -0 0 + + + 4.25 0.15 2.5 + + + + + 1 1 1 1 + + + 0 + + + 3.775 2.90167 0 0 -0 3.14159 + + + + + + 2.5 0.15 2.5 + + + 0 0 1.25 0 -0 0 + + + 0 0 1.25 0 -0 0 + + + 2.5 0.15 2.5 + + + + + 1 1 1 1 + + + 0 + + + 1.725 1.72667 0 0 -0 -1.5708 + + + + + + 2 0.15 2.5 + + + 0 0 1.25 0 -0 0 + + + 0 0 1.25 0 -0 0 + + + 2 0.15 2.5 + + + + + 1 1 1 1 + + + 0 + + + 0.8 0.551673 0 0 -0 3.14159 + + + + + + 2.75 0.15 2.5 + + + 0 0 1.25 0 -0 0 + + + 0 0 1.25 0 -0 0 + + + 2.75 0.15 2.5 + + + + + 1 1 1 1 + + + 0 + + + -1.425 0.551673 0 0 -0 3.14159 + + + + + + 2.25 0.15 2.5 + + + 0 0 1.25 0 -0 0 + + + 0 0 1.25 0 -0 0 + + + 2.25 0.15 2.5 + + + + + 1 1 1 1 + + + 0 + + + -3.775 0.551673 0 0 -0 3.14159 + + + + + + 3.5 0.15 2.5 + + + 0 0 1.25 0 -0 0 + + + 0 0 1.25 0 -0 0 + + + 3.5 0.15 2.5 + + + + + 1 1 1 1 + + + 0 + + + -4.825 2.22667 0 0 -0 1.5708 + + + + + + 5.25 0.15 2.5 + + + 0 0 1.25 0 -0 0 + + + 0 0 1.25 0 -0 0 + + + 5.25 0.15 2.5 + + + + + 1 1 1 1 + + + 0 + + + -7.375 3.90167 0 0 -0 3.14159 + + + + + + 4.75 0.15 2.5 + + + 0 0 1.25 0 -0 0 + + + 0 0 1.25 0 -0 0 + + + 4.75 0.15 2.5 + + + + + 1 1 1 1 + + + 0 + + + -9.925 1.60167 0 0 -0 -1.5708 + + + + + + 3.25 0.15 2.5 + + + 0 0 1.25 0 -0 0 + + + 0 0 1.25 0 -0 0 + + + 3.25 0.15 2.5 + + + + + 1 1 1 1 + + + 0 + + + -9.925 -2.24833 0 0 -0 -1.5708 + + + + + + 5 0.15 2.5 + + + 0 0 1.25 0 -0 0 + + + 0 0 1.25 0 -0 0 + + + 5 0.15 2.5 + + + + + 1 1 1 1 + + + 0 + + + -7.5 -3.79833 0 0 -0 0 + + + + + + 2 0.15 2.5 + + + 0 0 1.25 0 -0 0 + + + 0 0 1.25 0 -0 0 + + + 2 0.15 2.5 + + + + + 1 1 1 1 + + + 0 + + + -5.075 -2.87333 0 0 -0 1.5708 + + + + + + 2.75 0.15 2.5 + + + 0 0 1.25 0 -0 0 + + + 0 0 1.25 0 -0 0 + + + 2.75 0.15 2.5 + + + + + 1 1 1 1 + + + 0 + + + -6.375 -1.94833 0 0 -0 3.14159 + + + + + + 2 0.15 2.5 + + + 0 0 1.25 0 -0 0 + + + 0 0 1.25 0 -0 0 + + + 2 0.15 2.5 + + + + + 1 1 1 1 + + + 0 + + + -7.675 -1.02333 0 0 -0 1.5708 + + + + + + 1 0.15 2.5 + + + 0 0 1.25 0 -0 0 + + + 0 0 1.25 0 -0 0 + + + 1 0.15 2.5 + + + + + 1 1 1 1 + + + 0 + + + -7.25 -0.098327 0 0 -0 0 + + + + + + 1.5 0.15 2.5 + + + 0 0 1.25 0 -0 0 + + + 0 0 1.25 0 -0 0 + + + 1.5 0.15 2.5 + + + + + 1 1 1 1 + + + 0 + + + -6.4875 -0.682894 0 0 -0 -1.0472 + + + + + + 1.75 0.15 2.5 + + + 0 0 1.25 0 -0 0 + + + 0 0 1.25 0 -0 0 + + + 1.75 0.15 2.5 + + + + + 1 1 1 1 + + + 0 + + + -5.35 -1.26746 0 0 -0 0 + + + + + + 1.25 0.15 2.5 + + + 0 0 1.25 0 -0 0 + + + 0 0 1.25 0 -0 0 + + + 1.25 0.15 2.5 + + + + + 1 1 1 1 + + + 0 + + + 0.829393 -3.35167 0 0 -0 1.5708 + + + + + + 9 0.15 2.5 + + + 0 0 1.25 0 -0 0 + + + 0 0 1.25 0 -0 0 + + + 9 0.15 2.5 + + + + + 1 1 1 1 + + + 0 + + + 2.15 -3.89833 0 0 -0 3.14159 + + + + + + 1.25 0.15 2.5 + + + 0 0 1.25 0 -0 0 + + + 0 0 1.25 0 -0 0 + + + 1.25 0.15 2.5 + + + + + 1 1 1 1 + + + 0 + + + -2.24458 -0.010492 0 0 -0 -1.309 + + + + + + 1.5 0.15 2.5 + + + 0 0 1.25 0 -0 0 + + + 0 0 1.25 0 -0 0 + + + 1.5 0.15 2.5 + + + + + 1 1 1 1 + + + 0 + + + -9.24489 1.98081 0 0 -0 0 + + + + + + 1.25 0.15 2.5 + + + 0 0 1.25 0 -0 0 + + + 0 0 1.25 0 -0 0 + + + 1.25 0.15 2.5 + + + + + 1 1 1 1 + + + 0 + + + -8.18098 1.5919 0 0 -0 -0.785398 + + + + + + 1.5 0.15 2.5 + + + 0 0 1.25 0 -0 0 + + + 0 0 1.25 0 -0 0 + + + 1.5 0.15 2.5 + + + + + 1 1 1 1 + + + 0 + + + -8.69261 -3.07855 0 0 -0 1.5708 + + + + + + 1.75 0.15 2.5 + + + 0 0 1.25 0 -0 0 + + + 0 0 1.25 0 -0 0 + + + 1.75 0.15 2.5 + + + + + 1 1 1 1 + + + 0 + + + -5.76845 2.44633 0 0 -0 3.14159 + + + + + + 2.25 0.15 2.5 + + + 0 0 1.25 0 -0 0 + + + 0 0 1.25 0 -0 0 + + + 2.25 0.15 2.5 + + + + + 1 1 1 1 + + + 0 + + + 3.49611 -0.723673 0 0 -0 -2.61799 + + + + + + 1.5 0.15 2.5 + + + 0 0 1.25 0 -0 0 + + + 0 0 1.25 0 -0 0 + + + 1.5 0.15 2.5 + + + + + 1 1 1 1 + + + 0 + + + 6.575 -3.22333 0 0 -0 1.5708 + + + + + + 3.5 0.15 2.5 + + + 0 0 1.25 0 -0 0 + + + 0 0 1.25 0 -0 0 + + + 3.5 0.15 2.5 + + + + + 1 1 1 1 + + + 0 + + + 8.25 -2.54833 0 0 -0 0 + + + + + + 3 0.15 2.5 + + + 0 0 1.25 0 -0 0 + + + 0 0 1.25 0 -0 0 + + + 3 0.15 2.5 + + + + + 1 1 1 1 + + + 0 + + + 9.925 -1.12333 0 0 -0 1.5708 + + + + + + 2.5 0.15 2.5 + + + 0 0 1.25 0 -0 0 + + + 0 0 1.25 0 -0 0 + + + 2.5 0.15 2.5 + + + + + 1 1 1 1 + + + 0 + + + 9.925 1.47667 0 0 -0 1.5708 + + 1 + + diff --git a/Task_5/src/nomeer_gazebo_pkg/model/nomeer_model/model.config b/Task_5/src/nomeer_gazebo_pkg/model/nomeer_model/model.config new file mode 100644 index 0000000..9908add --- /dev/null +++ b/Task_5/src/nomeer_gazebo_pkg/model/nomeer_model/model.config @@ -0,0 +1,11 @@ + + + nomeer_model + 1.0 + model.sdf + + + + + + diff --git a/Task_5/src/nomeer_gazebo_pkg/model/nomeer_model/model.sdf b/Task_5/src/nomeer_gazebo_pkg/model/nomeer_model/model.sdf new file mode 100644 index 0000000..ad1377c --- /dev/null +++ b/Task_5/src/nomeer_gazebo_pkg/model/nomeer_model/model.sdf @@ -0,0 +1,745 @@ + + + + + + 1 + + 0.166667 + 0 + 0 + 0.166667 + 0 + 0.166667 + + 0 0 0 0 -0 0 + + -0.473319 0.050453 -0.208 0 -0 0 + 1 + 0 + 0 + 0 + + 0 0 0 0 -0 0 + + + 1 0.6 0.2 + + + + 1 + + + __default__ + + 0.3 0.3 0.3 1 + 0.7 0.7 0.7 1 + 0.01 0.01 0.01 1 + 0 0 0 1 + + 0 + 1 + + + 0 + 10 + 0 0 0 0 -0 0 + + + 1 0.6 0.2 + + + + + + 1 + 1 + 0 0 0 + 0 + 0 + + + 1 + 0 + 0 + 1 + + 0 + + + + + 0 + 1e+06 + + + 0 + 1 + 1 + + 0 + 0.2 + 1e+13 + 1 + 0.01 + 0 + + + 1 + -0.01 + 0 + 0.2 + 1e+13 + 1 + + + + + + + + 1 + + 0.145833 + 0 + 0 + 0.145833 + 0 + 0.125 + + 0 0 0 0 -0 0 + + -0.773319 0.375454 -0.208 0 -0 0 + 1 + 0 + 0 + 0 + + 0 0 0 1.5708 -0 0 + + + 0.2 + 0.05 + + + + 1 + + + __default__ + + 0.3 0.3 0.3 1 + 0.7 0.7 0.7 1 + 0.01 0.01 0.01 1 + 0 0 0 1 + + 0 + 1 + + + 0 + 10 + 0 0 0 0 -0 0 + + + 0.2 + 0.05 + + + + + + 1 + 1 + 0 0 0 + 0 + 0 + + + 1 + 0 + 0 + 1 + + 0 + + + + + 0 + 1e+06 + + + 0 + 1 + 1 + + 0 + 0.2 + 1e+13 + 1 + 0.01 + 0 + + + 1 + -0.01 + 0 + 0.2 + 1e+13 + 1 + + + + + + + + 1 + + 0.145833 + 0 + 0 + 0.145833 + 0 + 0.125 + + 0 0 0 0 -0 0 + + -0.173319 -0.274548 -0.208 0 -0 0 + 1 + 0 + 0 + 0 + + 0 0 0 1.5708 -0 0 + + + 0.2 + 0.05 + + + + 1 + + + __default__ + + 0.3 0.3 0.3 1 + 0.7 0.7 0.7 1 + 0.01 0.01 0.01 1 + 0 0 0 1 + + 0 + 1 + + + 0 + 10 + 0 0 0 0 -0 0 + + + 0.2 + 0.05 + + + + + + 1 + 1 + 0 0 0 + 0 + 0 + + + 1 + 0 + 0 + 1 + + 0 + + + + + 0 + 1e+06 + + + 0 + 1 + 1 + + 0 + 0.2 + 1e+13 + 1 + 0.01 + 0 + + + 1 + -0.01 + 0 + 0.2 + 1e+13 + 1 + + + + + + + + 1 + + 0.145833 + 0 + 0 + 0.145833 + 0 + 0.125 + + 0 0 0 0 -0 0 + + -0.173319 0.375454 -0.208 0 -0 0 + 1 + 0 + 0 + 0 + + 0 0 0 1.5708 -0 0 + + + 0.2 + 0.05 + + + + 1 + + + __default__ + + 0.3 0.3 0.3 1 + 0.7 0.7 0.7 1 + 0.01 0.01 0.01 1 + 0 0 0 1 + + 0 + 1 + + + 0 + 10 + 0 0 0 0 -0 0 + + + 0.2 + 0.05 + + + + + + 1 + 1 + 0 0 0 + 0 + 0 + + + 1 + 0 + 0 + 1 + + 0 + + + + + 0 + 1e+06 + + + 0 + 1 + 1 + + 0 + 0.2 + 1e+13 + 1 + 0.01 + 0 + + + 1 + -0.01 + 0 + 0.2 + 1e+13 + 1 + + + + + + + + 1 + + 0.145833 + 0 + 0 + 0.145833 + 0 + 0.125 + + 0 0 0 0 -0 0 + + -0.773319 -0.274548 -0.208 0 -0 0 + 1 + 0 + 0 + 0 + + 0 0 0 1.5708 -0 0 + + + 0.2 + 0.05 + + + + 1 + + + __default__ + + 0.3 0.3 0.3 1 + 0.7 0.7 0.7 1 + 0.01 0.01 0.01 1 + 0 0 0 1 + + 0 + 1 + + + 0 + 10 + 0 0 0 0 -0 0 + + + 0.2 + 0.05 + + + + + + 1 + 1 + 0 0 0 + 0 + 0 + + + 1 + 0 + 0 + 1 + + 0 + + + + + 0 + 1e+06 + + + 0 + 1 + 1 + + 0 + 0.2 + 1e+13 + 1 + 0.01 + 0 + + + 1 + -0.01 + 0 + 0.2 + 1e+13 + 1 + + + + + + + + 1 + + 0.166667 + 0 + 0 + 0.166667 + 0 + 0.166667 + + 0 0 0 0 -0 0 + + -0.923319 0.050453 -0.058 0 -0 0 + 1 + 0 + 0 + 0 + + 0 0 0 0 -0 0 + + + 0.1 0.1 0.1 + + + + 1 + + + __default__ + + 0.3 0.3 0.3 1 + 0.7 0.7 0.7 1 + 0.01 0.01 0.01 1 + 0 0 0 1 + + 0 + 1 + + + 0 + 10 + 0 0 0 0 -0 0 + + + 1 1 1 + + + + + + 1 + 1 + 0 0 0 + 0 + 0 + + + 1 + 0 + 0 + 1 + + 0 + + + + + 0 + 1e+06 + + + 0 + 1 + 1 + + 0 + 0.2 + 1e+13 + 1 + 0.01 + 0 + + + 1 + -0.01 + 0 + 0.2 + 1e+13 + 1 + + + + + + + link_2 + link_4_clone_0 + 0 0 0 0 -0 0 + + 0 1 0 + + -1.79769e+308 + 1.79769e+308 + -1 + -1 + + + 0 + 0 + 0 + + + + + + 0 + 0.2 + + + 0 + 0.2 + + + + + + link_2 + link_4_clone + 0 0 0 0 -0 0 + + -0 -1 -0 + + -1.79769e+308 + 1.79769e+308 + -1 + -1 + + + 0 + 0 + 0 + + + + + + 0 + 0.2 + + + 0 + 0.2 + + + + + + link_2 + link_4 + 0 0 0 0 -0 0 + + 0 1 0 + + -1.79769e+308 + 1.79769e+308 + -1 + -1 + + + 0 + 0 + 0 + 0 + + + + + + 0 + 0.2 + + + 0 + 0.2 + + + + + + link_2 + link_4_clone_1 + 0 0 0 0 -0 0 + + -0 -1 -0 + + -1.79769e+308 + 1.79769e+308 + -1 + -1 + + + 0 + 0 + 0 + + + + + + 0 + 0.2 + + + 0 + 0.2 + + + + + + link_2 + link_5 + 0 0 0 0 -0 0 + + + + 0 + 0.2 + + + 0 + 0.2 + + + + + 0 + 1 + + diff --git a/Task_5/src/nomeer_gazebo_pkg/package.xml b/Task_5/src/nomeer_gazebo_pkg/package.xml new file mode 100644 index 0000000..3118bae --- /dev/null +++ b/Task_5/src/nomeer_gazebo_pkg/package.xml @@ -0,0 +1,68 @@ + + + nomeer_gazebo_pkg + 0.0.0 + The nomeer_gazebo_pkg package + + + + + nomeer + + + + + + TODO + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + catkin + roscpp + rospy + std_msgs + roscpp + rospy + std_msgs + roscpp + rospy + std_msgs + + + + + + + + diff --git a/Task_5/src/nomeer_gazebo_pkg/world/nomeerWorld b/Task_5/src/nomeer_gazebo_pkg/world/nomeerWorld new file mode 100644 index 0000000..33d7019 --- /dev/null +++ b/Task_5/src/nomeer_gazebo_pkg/world/nomeerWorld @@ -0,0 +1,2897 @@ + + + + 1 + 0 0 10 0 -0 0 + 0.8 0.8 0.8 1 + 0.2 0.2 0.2 1 + + 1000 + 0.9 + 0.01 + 0.001 + + -0.5 0.1 -0.9 + + 0 + 0 + 0 + + + + 1 + + + + + 0 0 1 + 100 100 + + + + + 65535 + + + + + 100 + 50 + + + + + + + + 10 + + + 0 + + + 0 0 1 + 100 100 + + + + + + + 0 + 0 + 0 + + + 0 0 -9.8 + 6e-06 2.3e-05 -4.2e-05 + + + 0.001 + 1 + 1000 + + + 0.4 0.4 0.4 1 + 0.7 0.7 0.7 1 + 1 + + + + EARTH_WGS84 + 0 + 0 + 0 + 0 + + + + + 1 + + 0.166667 + 0 + 0 + 0.166667 + 0 + 0.166667 + + 0 0 0 0 -0 0 + + -0.473319 0.050453 -0.208 0 -0 0 + 1 + 0 + 1 + 0 + + 0 0 0 0 -0 0 + + + 1 0.6 0.2 + + + + 1 + + + __default__ + + 0.3 0.3 0.3 1 + 0.7 0.7 0.7 1 + 0.01 0.01 0.01 1 + 0 0 0 1 + + 0 + 1 + + + 0 + 10 + 0 0 0 0 -0 0 + + + 1 0.6 0.2 + + + + + + 1 + 1 + 0 0 0 + 0 + 0 + + + 1 + 0 + 0 + 1 + + 0 + + + + + 0 + 1e+06 + + + 0 + 1 + 1 + + 0 + 0.2 + 1e+13 + 1 + 0.01 + 0 + + + 1 + -0.01 + 0 + 0.2 + 1e+13 + 1 + + + + + + + + 1 + + 0.145833 + 0 + 0 + 0.145833 + 0 + 0.125 + + 0 0 0 0 -0 0 + + -0.773319 0.375454 -0.208 0 -0 0 + 1 + 0 + 0 + 0 + + 0 0 0 1.5708 -0 0 + + + 0.2 + 0.05 + + + + 1 + + + __default__ + + 0.3 0.3 0.3 1 + 0.7 0.7 0.7 1 + 0.01 0.01 0.01 1 + 0 0 0 1 + + 0 + 1 + + + 0 + 10 + 0 0 0 0 -0 0 + + + 0.2 + 0.05 + + + + + + 1 + 1 + 0 0 0 + 0 + 0 + + + 1 + 0 + 0 + 1 + + 0 + + + + + 0 + 1e+06 + + + 0 + 1 + 1 + + 0 + 0.2 + 1e+13 + 1 + 0.01 + 0 + + + 1 + -0.01 + 0 + 0.2 + 1e+13 + 1 + + + + + + + + 1 + + 0.145833 + 0 + 0 + 0.145833 + 0 + 0.125 + + 0 0 0 0 -0 0 + + -0.173319 -0.274548 -0.208 0 -0 0 + 1 + 0 + 0 + 0 + + 0 0 0 1.5708 -0 0 + + + 0.2 + 0.05 + + + + 1 + + + __default__ + + 0.3 0.3 0.3 1 + 0.7 0.7 0.7 1 + 0.01 0.01 0.01 1 + 0 0 0 1 + + 0 + 1 + + + 0 + 10 + 0 0 0 0 -0 0 + + + 0.2 + 0.05 + + + + + + 1 + 1 + 0 0 0 + 0 + 0 + + + 1 + 0 + 0 + 1 + + 0 + + + + + 0 + 1e+06 + + + 0 + 1 + 1 + + 0 + 0.2 + 1e+13 + 1 + 0.01 + 0 + + + 1 + -0.01 + 0 + 0.2 + 1e+13 + 1 + + + + + + + + 1 + + 0.145833 + 0 + 0 + 0.145833 + 0 + 0.125 + + 0 0 0 0 -0 0 + + -0.173319 0.375454 -0.208 0 -0 0 + 1 + 0 + 0 + 0 + + 0 0 0 1.5708 -0 0 + + + 0.2 + 0.05 + + + + 1 + + + __default__ + + 0.3 0.3 0.3 1 + 0.7 0.7 0.7 1 + 0.01 0.01 0.01 1 + 0 0 0 1 + + 0 + 1 + + + 0 + 10 + 0 0 0 0 -0 0 + + + 0.2 + 0.05 + + + + + + 1 + 1 + 0 0 0 + 0 + 0 + + + 1 + 0 + 0 + 1 + + 0 + + + + + 0 + 1e+06 + + + 0 + 1 + 1 + + 0 + 0.2 + 1e+13 + 1 + 0.01 + 0 + + + 1 + -0.01 + 0 + 0.2 + 1e+13 + 1 + + + + + + + + 1 + + 0.145833 + 0 + 0 + 0.145833 + 0 + 0.125 + + 0 0 0 0 -0 0 + + -0.773319 -0.274548 -0.208 0 -0 0 + 1 + 0 + 0 + 0 + + 0 0 0 1.5708 -0 0 + + + 0.2 + 0.05 + + + + 1 + + + __default__ + + 0.3 0.3 0.3 1 + 0.7 0.7 0.7 1 + 0.01 0.01 0.01 1 + 0 0 0 1 + + 0 + 1 + + + 0 + 10 + 0 0 0 0 -0 0 + + + 0.2 + 0.05 + + + + + + 1 + 1 + 0 0 0 + 0 + 0 + + + 1 + 0 + 0 + 1 + + 0 + + + + + 0 + 1e+06 + + + 0 + 1 + 1 + + 0 + 0.2 + 1e+13 + 1 + 0.01 + 0 + + + 1 + -0.01 + 0 + 0.2 + 1e+13 + 1 + + + + + + + + 1 + + 0.166667 + 0 + 0 + 0.166667 + 0 + 0.166667 + + 0 0 0 0 -0 0 + + -0.923319 0.050453 -0.058 0 -0 0 + 1 + 0 + 0 + 0 + + 0 0 0 0 -0 0 + + + 0.1 0.1 0.1 + + + + 1 + + + __default__ + + 0.3 0.3 0.3 1 + 0.7 0.7 0.7 1 + 0.01 0.01 0.01 1 + 0 0 0 1 + + 0 + 1 + + + 0 + 10 + 0 0 0 0 -0 0 + + + 1 1 1 + + + + + + 1 + 1 + 0 0 0 + 0 + 0 + + + 1 + 0 + 0 + 1 + + 0 + + + + + 0 + 1e+06 + + + 0 + 1 + 1 + + 0 + 0.2 + 1e+13 + 1 + 0.01 + 0 + + + 1 + -0.01 + 0 + 0.2 + 1e+13 + 1 + + + + + + + link_2 + link_4_clone_0 + 0 0 0 0 -0 0 + + 0 1 0 + + -1.79769e+308 + 1.79769e+308 + -1 + -1 + + + 0 + 0 + 0 + + + + + + 0 + 0.2 + + + 0 + 0.2 + + + + + + link_2 + link_4_clone + 0 0 0 0 -0 0 + + -0 -1 -0 + + -1.79769e+308 + 1.79769e+308 + -1 + -1 + + + 0 + 0 + 0 + + + + + + 0 + 0.2 + + + 0 + 0.2 + + + + + + link_2 + link_4 + 0 0 0 0 -0 0 + + 0 1 0 + + -1.79769e+308 + 1.79769e+308 + -1 + -1 + + + 0 + 0 + 0 + 0 + + + + + + 0 + 0.2 + + + 0 + 0.2 + + + + + + link_2 + link_4_clone_1 + 0 0 0 0 -0 0 + + -0 -1 -0 + + -1.79769e+308 + 1.79769e+308 + -1 + -1 + + + 0 + 0 + 0 + + + + + + 0 + 0.2 + + + 0 + 0.2 + + + + + + link_2 + link_5 + 0 0 0 0 -0 0 + + + + 0 + 0.2 + + + 0 + 0.2 + + + + + 0 + 1 + 0.473319 -0.050453 0.408 0 -0 0 + + + 41 530000000 + 29 369399219 + 1676087165 743978611 + 29317 + + -2.415 -2.70167 0 0 -0 0 + 1 1 1 + + 6.335 -0.05 0 0 -0 3.14159 + 0 0 0 0 -0 0 + 0 0 0 0 -0 0 + 0 0 0 0 -0 0 + + + 5.16 -0.975 0 0 0 -1.5708 + 0 0 0 0 -0 0 + 0 0 0 0 -0 0 + 0 0 0 0 -0 0 + + + 4.36 -1.9 0 0 -0 3.14159 + 0 0 0 0 -0 0 + 0 0 0 0 -0 0 + 0 0 0 0 -0 0 + + + 3.56 -2.7 0 0 0 -1.5708 + 0 0 0 0 -0 0 + 0 0 0 0 -0 0 + 0 0 0 0 -0 0 + + + 4.61 -3.5 0 0 -0 0 + 0 0 0 0 -0 0 + 0 0 0 0 -0 0 + 0 0 0 0 -0 0 + + + 5.66 -3.8 0 0 0 -1.5708 + 0 0 0 0 -0 0 + 0 0 0 0 -0 0 + 0 0 0 0 -0 0 + + + 3.86 -4.1 0 0 -0 3.14159 + 0 0 0 0 -0 0 + 0 0 0 0 -0 0 + 0 0 0 0 -0 0 + + + 2.06 -3.05 0 0 -0 1.5708 + 0 0 0 0 -0 0 + 0 0 0 0 -0 0 + 0 0 0 0 -0 0 + + + 2.06 -1.325 0 0 -0 1.5708 + 0 0 0 0 -0 0 + 0 0 0 0 -0 0 + 0 0 0 0 -0 0 + + + 2.735 -0.65 0 0 -0 0 + 0 0 0 0 -0 0 + 0 0 0 0 -0 0 + 0 0 0 0 -0 0 + + + 3.41 -0.225 0 0 -0 1.5708 + 0 0 0 0 -0 0 + 0 0 0 0 -0 0 + 0 0 0 0 -0 0 + + + 1.36 0.2 0 0 -0 3.14159 + 0 0 0 0 -0 0 + 0 0 0 0 -0 0 + 0 0 0 0 -0 0 + + + -0.69 -0.975 0 0 0 -1.5708 + 0 0 0 0 -0 0 + 0 0 0 0 -0 0 + 0 0 0 0 -0 0 + + + -1.615 -2.15 0 0 -0 3.14159 + 0 0 0 0 -0 0 + 0 0 0 0 -0 0 + 0 0 0 0 -0 0 + + + -3.84 -2.15 0 0 -0 3.14159 + 0 0 0 0 -0 0 + 0 0 0 0 -0 0 + 0 0 0 0 -0 0 + + + -6.19 -2.15 0 0 -0 3.14159 + 0 0 0 0 -0 0 + 0 0 0 0 -0 0 + 0 0 0 0 -0 0 + + + -7.24 -0.475 0 0 -0 1.5708 + 0 0 0 0 -0 0 + 0 0 0 0 -0 0 + 0 0 0 0 -0 0 + + + -9.79 1.2 0 0 -0 3.14159 + 0 0 0 0 -0 0 + 0 0 0 0 -0 0 + 0 0 0 0 -0 0 + + + -12.34 -1.1 0 0 0 -1.5708 + 0 0 0 0 -0 0 + 0 0 0 0 -0 0 + 0 0 0 0 -0 0 + + + -12.34 -4.95 0 0 0 -1.5708 + 0 0 0 0 -0 0 + 0 0 0 0 -0 0 + 0 0 0 0 -0 0 + + + -9.915 -6.5 0 0 -0 0 + 0 0 0 0 -0 0 + 0 0 0 0 -0 0 + 0 0 0 0 -0 0 + + + -7.49 -5.575 0 0 -0 1.5708 + 0 0 0 0 -0 0 + 0 0 0 0 -0 0 + 0 0 0 0 -0 0 + + + -8.79 -4.65 0 0 -0 3.14159 + 0 0 0 0 -0 0 + 0 0 0 0 -0 0 + 0 0 0 0 -0 0 + + + -10.09 -3.725 0 0 -0 1.5708 + 0 0 0 0 -0 0 + 0 0 0 0 -0 0 + 0 0 0 0 -0 0 + + + -9.665 -2.8 0 0 -0 0 + 0 0 0 0 -0 0 + 0 0 0 0 -0 0 + 0 0 0 0 -0 0 + + + -8.9025 -3.38456 0 0 0 -1.0472 + 0 0 0 0 -0 0 + 0 0 0 0 -0 0 + 0 0 0 0 -0 0 + + + -7.765 -3.96913 0 0 -0 0 + 0 0 0 0 -0 0 + 0 0 0 0 -0 0 + 0 0 0 0 -0 0 + + + -1.58561 -6.05334 0 0 -0 1.5708 + 0 0 0 0 -0 0 + 0 0 0 0 -0 0 + 0 0 0 0 -0 0 + + + -0.265 -6.6 0 0 -0 3.14159 + 0 0 0 0 -0 0 + 0 0 0 0 -0 0 + 0 0 0 0 -0 0 + + + -4.65958 -2.71216 0 0 0 -1.309 + 0 0 0 0 -0 0 + 0 0 0 0 -0 0 + 0 0 0 0 -0 0 + + + -11.6599 -0.72086 0 0 -0 0 + 0 0 0 0 -0 0 + 0 0 0 0 -0 0 + 0 0 0 0 -0 0 + + + -10.596 -1.10977 0 0 0 -0.785398 + 0 0 0 0 -0 0 + 0 0 0 0 -0 0 + 0 0 0 0 -0 0 + + + -11.1076 -5.78022 0 0 -0 1.5708 + 0 0 0 0 -0 0 + 0 0 0 0 -0 0 + 0 0 0 0 -0 0 + + + -8.18345 -0.25534 0 0 -0 3.14159 + 0 0 0 0 -0 0 + 0 0 0 0 -0 0 + 0 0 0 0 -0 0 + + + 1.08111 -3.42534 0 0 0 -2.61799 + 0 0 0 0 -0 0 + 0 0 0 0 -0 0 + 0 0 0 0 -0 0 + + + 4.16 -5.925 0 0 -0 1.5708 + 0 0 0 0 -0 0 + 0 0 0 0 -0 0 + 0 0 0 0 -0 0 + + + 5.835 -5.25 0 0 -0 0 + 0 0 0 0 -0 0 + 0 0 0 0 -0 0 + 0 0 0 0 -0 0 + + + 7.51 -3.825 0 0 -0 1.5708 + 0 0 0 0 -0 0 + 0 0 0 0 -0 0 + 0 0 0 0 -0 0 + + + 7.51 -1.225 0 0 -0 1.5708 + 0 0 0 0 -0 0 + 0 0 0 0 -0 0 + 0 0 0 0 -0 0 + + + + 0 0 0 0 -0 0 + 1 1 1 + + 0 0 0 0 -0 0 + 0 0 0 0 -0 0 + 0 0 0 0 -0 0 + 0 0 0 0 -0 0 + + + + -2.21922 -4.47609 0.408 0 -0 0 + 1 1 1 + + -2.69254 -4.42563 0.2 0 -0 0 + 0 0 0 0 -0 0 + 0 0 -9.8 0 -0 0 + 0 0 -9.8 0 -0 0 + + + -2.99254 -4.10063 0.2 0 -0 0 + 0 0 0 0 -0 0 + 0 0 0 0 -0 0 + 0 0 0 0 -0 0 + + + -2.39254 -4.75063 0.2 0 -0 0 + 0 0 0 0 -0 0 + 0 0 0 0 -0 0 + 0 0 0 0 -0 0 + + + -2.39254 -4.10063 0.2 0 -0 0 + 0 0 0 0 -0 0 + 0 0 0 0 -0 0 + 0 0 0 0 -0 0 + + + -2.99254 -4.75063 0.2 0 -0 0 + 0 0 0 0 -0 0 + 0 0 0 0 -0 0 + 0 0 0 0 -0 0 + + + -3.13906 -4.42107 0.505275 -0.009035 0.003387 -0.000706 + 1.1316 2.44612 2.61034 -1.75015 0.877609 3.13357 + 1346.09 2712.41 34317.3 0.449193 0.850988 1.53841 + 1346.09 2712.41 34317.3 0 -0 0 + + + + 0 0 10 0 -0 0 + + + + + -2.32791 -1.24033 31.344 3.14159 1.57079 3.14159 + orbit + perspective + + + + -2.415 -2.70167 0 0 -0 0 + + + + + 2.5 0.15 2.5 + + + 0 0 1.25 0 -0 0 + 10 + + + + + + + + + + + + + + + 0 0 1.25 0 -0 0 + + + 2.5 0.15 2.5 + + + + + 1 1 1 1 + + + 0 + + + 8.75 2.65167 0 0 -0 3.14159 + 0 + 0 + 0 + + + + + + 2 0.15 2.5 + + + 0 0 1.25 0 -0 0 + 10 + + + + + + + + + + + + + + + 0 0 1.25 0 -0 0 + + + 2 0.15 2.5 + + + + + 1 1 1 1 + + + 0 + + + 7.575 1.72667 0 0 -0 -1.5708 + 0 + 0 + 0 + + + + + + 1.75 0.15 2.5 + + + 0 0 1.25 0 -0 0 + 10 + + + + + + + + + + + + + + + 0 0 1.25 0 -0 0 + + + 1.75 0.15 2.5 + + + + + 1 1 1 1 + + + 0 + + + 6.775 0.801673 0 0 -0 3.14159 + 0 + 0 + 0 + + + + + + 1.75 0.15 2.5 + + + 0 0 1.25 0 -0 0 + 10 + + + + + + + + + + + + + + + 0 0 1.25 0 -0 0 + + + 1.75 0.15 2.5 + + + + + 1 1 1 1 + + + 0 + + + 5.975 0.001673 0 0 -0 -1.5708 + 0 + 0 + 0 + + + + + + 2.25 0.15 2.5 + + + 0 0 1.25 0 -0 0 + 10 + + + + + + + + + + + + + + + 0 0 1.25 0 -0 0 + + + 2.25 0.15 2.5 + + + + + 1 1 1 1 + + + 0 + + + 7.025 -0.798327 0 0 -0 0 + 0 + 0 + 0 + + + + + + 0.75 0.15 2.5 + + + 0 0 1.25 0 -0 0 + 10 + + + + + + + + + + + + + + + 0 0 1.25 0 -0 0 + + + 0.75 0.15 2.5 + + + + + 1 1 1 1 + + + 0 + + + 8.075 -1.09833 0 0 -0 -1.5708 + 0 + 0 + 0 + + + + + + 3.75 0.15 2.5 + + + 0 0 1.25 0 -0 0 + 10 + + + + + + + + + + + + + + + 0 0 1.25 0 -0 0 + + + 3.75 0.15 2.5 + + + + + 1 1 1 1 + + + 0 + + + 6.275 -1.39833 0 0 -0 3.14159 + 0 + 0 + 0 + + + + + + 2.25 0.15 2.5 + + + 0 0 1.25 0 -0 0 + 10 + + + + + + + + + + + + + + + 0 0 1.25 0 -0 0 + + + 2.25 0.15 2.5 + + + + + 1 1 1 1 + + + 0 + + + 4.475 -0.348327 0 0 -0 1.5708 + 0 + 0 + 0 + + + + + + 1.5 0.15 2.5 + + + 0 0 1.25 0 -0 0 + 10 + + + + + + + + + + + + + + + 0 0 1.25 0 -0 0 + + + 1.5 0.15 2.5 + + + + + 1 1 1 1 + + + 0 + + + 4.475 1.37667 0 0 -0 1.5708 + 0 + 0 + 0 + + + + + + 1.5 0.15 2.5 + + + 0 0 1.25 0 -0 0 + 10 + + + + + + + + + + + + + + + 0 0 1.25 0 -0 0 + + + 1.5 0.15 2.5 + + + + + 1 1 1 1 + + + 0 + + + 5.15 2.05167 0 0 -0 0 + 0 + 0 + 0 + + + + + + 1 0.15 2.5 + + + 0 0 1.25 0 -0 0 + 10 + + + + + + + + + + + + + + + 0 0 1.25 0 -0 0 + + + 1 0.15 2.5 + + + + + 1 1 1 1 + + + 0 + + + 5.825 2.47667 0 0 -0 1.5708 + 0 + 0 + 0 + + + + + + 4.25 0.15 2.5 + + + 0 0 1.25 0 -0 0 + 10 + + + + + + + + + + + + + + + 0 0 1.25 0 -0 0 + + + 4.25 0.15 2.5 + + + + + 1 1 1 1 + + + 0 + + + 3.775 2.90167 0 0 -0 3.14159 + 0 + 0 + 0 + + + + + + 2.5 0.15 2.5 + + + 0 0 1.25 0 -0 0 + 10 + + + + + + + + + + + + + + + 0 0 1.25 0 -0 0 + + + 2.5 0.15 2.5 + + + + + 1 1 1 1 + + + 0 + + + 1.725 1.72667 0 0 -0 -1.5708 + 0 + 0 + 0 + + + + + + 2 0.15 2.5 + + + 0 0 1.25 0 -0 0 + 10 + + + + + + + + + + + + + + + 0 0 1.25 0 -0 0 + + + 2 0.15 2.5 + + + + + 1 1 1 1 + + + 0 + + + 0.8 0.551673 0 0 -0 3.14159 + 0 + 0 + 0 + + + + + + 2.75 0.15 2.5 + + + 0 0 1.25 0 -0 0 + 10 + + + + + + + + + + + + + + + 0 0 1.25 0 -0 0 + + + 2.75 0.15 2.5 + + + + + 1 1 1 1 + + + 0 + + + -1.425 0.551673 0 0 -0 3.14159 + 0 + 0 + 0 + + + + + + 2.25 0.15 2.5 + + + 0 0 1.25 0 -0 0 + 10 + + + + + + + + + + + + + + + 0 0 1.25 0 -0 0 + + + 2.25 0.15 2.5 + + + + + 1 1 1 1 + + + 0 + + + -3.775 0.551673 0 0 -0 3.14159 + 0 + 0 + 0 + + + + + + 3.5 0.15 2.5 + + + 0 0 1.25 0 -0 0 + 10 + + + + + + + + + + + + + + + 0 0 1.25 0 -0 0 + + + 3.5 0.15 2.5 + + + + + 1 1 1 1 + + + 0 + + + -4.825 2.22667 0 0 -0 1.5708 + 0 + 0 + 0 + + + + + + 5.25 0.15 2.5 + + + 0 0 1.25 0 -0 0 + 10 + + + + + + + + + + + + + + + 0 0 1.25 0 -0 0 + + + 5.25 0.15 2.5 + + + + + 1 1 1 1 + + + 0 + + + -7.375 3.90167 0 0 -0 3.14159 + 0 + 0 + 0 + + + + + + 4.75 0.15 2.5 + + + 0 0 1.25 0 -0 0 + 10 + + + + + + + + + + + + + + + 0 0 1.25 0 -0 0 + + + 4.75 0.15 2.5 + + + + + 1 1 1 1 + + + 0 + + + -9.925 1.60167 0 0 -0 -1.5708 + 0 + 0 + 0 + + + + + + 3.25 0.15 2.5 + + + 0 0 1.25 0 -0 0 + 10 + + + + + + + + + + + + + + + 0 0 1.25 0 -0 0 + + + 3.25 0.15 2.5 + + + + + 1 1 1 1 + + + 0 + + + -9.925 -2.24833 0 0 -0 -1.5708 + 0 + 0 + 0 + + + + + + 5 0.15 2.5 + + + 0 0 1.25 0 -0 0 + 10 + + + + + + + + + + + + + + + 0 0 1.25 0 -0 0 + + + 5 0.15 2.5 + + + + + 1 1 1 1 + + + 0 + + + -7.5 -3.79833 0 0 -0 0 + 0 + 0 + 0 + + + + + + 2 0.15 2.5 + + + 0 0 1.25 0 -0 0 + 10 + + + + + + + + + + + + + + + 0 0 1.25 0 -0 0 + + + 2 0.15 2.5 + + + + + 1 1 1 1 + + + 0 + + + -5.075 -2.87333 0 0 -0 1.5708 + 0 + 0 + 0 + + + + + + 2.75 0.15 2.5 + + + 0 0 1.25 0 -0 0 + 10 + + + + + + + + + + + + + + + 0 0 1.25 0 -0 0 + + + 2.75 0.15 2.5 + + + + + 1 1 1 1 + + + 0 + + + -6.375 -1.94833 0 0 -0 3.14159 + 0 + 0 + 0 + + + + + + 2 0.15 2.5 + + + 0 0 1.25 0 -0 0 + 10 + + + + + + + + + + + + + + + 0 0 1.25 0 -0 0 + + + 2 0.15 2.5 + + + + + 1 1 1 1 + + + 0 + + + -7.675 -1.02333 0 0 -0 1.5708 + 0 + 0 + 0 + + + + + + 1 0.15 2.5 + + + 0 0 1.25 0 -0 0 + 10 + + + + + + + + + + + + + + + 0 0 1.25 0 -0 0 + + + 1 0.15 2.5 + + + + + 1 1 1 1 + + + 0 + + + -7.25 -0.098327 0 0 -0 0 + 0 + 0 + 0 + + + + + + 1.5 0.15 2.5 + + + 0 0 1.25 0 -0 0 + 10 + + + + + + + + + + + + + + + 0 0 1.25 0 -0 0 + + + 1.5 0.15 2.5 + + + + + 1 1 1 1 + + + 0 + + + -6.4875 -0.682894 0 0 -0 -1.0472 + 0 + 0 + 0 + + + + + + 1.75 0.15 2.5 + + + 0 0 1.25 0 -0 0 + 10 + + + + + + + + + + + + + + + 0 0 1.25 0 -0 0 + + + 1.75 0.15 2.5 + + + + + 1 1 1 1 + + + 0 + + + -5.35 -1.26746 0 0 -0 0 + 0 + 0 + 0 + + + + + + 1.25 0.15 2.5 + + + 0 0 1.25 0 -0 0 + 10 + + + + + + + + + + + + + + + 0 0 1.25 0 -0 0 + + + 1.25 0.15 2.5 + + + + + 1 1 1 1 + + + 0 + + + 0.829393 -3.35167 0 0 -0 1.5708 + 0 + 0 + 0 + + + + + + 9 0.15 2.5 + + + 0 0 1.25 0 -0 0 + 10 + + + + + + + + + + + + + + + 0 0 1.25 0 -0 0 + + + 9 0.15 2.5 + + + + + 1 1 1 1 + + + 0 + + + 2.15 -3.89833 0 0 -0 3.14159 + 0 + 0 + 0 + + + + + + 1.25 0.15 2.5 + + + 0 0 1.25 0 -0 0 + 10 + + + + + + + + + + + + + + + 0 0 1.25 0 -0 0 + + + 1.25 0.15 2.5 + + + + + 1 1 1 1 + + + 0 + + + -2.24458 -0.010492 0 0 -0 -1.309 + 0 + 0 + 0 + + + + + + 1.5 0.15 2.5 + + + 0 0 1.25 0 -0 0 + 10 + + + + + + + + + + + + + + + 0 0 1.25 0 -0 0 + + + 1.5 0.15 2.5 + + + + + 1 1 1 1 + + + 0 + + + -9.24489 1.98081 0 0 -0 0 + 0 + 0 + 0 + + + + + + 1.25 0.15 2.5 + + + 0 0 1.25 0 -0 0 + 10 + + + + + + + + + + + + + + + 0 0 1.25 0 -0 0 + + + 1.25 0.15 2.5 + + + + + 1 1 1 1 + + + 0 + + + -8.18098 1.5919 0 0 -0 -0.785398 + 0 + 0 + 0 + + + + + + 1.5 0.15 2.5 + + + 0 0 1.25 0 -0 0 + 10 + + + + + + + + + + + + + + + 0 0 1.25 0 -0 0 + + + 1.5 0.15 2.5 + + + + + 1 1 1 1 + + + 0 + + + -8.69261 -3.07855 0 0 -0 1.5708 + 0 + 0 + 0 + + + + + + 1.75 0.15 2.5 + + + 0 0 1.25 0 -0 0 + 10 + + + + + + + + + + + + + + + 0 0 1.25 0 -0 0 + + + 1.75 0.15 2.5 + + + + + 1 1 1 1 + + + 0 + + + -5.76845 2.44633 0 0 -0 3.14159 + 0 + 0 + 0 + + + + + + 2.25 0.15 2.5 + + + 0 0 1.25 0 -0 0 + 10 + + + + + + + + + + + + + + + 0 0 1.25 0 -0 0 + + + 2.25 0.15 2.5 + + + + + 1 1 1 1 + + + 0 + + + 3.49611 -0.723673 0 0 -0 -2.61799 + 0 + 0 + 0 + + + + + + 1.5 0.15 2.5 + + + 0 0 1.25 0 -0 0 + 10 + + + + + + + + + + + + + + + 0 0 1.25 0 -0 0 + + + 1.5 0.15 2.5 + + + + + 1 1 1 1 + + + 0 + + + 6.575 -3.22333 0 0 -0 1.5708 + 0 + 0 + 0 + + + + + + 3.5 0.15 2.5 + + + 0 0 1.25 0 -0 0 + 10 + + + + + + + + + + + + + + + 0 0 1.25 0 -0 0 + + + 3.5 0.15 2.5 + + + + + 1 1 1 1 + + + 0 + + + 8.25 -2.54833 0 0 -0 0 + 0 + 0 + 0 + + + + + + 3 0.15 2.5 + + + 0 0 1.25 0 -0 0 + 10 + + + + + + + + + + + + + + + 0 0 1.25 0 -0 0 + + + 3 0.15 2.5 + + + + + 1 1 1 1 + + + 0 + + + 9.925 -1.12333 0 0 -0 1.5708 + 0 + 0 + 0 + + + + + + 2.5 0.15 2.5 + + + 0 0 1.25 0 -0 0 + 10 + + + + + + + + + + + + + + + 0 0 1.25 0 -0 0 + + + 2.5 0.15 2.5 + + + + + 1 1 1 1 + + + 0 + + + 9.925 1.47667 0 0 -0 1.5708 + 0 + 0 + 0 + + 1 + + + diff --git a/Task_5/src/nomeer_gazebo_pkg/world/nomeer_world b/Task_5/src/nomeer_gazebo_pkg/world/nomeer_world new file mode 100644 index 0000000..97f9e94 --- /dev/null +++ b/Task_5/src/nomeer_gazebo_pkg/world/nomeer_world @@ -0,0 +1,900 @@ + + + + 1 + 0 0 10 0 -0 0 + 0.8 0.8 0.8 1 + 0.2 0.2 0.2 1 + + 1000 + 0.9 + 0.01 + 0.001 + + -0.5 0.1 -0.9 + + 0 + 0 + 0 + + + + 1 + + + + + 0 0 1 + 100 100 + + + + + 65535 + + + + + 100 + 50 + + + + + + + + 10 + + + 0 + + + 0 0 1 + 100 100 + + + + + + + 0 + 0 + 0 + + + 0 0 -9.8 + 6e-06 2.3e-05 -4.2e-05 + + + 0.001 + 1 + 1000 + + + 0.4 0.4 0.4 1 + 0.7 0.7 0.7 1 + 1 + + + + EARTH_WGS84 + 0 + 0 + 0 + 0 + + + + + 1 + + 0.166667 + 0 + 0 + 0.166667 + 0 + 0.166667 + + 0 0 0 0 -0 0 + + -0.473319 0.050453 -0.208 0 -0 0 + 1 + 0 + 1 + 0 + + 0 0 0 0 -0 0 + + + 1 0.6 0.2 + + + + 1 + + + __default__ + + 0.3 0.3 0.3 1 + 0.7 0.7 0.7 1 + 0.01 0.01 0.01 1 + 0 0 0 1 + + 0 + 1 + + + 0 + 10 + 0 0 0 0 -0 0 + + + 1 0.6 0.2 + + + + + + 1 + 1 + 0 0 0 + 0 + 0 + + + 1 + 0 + 0 + 1 + + 0 + + + + + 0 + 1e+06 + + + 0 + 1 + 1 + + 0 + 0.2 + 1e+13 + 1 + 0.01 + 0 + + + 1 + -0.01 + 0 + 0.2 + 1e+13 + 1 + + + + + + + + 1 + + 0.145833 + 0 + 0 + 0.145833 + 0 + 0.125 + + 0 0 0 0 -0 0 + + -0.773319 0.375454 -0.208 0 -0 0 + 1 + 0 + 0 + 0 + + 0 0 0 1.5708 -0 0 + + + 0.2 + 0.05 + + + + 1 + + + __default__ + + 0.3 0.3 0.3 1 + 0.7 0.7 0.7 1 + 0.01 0.01 0.01 1 + 0 0 0 1 + + 0 + 1 + + + 0 + 10 + 0 0 0 0 -0 0 + + + 0.2 + 0.05 + + + + + + 1 + 1 + 0 0 0 + 0 + 0 + + + 1 + 0 + 0 + 1 + + 0 + + + + + 0 + 1e+06 + + + 0 + 1 + 1 + + 0 + 0.2 + 1e+13 + 1 + 0.01 + 0 + + + 1 + -0.01 + 0 + 0.2 + 1e+13 + 1 + + + + + + + + 1 + + 0.145833 + 0 + 0 + 0.145833 + 0 + 0.125 + + 0 0 0 0 -0 0 + + -0.173319 -0.274548 -0.208 0 -0 0 + 1 + 0 + 0 + 0 + + 0 0 0 1.5708 -0 0 + + + 0.2 + 0.05 + + + + 1 + + + __default__ + + 0.3 0.3 0.3 1 + 0.7 0.7 0.7 1 + 0.01 0.01 0.01 1 + 0 0 0 1 + + 0 + 1 + + + 0 + 10 + 0 0 0 0 -0 0 + + + 0.2 + 0.05 + + + + + + 1 + 1 + 0 0 0 + 0 + 0 + + + 1 + 0 + 0 + 1 + + 0 + + + + + 0 + 1e+06 + + + 0 + 1 + 1 + + 0 + 0.2 + 1e+13 + 1 + 0.01 + 0 + + + 1 + -0.01 + 0 + 0.2 + 1e+13 + 1 + + + + + + + + 1 + + 0.145833 + 0 + 0 + 0.145833 + 0 + 0.125 + + 0 0 0 0 -0 0 + + -0.173319 0.375454 -0.208 0 -0 0 + 1 + 0 + 0 + 0 + + 0 0 0 1.5708 -0 0 + + + 0.2 + 0.05 + + + + 1 + + + __default__ + + 0.3 0.3 0.3 1 + 0.7 0.7 0.7 1 + 0.01 0.01 0.01 1 + 0 0 0 1 + + 0 + 1 + + + 0 + 10 + 0 0 0 0 -0 0 + + + 0.2 + 0.05 + + + + + + 1 + 1 + 0 0 0 + 0 + 0 + + + 1 + 0 + 0 + 1 + + 0 + + + + + 0 + 1e+06 + + + 0 + 1 + 1 + + 0 + 0.2 + 1e+13 + 1 + 0.01 + 0 + + + 1 + -0.01 + 0 + 0.2 + 1e+13 + 1 + + + + + + + + 1 + + 0.145833 + 0 + 0 + 0.145833 + 0 + 0.125 + + 0 0 0 0 -0 0 + + -0.773319 -0.274548 -0.208 0 -0 0 + 1 + 0 + 0 + 0 + + 0 0 0 1.5708 -0 0 + + + 0.2 + 0.05 + + + + 1 + + + __default__ + + 0.3 0.3 0.3 1 + 0.7 0.7 0.7 1 + 0.01 0.01 0.01 1 + 0 0 0 1 + + 0 + 1 + + + 0 + 10 + 0 0 0 0 -0 0 + + + 0.2 + 0.05 + + + + + + 1 + 1 + 0 0 0 + 0 + 0 + + + 1 + 0 + 0 + 1 + + 0 + + + + + 0 + 1e+06 + + + 0 + 1 + 1 + + 0 + 0.2 + 1e+13 + 1 + 0.01 + 0 + + + 1 + -0.01 + 0 + 0.2 + 1e+13 + 1 + + + + + + + + 1 + + 0.166667 + 0 + 0 + 0.166667 + 0 + 0.166667 + + 0 0 0 0 -0 0 + + -0.923319 0.050453 -0.058 0 -0 0 + 1 + 0 + 0 + 0 + + 0 0 0 0 -0 0 + + + 0.1 0.1 0.1 + + + + 1 + + + __default__ + + 0.3 0.3 0.3 1 + 0.7 0.7 0.7 1 + 0.01 0.01 0.01 1 + 0 0 0 1 + + 0 + 1 + + + 0 + 10 + 0 0 0 0 -0 0 + + + 1 1 1 + + + + + + 1 + 1 + 0 0 0 + 0 + 0 + + + 1 + 0 + 0 + 1 + + 0 + + + + + 0 + 1e+06 + + + 0 + 1 + 1 + + 0 + 0.2 + 1e+13 + 1 + 0.01 + 0 + + + 1 + -0.01 + 0 + 0.2 + 1e+13 + 1 + + + + + + + link_2 + link_4_clone_0 + 0 0 0 0 -0 0 + + 0 1 0 + + -1.79769e+308 + 1.79769e+308 + -1 + -1 + + + 0 + 0 + 0 + + + + + + 0 + 0.2 + + + 0 + 0.2 + + + + + + link_2 + link_4_clone + 0 0 0 0 -0 0 + + -0 -1 -0 + + -1.79769e+308 + 1.79769e+308 + -1 + -1 + + + 0 + 0 + 0 + + + + + + 0 + 0.2 + + + 0 + 0.2 + + + + + + link_2 + link_4 + 0 0 0 0 -0 0 + + 0 1 0 + + -1.79769e+308 + 1.79769e+308 + -1 + -1 + + + 0 + 0 + 0 + 0 + + + + + + 0 + 0.2 + + + 0 + 0.2 + + + + + + link_2 + link_4_clone_1 + 0 0 0 0 -0 0 + + -0 -1 -0 + + -1.79769e+308 + 1.79769e+308 + -1 + -1 + + + 0 + 0 + 0 + + + + + + 0 + 0.2 + + + 0 + 0.2 + + + + + + link_2 + link_5 + 0 0 0 0 -0 0 + + + + 0 + 0.2 + + + 0 + 0.2 + + + + + 0 + 1 + 0.473319 -0.050453 0.408 0 -0 0 + + + 12 213000000 + 12 258678406 + 1676084949 796616587 + 12213 + + 0 0 0 0 -0 0 + 1 1 1 + + 0 0 0 0 -0 0 + 0 0 0 0 -0 0 + 0 0 0 0 -0 0 + 0 0 0 0 -0 0 + + + + 0.473319 -0.050453 0.408 0 -0 0 + 1 1 1 + + 0 0 0.2 0 -0 0 + 0 0 0 0 -0 0 + 0 0 0 0 -0 0 + 0 0 0 0 -0 0 + + + -0.3 0.325001 0.2 0 -0 0 + 0 0 0 0 -0 0 + 0 0 0 0 -0 0 + 0 0 0 0 -0 0 + + + 0.3 -0.325001 0.2 0 -0 0 + 0 0 0 0 -0 0 + 0 0 0 0 -0 0 + 0 0 0 0 -0 0 + + + 0.3 0.325001 0.2 0 -0 0 + 0 0 0 0 -0 0 + 0 0 0 0 -0 0 + 0 0 0 0 -0 0 + + + -0.3 -0.325001 0.2 0 -0 0 + 0 0 0 0 -0 0 + 0 0 0 0 -0 0 + 0 0 0 0 -0 0 + + + -0.45 0 0.35 0 -0 0 + 0 0 0 0 -0 0 + 0 0 0 0 -0 0 + 0 0 0 0 -0 0 + + + + 0 0 10 0 -0 0 + + + + + 4.78194 -5.77722 3.96637 -0 0.412709 2.26897 + orbit + perspective + + + + diff --git a/Task_6/src/CMakeLists.txt b/Task_6/src/CMakeLists.txt new file mode 120000 index 0000000..2016816 --- /dev/null +++ b/Task_6/src/CMakeLists.txt @@ -0,0 +1 @@ +/opt/ros/noetic/share/catkin/cmake/toplevel.cmake \ No newline at end of file diff --git a/Task_6/src/nomeer_xacro_pkg/CMakeLists.txt b/Task_6/src/nomeer_xacro_pkg/CMakeLists.txt new file mode 100644 index 0000000..2686cf7 --- /dev/null +++ b/Task_6/src/nomeer_xacro_pkg/CMakeLists.txt @@ -0,0 +1,204 @@ +cmake_minimum_required(VERSION 3.0.2) +project(nomeer_xacro_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 + xacro +) + +## 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 # Or other packages containing 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 nomeer_xacro_pkg +# CATKIN_DEPENDS xacro +# 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}/nomeer_xacro_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(${PROJECT_NAME}_node src/nomeer_xacro_pkg_node.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(${PROJECT_NAME}_node +# ${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_nomeer_xacro_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) diff --git a/Task_6/src/nomeer_xacro_pkg/package.xml b/Task_6/src/nomeer_xacro_pkg/package.xml new file mode 100644 index 0000000..c5dcca5 --- /dev/null +++ b/Task_6/src/nomeer_xacro_pkg/package.xml @@ -0,0 +1,62 @@ + + + nomeer_xacro_pkg + 0.0.0 + The nomeer_xacro_pkg package + + + + + nomeer + + + + + + TODO + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + catkin + xacro + xacro + xacro + + + + + + + + diff --git a/Task_6/src/nomeer_xacro_pkg/urdf/Robot Accessories/camera.xacro b/Task_6/src/nomeer_xacro_pkg/urdf/Robot Accessories/camera.xacro new file mode 100644 index 0000000..bc57128 --- /dev/null +++ b/Task_6/src/nomeer_xacro_pkg/urdf/Robot Accessories/camera.xacro @@ -0,0 +1,34 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/Task_6/src/nomeer_xacro_pkg/urdf/Robot Accessories/lidar.xacro b/Task_6/src/nomeer_xacro_pkg/urdf/Robot Accessories/lidar.xacro new file mode 100644 index 0000000..c5c6ce0 --- /dev/null +++ b/Task_6/src/nomeer_xacro_pkg/urdf/Robot Accessories/lidar.xacro @@ -0,0 +1,35 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/Task_6/src/nomeer_xacro_pkg/urdf/Robot Accessories/material.xacro b/Task_6/src/nomeer_xacro_pkg/urdf/Robot Accessories/material.xacro new file mode 100644 index 0000000..08b1415 --- /dev/null +++ b/Task_6/src/nomeer_xacro_pkg/urdf/Robot Accessories/material.xacro @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Task_6/src/nomeer_xacro_pkg/urdf/Robot Accessories/wheel.xacro b/Task_6/src/nomeer_xacro_pkg/urdf/Robot Accessories/wheel.xacro new file mode 100644 index 0000000..a856d92 --- /dev/null +++ b/Task_6/src/nomeer_xacro_pkg/urdf/Robot Accessories/wheel.xacro @@ -0,0 +1,35 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/Task_6/src/nomeer_xacro_pkg/urdf/Robot_1/base.xacro b/Task_6/src/nomeer_xacro_pkg/urdf/Robot_1/base.xacro new file mode 100644 index 0000000..b97fd69 --- /dev/null +++ b/Task_6/src/nomeer_xacro_pkg/urdf/Robot_1/base.xacro @@ -0,0 +1,33 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/Task_6/src/nomeer_xacro_pkg/urdf/Robot_1/nomeer.urdf b/Task_6/src/nomeer_xacro_pkg/urdf/Robot_1/nomeer.urdf new file mode 100644 index 0000000..7c770fe --- /dev/null +++ b/Task_6/src/nomeer_xacro_pkg/urdf/Robot_1/nomeer.urdf @@ -0,0 +1,208 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Task_6/src/nomeer_xacro_pkg/urdf/Robot_1/nomeer1_robot.xacro b/Task_6/src/nomeer_xacro_pkg/urdf/Robot_1/nomeer1_robot.xacro new file mode 100644 index 0000000..01ea966 --- /dev/null +++ b/Task_6/src/nomeer_xacro_pkg/urdf/Robot_1/nomeer1_robot.xacro @@ -0,0 +1,69 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/Task_6/src/nomeer_xacro_pkg/urdf/Robot_1/urdf_task1.jpeg b/Task_6/src/nomeer_xacro_pkg/urdf/Robot_1/urdf_task1.jpeg new file mode 100644 index 0000000000000000000000000000000000000000..b77f58de692a7f589aba42061eba8712052eef31 GIT binary patch literal 68341 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%0Dm~al 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�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 literal 0 HcmV?d00001 diff --git a/Task_6/src/nomeer_xacro_pkg/urdf/Robot_2/base.xacro b/Task_6/src/nomeer_xacro_pkg/urdf/Robot_2/base.xacro new file mode 100644 index 0000000..e69de29 diff --git a/Task_7/src/CMakeLists.txt b/Task_7/src/CMakeLists.txt new file mode 120000 index 0000000..2016816 --- /dev/null +++ b/Task_7/src/CMakeLists.txt @@ -0,0 +1 @@ +/opt/ros/noetic/share/catkin/cmake/toplevel.cmake \ No newline at end of file diff --git a/Task_7/src/robot_description/CMakeLists.txt b/Task_7/src/robot_description/CMakeLists.txt new file mode 100644 index 0000000..928dbce --- /dev/null +++ b/Task_7/src/robot_description/CMakeLists.txt @@ -0,0 +1,204 @@ +cmake_minimum_required(VERSION 3.0.2) +project(robot_description) + +## 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 + xacro +) + +## 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 # Or other packages containing 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 robot_description +# CATKIN_DEPENDS xacro +# 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}/robot_description.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(${PROJECT_NAME}_node src/robot_description_node.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(${PROJECT_NAME}_node +# ${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_robot_description.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) diff --git a/Task_7/src/robot_description/package.xml b/Task_7/src/robot_description/package.xml new file mode 100644 index 0000000..616172d --- /dev/null +++ b/Task_7/src/robot_description/package.xml @@ -0,0 +1,62 @@ + + + robot_description + 0.0.0 + The robot_description package + + + + + nomeer + + + + + + TODO + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + catkin + xacro + xacro + xacro + + + + + + + + diff --git a/Task_7/src/robot_description/urdf/.vscode/settings.json b/Task_7/src/robot_description/urdf/.vscode/settings.json new file mode 100644 index 0000000..1fb641e --- /dev/null +++ b/Task_7/src/robot_description/urdf/.vscode/settings.json @@ -0,0 +1,5 @@ +{ + "python.autoComplete.extraPaths": [ + "/opt/ros/noetic/lib/python3/dist-packages" + ] +} \ No newline at end of file diff --git a/Task_7/src/robot_description/urdf/base.xacro b/Task_7/src/robot_description/urdf/base.xacro new file mode 100644 index 0000000..1ebd2c1 --- /dev/null +++ b/Task_7/src/robot_description/urdf/base.xacro @@ -0,0 +1,36 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/Task_7/src/robot_description/urdf/body.xacro b/Task_7/src/robot_description/urdf/body.xacro new file mode 100644 index 0000000..6e899fe --- /dev/null +++ b/Task_7/src/robot_description/urdf/body.xacro @@ -0,0 +1,37 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/Task_7/src/robot_description/urdf/camera.xacro b/Task_7/src/robot_description/urdf/camera.xacro new file mode 100644 index 0000000..d2b740a --- /dev/null +++ b/Task_7/src/robot_description/urdf/camera.xacro @@ -0,0 +1,37 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/Task_7/src/robot_description/urdf/caster.xacro b/Task_7/src/robot_description/urdf/caster.xacro new file mode 100644 index 0000000..c6f1ecd --- /dev/null +++ b/Task_7/src/robot_description/urdf/caster.xacro @@ -0,0 +1,46 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + 0 + 0 + 1.0 + 1.0 + + + + + + + + + + + + + + + + diff --git a/Task_7/src/robot_description/urdf/gazebo.xacro b/Task_7/src/robot_description/urdf/gazebo.xacro new file mode 100644 index 0000000..35f4944 --- /dev/null +++ b/Task_7/src/robot_description/urdf/gazebo.xacro @@ -0,0 +1,145 @@ + + + + + + + + + + 20 + + + wheel1_base_joint + + + wheel2_base_joint + + + 2.2 + + + 0.5 + + + 1.0 + + + 20 + + + cmd_vel + + + odom + + + odom + + + base_footprint + + + 1 + + + true + + + true + + + true + + + false + + + + + + + + + 30.0 + + + + 1.3962634 + + 800 + 800 + R8G8B8 + + + 0.02 + 300 + + + gaussian + + 0.0 + 0.007 + + + + + + true + 0.0 + autonomous_robot_1/camera1 + image_raw + camera_info + camera_link + 0.07 + 0.0 + 0.0 + 0.0 + 0.0 + 0.0 + + + + + + + + + + 0 0 0 0 0 0 + false + 40 + + + + 720 + 1 + -1.570796 + 1.570796 + + + + 0.10 + 30.0 + 0.01 + + + gaussian + + 0.0 + 0.01 + + + + /autonomous_robot_1/laser/scan + lidar_link + + + + + \ No newline at end of file diff --git a/Task_7/src/robot_description/urdf/inertial_macros.xacro b/Task_7/src/robot_description/urdf/inertial_macros.xacro new file mode 100644 index 0000000..6d3b5a4 --- /dev/null +++ b/Task_7/src/robot_description/urdf/inertial_macros.xacro @@ -0,0 +1,34 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Task_7/src/robot_description/urdf/lidar.xacro b/Task_7/src/robot_description/urdf/lidar.xacro new file mode 100644 index 0000000..71a5937 --- /dev/null +++ b/Task_7/src/robot_description/urdf/lidar.xacro @@ -0,0 +1,37 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/Task_7/src/robot_description/urdf/material.xacro b/Task_7/src/robot_description/urdf/material.xacro new file mode 100644 index 0000000..08b1415 --- /dev/null +++ b/Task_7/src/robot_description/urdf/material.xacro @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Task_7/src/robot_description/urdf/robot.jpeg b/Task_7/src/robot_description/urdf/robot.jpeg new file mode 100644 index 0000000000000000000000000000000000000000..921158c87216d6c46f5ba32a3a888b3efbeb3f75 GIT binary patch literal 59071 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 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 0 + 0 + 1.0 + 1.0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Task_7/src/robot_description/urdf/robot.xacro b/Task_7/src/robot_description/urdf/robot.xacro new file mode 100644 index 0000000..f51cc38 --- /dev/null +++ b/Task_7/src/robot_description/urdf/robot.xacro @@ -0,0 +1,79 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/Task_7/src/robot_description/urdf/wheel.xacro b/Task_7/src/robot_description/urdf/wheel.xacro new file mode 100644 index 0000000..05ddc9d --- /dev/null +++ b/Task_7/src/robot_description/urdf/wheel.xacro @@ -0,0 +1,37 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/Task_7/src/robot_gazebo/CMakeLists.txt b/Task_7/src/robot_gazebo/CMakeLists.txt new file mode 100644 index 0000000..f7c89a3 --- /dev/null +++ b/Task_7/src/robot_gazebo/CMakeLists.txt @@ -0,0 +1,202 @@ +cmake_minimum_required(VERSION 3.0.2) +project(robot_gazebo) + +## 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) + +## 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 # Or other packages containing 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 gazebo_robot +# CATKIN_DEPENDS other_catkin_pkg +# 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}/gazebo_robot.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(${PROJECT_NAME}_node src/gazebo_robot_node.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(${PROJECT_NAME}_node +# ${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_gazebo_robot.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) diff --git a/Task_7/src/robot_gazebo/launch/robot.launch b/Task_7/src/robot_gazebo/launch/robot.launch new file mode 100644 index 0000000..df2e7ee --- /dev/null +++ b/Task_7/src/robot_gazebo/launch/robot.launch @@ -0,0 +1,48 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/Task_7/src/robot_gazebo/models/wall/model.config b/Task_7/src/robot_gazebo/models/wall/model.config new file mode 100644 index 0000000..c684922 --- /dev/null +++ b/Task_7/src/robot_gazebo/models/wall/model.config @@ -0,0 +1,11 @@ + + + wall + 1.0 + model.sdf + + + + + + diff --git a/Task_7/src/robot_gazebo/models/wall/model.sdf b/Task_7/src/robot_gazebo/models/wall/model.sdf new file mode 100644 index 0000000..e03015c --- /dev/null +++ b/Task_7/src/robot_gazebo/models/wall/model.sdf @@ -0,0 +1,268 @@ + + + + -0.16666 -1.28658 0 0 -0 0 + + + + + 67 0.15 2.5 + + + 0 0 1.25 0 -0 0 + + + 0 0 1.25 0 -0 0 + + + 67 0.15 2.5 + + + + + 1 1 1 1 + + + 0 + + + 0.250001 16.55 0 0 -0 0 + + + + + + 33.25 0.15 2.5 + + + 0 0 1.25 0 -0 0 + + + 0 0 1.25 0 -0 0 + + + 33.25 0.15 2.5 + + + + + 1 1 1 1 + + + 0 + + + 33.675 -0 0 0 -0 -1.5708 + + + + + + 17 0.15 2.5 + + + 0 0 1.25 0 -0 0 + + + 0 0 1.25 0 -0 0 + + + 17 0.15 2.5 + + + + + 1 1 1 1 + + + 0 + + + 10.2825 5.37792 0 0 -0 0 + + + + + + 12.25 0.15 2.5 + + + 0 0 1.25 0 -0 0 + + + 0 0 1.25 0 -0 0 + + + 12.25 0.15 2.5 + + + + + 1 1 1 1 + + + 0 + + + 13.668 -10.2778 0 0 -0 1.5708 + + + + + + 67.5 0.15 2.5 + + + 0 0 1.25 0 -0 0 + + + 0 0 1.25 0 -0 0 + + + 67.5 0.15 2.5 + + + + + 1 1 1 1 + + + 0 + + + 1e-06 -16.55 0 0 -0 3.14159 + + + + + + 24.25 0.15 2.5 + + + 0 0 1.25 0 -0 0 + + + 0 0 1.25 0 -0 0 + + + 24.25 0.15 2.5 + + + + + 1 1 1 1 + + + 0 + + + -33.675 -4.5 0 0 -0 1.5708 + + + + + + 18 0.15 2.5 + + + 0 0 1.25 0 -0 0 + + + 0 0 1.25 0 -0 0 + + + 18 0.15 2.5 + + + + + 1 1 1 1 + + + 0 + + + -24.75 7.55 0 0 -0 0 + + + + + + 15.25 0.15 2.5 + + + 0 0 1.25 0 -0 0 + + + 0 0 1.25 0 -0 0 + + + 15.25 0.15 2.5 + + + + + 1 1 1 1 + + + 0 + + + -15.3795 -8.69805 0 0 -0 1.5708 + + + + + + 17.75 0.15 2.5 + + + 0 0 1.25 0 -0 0 + + + 0 0 1.25 0 -0 0 + + + 17.75 0.15 2.5 + + + + + 1 1 1 1 + + + 0 + + + 1.53826 7.5106 0 0 -0 -1.5708 + + 1 + + diff --git a/Task_7/src/robot_gazebo/package.xml b/Task_7/src/robot_gazebo/package.xml new file mode 100644 index 0000000..f0e64c9 --- /dev/null +++ b/Task_7/src/robot_gazebo/package.xml @@ -0,0 +1,59 @@ + + + robot_gazebo + 0.0.0 + The gazebo_robot package + + + + + nomeer + + + + + + TODO + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + catkin + + + + + + + + diff --git a/Task_7/src/robot_gazebo/worlds/world/model.config b/Task_7/src/robot_gazebo/worlds/world/model.config new file mode 100644 index 0000000..b8b07d9 --- /dev/null +++ b/Task_7/src/robot_gazebo/worlds/world/model.config @@ -0,0 +1,11 @@ + + + world + 1.0 + model.sdf + + + + + + diff --git a/Task_7/src/robot_gazebo/worlds/world/model.sdf b/Task_7/src/robot_gazebo/worlds/world/model.sdf new file mode 100644 index 0000000..767088f --- /dev/null +++ b/Task_7/src/robot_gazebo/worlds/world/model.sdf @@ -0,0 +1,239 @@ + + + + -9.70447 -0.465234 0 0 -0 0 + + + + + 47.75 0.15 2.5 + + + 0 0 1.25 0 -0 0 + + + 0 0 1.25 0 -0 0 + + + 47.75 0.15 2.5 + + + + + 1 1 1 1 + + + 0 + + + 0 15.175 0 0 -0 0 + + + + + + 30.5 0.15 2.5 + + + 0 0 1.25 0 -0 0 + + + 0 0 1.25 0 -0 0 + + + 30.5 0.15 2.5 + + + + + 1 1 1 1 + + + 0 + + + 23.8 -0 0 0 -0 -1.5708 + + + + + + 47.75 0.15 2.5 + + + 0 0 1.25 0 -0 0 + + + 0 0 1.25 0 -0 0 + + + 47.75 0.15 2.5 + + + + + 1 1 1 1 + + + 0 + + + 0 -15.175 0 0 -0 3.14159 + + + + + + 19.75 0.15 2.5 + + + 0 0 1.25 0 -0 0 + + + 0 0 1.25 0 -0 0 + + + 19.75 0.15 2.5 + + + + + 1 1 1 1 + + + 0 + + + -23.8 -5.375 0 0 -0 1.5708 + + + + + + 19 0.15 2.5 + + + 0 0 1.25 0 -0 0 + + + 0 0 1.25 0 -0 0 + + + 19 0.15 2.5 + + + + + 1 1 1 1 + + + 0 + + + 14.3058 -1.51788 0 0 -0 3.14159 + + + + + + 10 0.15 2.5 + + + 0 0 1.25 0 -0 0 + + + 0 0 1.25 0 -0 0 + + + 10 0.15 2.5 + + + + + 1 1 1 1 + + + 0 + + + 5.13235 -10.1394 0 0 -0 1.5708 + + + + + + 15.25 0.15 2.5 + + + 0 0 1.25 0 -0 0 + + + 0 0 1.25 0 -0 0 + + + 15.25 0.15 2.5 + + + + + 1 1 1 1 + + + 0 + + + -16.25 4.425 0 0 -0 0 + + + + + + 8.75 0.15 2.5 + + + 0 0 1.25 0 -0 0 + + + 0 0 1.25 0 -0 0 + + + 8.75 0.15 2.5 + + + + + 1 1 1 1 + + + 0 + + + -1.76399 10.4974 0 0 -0 -1.5708 + + 1 + + diff --git a/Task_7/src/robot_gazebo/worlds/world/robot_world b/Task_7/src/robot_gazebo/worlds/world/robot_world new file mode 100644 index 0000000..c71c8cf --- /dev/null +++ b/Task_7/src/robot_gazebo/worlds/world/robot_world @@ -0,0 +1,1976 @@ + + + + 1 + 0 0 10 0 -0 0 + 0.8 0.8 0.8 1 + 0.2 0.2 0.2 1 + + 1000 + 0.9 + 0.01 + 0.001 + + -0.5 0.1 -0.9 + + 0 + 0 + 0 + + + + 1 + + + + + 0 0 1 + 100 100 + + + + + 65535 + + + + + 100 + 50 + + + + + + + + 10 + + + 0 + + + 0 0 1 + 100 100 + + + + + + + 0 + 0 + 0 + + + 0 0 -9.8 + 6e-06 2.3e-05 -4.2e-05 + + + 0.001 + 1 + 1000 + + + 0.4 0.4 0.4 1 + 0.7 0.7 0.7 1 + 1 + + + + EARTH_WGS84 + 0 + 0 + 0 + 0 + + + -0.16666 -1.28658 0 0 -0 0 + + + + + 67 0.15 2.5 + + + 0 0 1.25 0 -0 0 + 10 + + + + + + + + + + + + + + + 0 0 1.25 0 -0 0 + + + 67 0.15 2.5 + + + + + 1 1 1 1 + + + 0 + + + 0.250001 16.55 0 0 -0 0 + 0 + 0 + 0 + + + + + + 33.25 0.15 2.5 + + + 0 0 1.25 0 -0 0 + 10 + + + + + + + + + + + + + + + 0 0 1.25 0 -0 0 + + + 33.25 0.15 2.5 + + + + + 1 1 1 1 + + + 0 + + + 33.675 -0 0 0 -0 -1.5708 + 0 + 0 + 0 + + + + + + 17 0.15 2.5 + + + 0 0 1.25 0 -0 0 + 10 + + + + + + + + + + + + + + + 0 0 1.25 0 -0 0 + + + 17 0.15 2.5 + + + + + 1 1 1 1 + + + 0 + + + 10.2825 5.37792 0 0 -0 0 + 0 + 0 + 0 + + + + + + 12.25 0.15 2.5 + + + 0 0 1.25 0 -0 0 + 10 + + + + + + + + + + + + + + + 0 0 1.25 0 -0 0 + + + 12.25 0.15 2.5 + + + + + 1 1 1 1 + + + 0 + + + 13.668 -10.2778 0 0 -0 1.5708 + 0 + 0 + 0 + + + + + + 67.5 0.15 2.5 + + + 0 0 1.25 0 -0 0 + 10 + + + + + + + + + + + + + + + 0 0 1.25 0 -0 0 + + + 67.5 0.15 2.5 + + + + + 1 1 1 1 + + + 0 + + + 1e-06 -16.55 0 0 -0 3.14159 + 0 + 0 + 0 + + + + + + 24.25 0.15 2.5 + + + 0 0 1.25 0 -0 0 + 10 + + + + + + + + + + + + + + + 0 0 1.25 0 -0 0 + + + 24.25 0.15 2.5 + + + + + 1 1 1 1 + + + 0 + + + -33.675 -4.5 0 0 -0 1.5708 + 0 + 0 + 0 + + + + + + 18 0.15 2.5 + + + 0 0 1.25 0 -0 0 + 10 + + + + + + + + + + + + + + + 0 0 1.25 0 -0 0 + + + 18 0.15 2.5 + + + + + 1 1 1 1 + + + 0 + + + -24.75 7.55 0 0 -0 0 + 0 + 0 + 0 + + + + + + 15.25 0.15 2.5 + + + 0 0 1.25 0 -0 0 + 10 + + + + + + + + + + + + + + + 0 0 1.25 0 -0 0 + + + 15.25 0.15 2.5 + + + + + 1 1 1 1 + + + 0 + + + -15.3795 -8.69805 0 0 -0 1.5708 + 0 + 0 + 0 + + + + + + 17.75 0.15 2.5 + + + 0 0 1.25 0 -0 0 + 10 + + + + + + + + + + + + + + + 0 0 1.25 0 -0 0 + + + 17.75 0.15 2.5 + + + + + 1 1 1 1 + + + 0 + + + 1.53826 7.5106 0 0 -0 -1.5708 + 0 + 0 + 0 + + 1 + + + 48 461000000 + 51 370077585 + 1676932396 715451909 + 48461 + + -6.26637 3.38451 0.011376 2e-06 -0 0 + 1 1 1 + + -6.26637 3.38451 0.011376 2e-06 -0 0 + 0 0 0 0 -0 0 + 0 0 -9.8 0 -0 0 + 0 0 -9.8 0 -0 0 + + + + 2.58583 2.05128 0 0 -0 0 + 1 1 1 + + 2.58583 2.05128 0 0 -0 0 + 0 0 0 0 -0 0 + 0 0 0 0 -0 0 + 0 0 0 0 -0 0 + + + + 10.0222 9.77976 0 0 -0 0 + 1 1 1 + + 10.0222 9.77976 0.01 0 -0 0 + 0 0 0 0 -0 0 + 0 0 0 0 -0 0 + 0 0 0 0 -0 0 + + + + 8.39901 -7.23188 0 0 -0 0 + 1 1 1 + + 8.39901 -7.23188 1.5 0 -0 0 + 0 0 0 0 -0 0 + 0 0 0 0 -0 0 + 0 0 0 0 -0 0 + + + + 4.07914 -14.3933 0 0 -0 0 + 1 1 1 + + 4.07914 -14.3933 0 0 -0 0 + 0 0 0 0 -0 0 + 0 0 0 0 -0 0 + 0 0 0 0 -0 0 + + + + 1.8941 -14.2886 0 0 -0 0 + 1 1 1 + + 1.8941 -14.2886 0 0 -0 0 + 0 0 0 0 -0 0 + 0 0 0 0 -0 0 + 0 0 0 0 -0 0 + + + + -0.087354 -14.138 0 0 -0 0 + 1 1 1 + + -0.087354 -14.138 0 0 -0 0 + 0 0 0 0 -0 0 + 0 0 0 0 -0 0 + 0 0 0 0 -0 0 + + + + -4.90067 -10.6641 0.01 -0 1e-06 -1.7e-05 + 1 1 1 + + -4.90067 -10.6641 0.51 -0 1e-06 -1.7e-05 + 0 0 0 0 -0 0 + 1.07556 0.034255 -0.19878 3.07098 0.991637 3.13739 + 1.07556 0.034255 -0.19878 0 -0 0 + + + + -22.2918 1.61794 0.01 -0 -0 -2e-05 + 1 1 1 + + -22.2918 1.61794 0.51 -0 -0 -2e-05 + 0 0 0 0 -0 0 + -1.07557 -0.034262 0.198792 -3.07096 -0.991623 -3.1374 + -1.07557 -0.034262 0.198792 0 -0 0 + + + + 29.1283 5.9137 0.01 -0 -0 -1.7e-05 + 1 1 1 + + 29.1283 5.9137 0.51 -0 -0 -1.7e-05 + 0 0 0 0 -0 0 + -1.07556 -0.034256 0.19878 -3.07098 -0.991637 -3.13739 + -1.07556 -0.034256 0.19878 0 -0 0 + + + + 20.8597 8.79033 0.01 0 1e-06 -1.6e-05 + 1 1 1 + + 20.8597 8.79033 0.51 0 1e-06 -1.6e-05 + 0 0 0 0 -0 0 + 1.07556 0.034256 -0.19878 3.07097 0.991637 3.13739 + 1.07556 0.034256 -0.19878 0 -0 0 + + + + 23.9919 -6.3606 0 0 -0 0 + 1 1 1 + + 23.9919 -6.3606 0 0 -0 0 + 0 0 0 0 -0 0 + 0 0 0 0 -0 0 + 0 0 0 0 -0 0 + + + + 0 0 0 0 -0 0 + 1 1 1 + + 0 0 0 0 -0 0 + 0 0 0 0 -0 0 + 0 0 0 0 -0 0 + 0 0 0 0 -0 0 + + + + -8.47098 -11.1519 0.012972 1.57143 0.786097 0.786849 + 1 1 1 + + -8.44904 -11.1738 0.012959 1.57143 0.786097 0.786849 + 0 0 0 0 -0 0 + 0 -0 0 0 -0 0 + 0 -0 0 0 -0 0 + + + + 29.9324 -14.7822 0 0 -0 0 + 1 1 1 + + 29.9324 -14.7822 0 0 -0 0 + 0 0 0 0 -0 0 + 0 0 0 0 -0 0 + 0 0 0 0 -0 0 + + + + -24.7769 -10.7631 0 0 -0 0 + 1 1 1 + + -24.7769 -10.7631 0 0 -0 0 + 0 0 0 0 -0 0 + 0 0 0 0 -0 0 + 0 0 0 0 -0 0 + + + + 10.3262 -14.195 1 0 -0 0 + 1 1 1 + + 10.3262 -14.195 1 0 -0 0 + 0 0 0 0 -0 0 + 0 0 0 0 -0 0 + 0 0 0 0 -0 0 + + + + -0.16666 -1.28658 0 0 -0 0 + 1 1 1 + + 0.083341 15.2634 0 0 -0 0 + 0 0 0 0 -0 0 + 0 0 0 0 -0 0 + 0 0 0 0 -0 0 + + + 33.5083 -1.28658 0 0 0 -1.5708 + 0 0 0 0 -0 0 + 0 0 0 0 -0 0 + 0 0 0 0 -0 0 + + + 10.1158 4.09134 0 0 -0 0 + 0 0 0 0 -0 0 + 0 0 0 0 -0 0 + 0 0 0 0 -0 0 + + + 13.5013 -11.5644 0 0 -0 1.5708 + 0 0 0 0 -0 0 + 0 0 0 0 -0 0 + 0 0 0 0 -0 0 + + + -0.166659 -17.8366 0 0 -0 3.14159 + 0 0 0 0 -0 0 + 0 0 0 0 -0 0 + 0 0 0 0 -0 0 + + + -33.8417 -5.78658 0 0 -0 1.5708 + 0 0 0 0 -0 0 + 0 0 0 0 -0 0 + 0 0 0 0 -0 0 + + + -24.9167 6.26342 0 0 -0 0 + 0 0 0 0 -0 0 + 0 0 0 0 -0 0 + 0 0 0 0 -0 0 + + + -15.5462 -9.98463 0 0 -0 1.5708 + 0 0 0 0 -0 0 + 0 0 0 0 -0 0 + 0 0 0 0 -0 0 + + + 1.3716 6.22402 0 0 0 -1.5708 + 0 0 0 0 -0 0 + 0 0 0 0 -0 0 + 0 0 0 0 -0 0 + + + + 6.68735 -6.70891 0.011937 3.13966 0.00065 -2.63361 + 1 1 1 + + 6.68735 -6.7089 0.010937 3.13966 0.00065 -2.63361 + 0 0 0 0 -0 0 + -0.002644 -0.000349 -0.00345 -2.80343 -0.48799 3.13547 + -3.2e-05 -4e-06 -4.2e-05 0 -0 0 + + + + 0 0 10 0 -0 0 + + + + + 0 0 0.5 0 -0 0 + + + + model://cube_20k/meshes/cube_20k.stl + 0.5 0.5 0.5 + + + 10 + + + + + + + + + + + + + + + + + model://cube_20k/meshes/cube_20k.stl + 0.5 0.5 0.5 + + + + 0 + + 0 0 0 0 -0 0 + + 1 + 0 + 0 + 1 + 0 + 1 + + 1 + + 0 + 0 + + -4.90068 -10.6641 0 0 -0 0 + + + + + + + 1.5 1.5 1.5 + model://dumpster/meshes/dumpster.dae + + + 10 + + + + + + + + + + + + + + + + + 1.5 1.5 1.5 + model://dumpster/meshes/dumpster.dae + + + + + + + 0 + + 0 0 0 0 -0 0 + + 1 + 0 + 0 + 1 + 0 + 1 + + 1 + + 0 + 0 + + -6.26637 3.38451 0 0 -0 0 + + + 1 + + + + + 3 3 2.5 + model://gazebo/meshes/gazebo.dae + + + 10 + + + + + + + + + + + + + + + + + 3 3 2.5 + model://gazebo/meshes/gazebo.dae + + + + 0 + 0 + 0 + + 23.9919 -6.3606 0 0 -0 0 + + + + 0 0 0.031 0 -0 0 + + 0.0121 + + 3.90898e-06 + 0 + 0 + 3.90898e-06 + 0 + 6.58845e-08 + + 0 0 0 0 -0 0 + + + + + 0.0033 + 0.062 + + + + + 0.305 + 2e+11 + + 100000 + 100 + 100 + 0.001 + + + + + 1 + 0 + 0.01 + + + + + + + 10 + + + + + 0.0033 + 0.062 + + + + + + + 0 + 0 + 0 + + -8.48915 -11.1338 0 0 -0 0 + + + + 0 0 0.001 0 -0 0 + + 0.0122 + + 1.08758e-06 + 0 + 0 + 1.08758e-06 + 0 + 2.16703e-06 + + 0 0 0 0 -0 0 + + + + + model://washer/meshes/washer.dae + + + + + 0.305 + 2e+11 + + 100000 + 100 + 100 + 0.001 + + + + + 1 + 0 + 0.01 + + + + + + + 10 + + + + + model://washer/meshes/washer.dae + + + + + + + 0 + 0 + 0 + + 6.78042 -6.71942 0 0 -0 0 + + + 1 + 10.3262 -14.195 1 0 -0 0 + + + + + model://stop_light/meshes/stop_light.obj + 0.01 0.01 0.01 + + + 10 + + + + + + + + + + + + + + + + + model://stop_light/meshes/stop_light.obj + 0.01 0.01 0.01 + + + + + -0.001123 -0.082251 -0.147514 0 -0 0 + + + 0.1012 + + + + + 1 0 0 1 + 1 0 0 1 + + + + -0.001123 -0.082251 -0.402 0 -0 0 + + + 0.1012 + + + + + 1 1 0 1 + 1 1 0 1 + + + + -0.001123 -0.082251 -0.655 0 -0 0 + + + 0.1012 + + + + + 0 1 0 1 + 0 1 0 1 + + + 0 + 0 + 0 + + + + 1 + + + + + model://post_office/meshes/post_office.dae + + + 10 + + + + + + + + + + + + + + + + + model://post_office/meshes/post_office.dae + + + + 0 + 0 + 0 + + -24.7769 -10.7631 0 0 -0 0 + + + 1 + + 0 0 0.01 0 -0 0 + + + + 0 0 1 + 10.4 7.4 + + + + + + 100 + 50 + + + + + + + + + + + 10 + + + 0 + + + 0 0 1 + 10.4 7.4 + + + + + + + + 0 3 0.011 0 -0 0 + 0 + + + 0 0 1 + 9.05 0.05 + + + + + + + + 0 -3 0.011 0 -0 0 + 0 + + + 0 0 1 + 9.05 0.05 + + + + + + + + -4.5 0 0.011 0 -0 0 + 0 + + + 0 0 1 + 0.05 6.05 + + + + + + + + 4.5 0 0.011 0 -0 0 + 0 + + + 0 0 1 + 0.05 6.05 + + + + + + + + 0 0 0.011 0 -0 0 + 0 + + + 0 0 1 + 0.05 6.05 + + + + + + + + -3.9 0 0.011 0 -0 0 + 0 + + + 0 0 1 + 0.05 2.25 + + + + + + + + -4.2 1.1 0.011 0 -0 0 + 0 + + + 0 0 1 + 0.65 0.05 + + + + + + + + -4.2 -1.1 0.011 0 -0 0 + 0 + + + 0 0 1 + 0.65 0.05 + + + + + + + + 3.9 0 0.011 0 -0 0 + 0 + + + 0 0 1 + 0.05 2.25 + + + + + + + + 4.2 1.1 0.011 0 -0 0 + 0 + + + 0 0 1 + 0.65 0.05 + + + + + + + + 4.2 -1.1 0.011 0 -0 0 + 0 + + + 0 0 1 + 0.65 0.05 + + + + + + + + -3.2 0 0.01 0 -0 0 + 0 + + + 0.05 + 0.0005 + + + + + + + + 3.2 0 0.01 0 -0 0 + 0 + + + 0.05 + 0.0005 + + + + + + + + 0 0 0.01 0 -0 0 + 0 + + + 0.05 + 0.0005 + + + + + + + + 0 0 0.005 0 -0 0 + 0 + + + 1 1 0.75 + model://robocup14_spl_field/meshes/circle.dae + + + + + + + 0 + 0 + 0 + + 10.0222 9.77976 0 0 -0 0 + + + 1 + + + + + model://oak_tree/meshes/oak_tree.dae + + + 10 + + + + + + + + + + + + + + + + + model://oak_tree/meshes/oak_tree.dae + + Branch + + + + + + + + + + + model://oak_tree/meshes/oak_tree.dae + + Bark + + + + + + + + 0 + 0 + 0 + + 29.9324 -14.7822 0 0 -0 0 + + + 1 + + + + + model://lamp_post/meshes/lamp_post.dae + 3 3 3 + + + 10 + + + + + + + + + + + + + + + + + model://lamp_post/meshes/lamp_post.dae + 3 3 3 + + + + 0 + 0 + 0 + + 2.58583 2.05128 0 0 -0 0 + + + + 0 0 0.5 0 -0 0 + + + + model://cube_20k/meshes/cube_20k.stl + 0.5 0.5 0.5 + + + 10 + + + + + + + + + + + + + + + + + model://cube_20k/meshes/cube_20k.stl + 0.5 0.5 0.5 + + + + 0 + + 0 0 0 0 -0 0 + + 1 + 0 + 0 + 1 + 0 + 1 + + 1 + + 0 + 0 + + -22.2918 1.61794 0 0 -0 0 + + + + 0 0 0.5 0 -0 0 + + + + model://cube_20k/meshes/cube_20k.stl + 0.5 0.5 0.5 + + + 10 + + + + + + + + + + + + + + + + + model://cube_20k/meshes/cube_20k.stl + 0.5 0.5 0.5 + + + + 0 + + 0 0 0 0 -0 0 + + 1 + 0 + 0 + 1 + 0 + 1 + + 1 + + 0 + 0 + + 29.1283 5.9137 0 0 -0 0 + + + + 0 0 0.5 0 -0 0 + + + + model://cube_20k/meshes/cube_20k.stl + 0.5 0.5 0.5 + + + 10 + + + + + + + + + + + + + + + + + model://cube_20k/meshes/cube_20k.stl + 0.5 0.5 0.5 + + + + 0 + + 0 0 0 0 -0 0 + + 1 + 0 + 0 + 1 + 0 + 1 + + 1 + + 0 + 0 + + 20.8597 8.79033 0 0 -0 0 + + + 1 + + + 0 0 0.755 0 -0 0 + + + 0.913 0.913 0.04 + + + 10 + + + + + + + + + + + + + + + 0 0 0.37 0 -0 0 + + + 0.042 0.042 0.74 + + + 10 + + + + + + + + + + + + + + + 0 0 0.02 0 -0 0 + + + 0.56 0.56 0.04 + + + 10 + + + + + + + + + + + + + + + + + model://cafe_table/meshes/cafe_table.dae + + + + 0 + 0 + 0 + + 4.07914 -14.3933 0 0 -0 0 + + + 1 + + + 0 0 0.755 0 -0 0 + + + 0.913 0.913 0.04 + + + 10 + + + + + + + + + + + + + + + 0 0 0.37 0 -0 0 + + + 0.042 0.042 0.74 + + + 10 + + + + + + + + + + + + + + + 0 0 0.02 0 -0 0 + + + 0.56 0.56 0.04 + + + 10 + + + + + + + + + + + + + + + + + model://cafe_table/meshes/cafe_table.dae + + + + 0 + 0 + 0 + + 1.8941 -14.2886 0 0 -0 0 + + + 1 + + + 0 0 0.755 0 -0 0 + + + 0.913 0.913 0.04 + + + 10 + + + + + + + + + + + + + + + 0 0 0.37 0 -0 0 + + + 0.042 0.042 0.74 + + + 10 + + + + + + + + + + + + + + + 0 0 0.02 0 -0 0 + + + 0.56 0.56 0.04 + + + 10 + + + + + + + + + + + + + + + + + model://cafe_table/meshes/cafe_table.dae + + + + 0 + 0 + 0 + + -0.087354 -14.138 0 0 -0 0 + + + 1 + + 0 0 1.5 0 -0 0 + + + + 3 1 3 + + + 10 + + + + + + + + + + + + + + + + + model://brick_box_3x1x3/meshes/simple_box.dae + 3 1 3 + + + + + + + 0 + 0 + 0 + + 8.39901 -7.23188 0 0 -0 0 + + + + 20.517 48.7141 63.3914 0 0.795643 -1.82699 + orbit + perspective + + + +