diff --git a/labs/catkin_ws/src/l2e4/CMakeLists.txt b/labs/catkin_ws/src/l2e4/CMakeLists.txt new file mode 100644 index 0000000000000000000000000000000000000000..3fe3d06bd3671f72af70617c0472f2939e180140 --- /dev/null +++ b/labs/catkin_ws/src/l2e4/CMakeLists.txt @@ -0,0 +1,207 @@ +cmake_minimum_required(VERSION 3.0.2) +project(l2e4) + +## 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 + turtlesim +) + +## 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( + +) + +########### +## Build ## +########### + +## Specify additional locations of header files +## Your package locations should be listed before other locations +include_directories( + ${catkin_INCLUDE_DIRS} + ${PROJECT_SOURCE_DIR}/include +) + +## Declare a C++ library +# add_library(${PROJECT_NAME} +# src/${PROJECT_NAME}/l2e4.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(turtle1_pub ~/3rdYear/RWR/Robot-With-Reflexes/labs/catkin_ws/src/l2e4/turtle1_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(turtle1_pub + ${${PROJECT_NAME}_EXPORTED_TARGETS} + ${catkin_EXPORTED_TARGETS} +) + +## Specify libraries to link a library or executable target against +target_link_libraries(turtle1_pub + ${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_l2e4.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/labs/catkin_ws/src/l2e4/scripts/turtle1_pub.py b/labs/catkin_ws/src/l2e4/scripts/turtle1_pub.py new file mode 100644 index 0000000000000000000000000000000000000000..63a6a5be8ff0089cd5e9c906ce737a5e31fb93a5 --- /dev/null +++ b/labs/catkin_ws/src/l2e4/scripts/turtle1_pub.py @@ -0,0 +1,13 @@ +#!/usr/bin/env python + +import rospy +from turtlesim.msg import Twist + +def callback(data): + print(data) + +if __name__ == '__main__': + rospy.init_node('turtle1_pub_python') + rospy.Subscriber('turtle1/cmd_vel', Twist, callback, queue_size=1) + rospy.spin() + \ No newline at end of file diff --git a/labs/catkin_ws/src/l2e4/teleport_turtle3.py b/labs/catkin_ws/src/l2e4/teleport_turtle3.py new file mode 100644 index 0000000000000000000000000000000000000000..5d90683cc455823456cb5c3947ae52ef2d0eb06b --- /dev/null +++ b/labs/catkin_ws/src/l2e4/teleport_turtle3.py @@ -0,0 +1,7 @@ +from turtlesim.srv import TeleportAbsolute, Spawn + +spawn_client = rospy.ServiceProxy('/spawn', Spawn) +spawn_client(x_pos, y_pos, theta, "turtle3") + +teleport_client = rospy.ServiceProxy('/turtle3/teleport_absolute', TeleportAbsolute) +teleport_client(x_pos, y_pos, theta) \ No newline at end of file diff --git a/labs/catkin_ws/src/l2e4/turtle1_pub.cpp b/labs/catkin_ws/src/l2e4/turtle1_pub.cpp new file mode 100644 index 0000000000000000000000000000000000000000..7b1ebfed3f96d595130b9f23175ad23a9496aa4b --- /dev/null +++ b/labs/catkin_ws/src/l2e4/turtle1_pub.cpp @@ -0,0 +1,55 @@ +#include <ros/ros.h> +#include <turtlesim/Pose.h> +#include <turtlesim/Spawn.h> +#include <geometry_msgs/PoseStamped.h> +#include <geometry_msgs/Twist.h> +#include <tf/transform_datatypes.h> + +//#define INVERT(x) x * -1 +ros::Publisher turtle2_cmd; + +void velocityCallback(const geometry_msgs::Twist& msg) +{ + geometry_msgs::Twist t2_cmd_vel; + //turtle1_cmd = nh1.subscribe("turtle1/cmd_vel", 1000, &velocityCallback); + t2_cmd_vel.linear.x = msg.linear.x * -1; + t2_cmd_vel.linear.y = msg.linear.y * -1; + t2_cmd_vel.angular.x = msg.angular.x * -1; + t2_cmd_vel.angular.y = msg.angular.y * -1; + t2_cmd_vel.angular.z = msg.angular.z * -1; + + + ROS_INFO_STREAM("output:linear.x " << t2_cmd_vel.linear.x << " linear.y " << t2_cmd_vel.linear.y ); + turtle2_cmd.publish(t2_cmd_vel); +} + +int main(int argc, char** argv) +{ + ros::init(argc, argv, "command_pub_sub"); + ros::NodeHandle nh1; + ros::NodeHandle nh2; + turtle2_cmd = nh2.advertise<geometry_msgs::Twist>("turtle2/cmd_vel", 1000); + ros::Subscriber turtle1_cmd = nh1.subscribe("turtle1/cmd_vel", 1000, &velocityCallback); + //ros::Publisher turtle1_cmd = nh1.advertise<geometry_msgs::Twist>("turtle1/cmd_vel", 1000); + + ros::Rate loop_rate(10); + //int count(0); + + /*while(ros::ok()) + { + geometry_msgs::Twist t2_cmd_vel; + //turtle1_cmd = nh1.subscribe("turtle1/cmd_vel", 1000, &velocityCallback); + t2_cmd_vel.linear.x = t2_cmd_vel.linear.x * -1; + t2_cmd_vel.linear.y = t2_cmd_vel.linear.y * -1; + t2_cmd_vel.angular.x = t2_cmd_vel.angular.x * -1; + t2_cmd_vel.angular.y = t2_cmd_vel.angular.y * -1; + velocityCallback(t2_cmd_vel, turtle2_cmd); + //turtle2_cmd.publish(t2_cmd_vel); + ros::spinOnce(); + loop_rate.sleep(); + }*/ + + ros::spin(); + + return 0; +} \ No newline at end of file diff --git a/labs/catkin_ws/src/l2e4/turtlesim_spawn.launch b/labs/catkin_ws/src/l2e4/turtlesim_spawn.launch new file mode 100644 index 0000000000000000000000000000000000000000..897f805a25e2148b52a3838fc3ac2ba53bed795b --- /dev/null +++ b/labs/catkin_ws/src/l2e4/turtlesim_spawn.launch @@ -0,0 +1,19 @@ +<launch> + <node + pkg="turtlesim" + type="turtlesim_node" + name="turtlesim" + respawn="true" + /> + <node + pkg="rosservice" + type="rosservice" + name="spawn" + args="call spawn --wait 5.5 5.5 0 'turtle2'" + /> + <node + pkg="l2e4" + type="turtle1_pub" + name="turtle1_pub" + /> +</launch> \ No newline at end of file diff --git a/labs/catkin_ws/src/lab2/CMakeLists.txt b/labs/catkin_ws/src/lab2/CMakeLists.txt new file mode 100644 index 0000000000000000000000000000000000000000..e9a7f19d2e09b6d6bb39eb74019f1944dd1e043b --- /dev/null +++ b/labs/catkin_ws/src/lab2/CMakeLists.txt @@ -0,0 +1,61 @@ +cmake_minimum_required(VERSION 2.8.3) + +project(lab2) + +add_compile_options(-std=c++11) + +find_package(catkin REQUIRED COMPONENTS + roscpp + rospy + std_msgs + turtlesim + rviz +) + +catkin_package() + +include_directories( + ${PROJECT_SOURCE_DIR}/include + ${catkin_INCLUDE_DIRS} +) + +add_executable(pose_listener ~/3rdYear/RWR/Robot-With-Reflexes/labs/catkin_ws/src/lab2/pose_listener.cpp) +add_executable(turtle_map ~/3rdYear/RWR/Robot-With-Reflexes/labs/catkin_ws/src/lab2/turtle_map.cpp) +add_executable(pose_rviz ~/3rdYear/RWR/Robot-With-Reflexes/labs/catkin_ws/src/lab2/pose_rviz.cpp) +#add_executable(wrap_rviz ~/3rdYear/RWR/Robot-With-Reflexes/labs/catkin_ws/src/lab2/wrap_rviz.h) + +add_dependencies(pose_listener + ${${PROJECT_NAME}_EXPORTED_TARGETS} + ${catkin_EXPORTED_TARGETS} +) + +add_dependencies(turtle_map + ${${PROJECT_NAME}_EXPORTED_TARGETS} + ${catkin_EXPORTED_TARGETS} +) + +#add_dependencies(wrap_rviz +# ${${PROJECT_NAME}_EXPORTED_TARGETS} +# ${catkin_EXPORTED_TARGETS} +#) + +add_dependencies(pose_rviz + ${${PROJECT_NAME}_EXPORTED_TARGETS} + ${catkin_EXPORTED_TARGETS} +) + +target_link_libraries(pose_listener + ${catkin_LIBRARIES} +) + +target_link_libraries(turtle_map + ${catkin_LIBRARIES} +) + +target_link_libraries(pose_rviz + ${catkin_LIBRARIES} +) + +#target_link_libraries(wrap_rviz +# ${catkin_LIBRARIES} +#) \ No newline at end of file diff --git a/labs/catkin_ws/src/lab2/CMakeLists.txt~ b/labs/catkin_ws/src/lab2/CMakeLists.txt~ new file mode 100644 index 0000000000000000000000000000000000000000..f4d0e64a645307b5102eb534176bed2c05a10dbe --- /dev/null +++ b/labs/catkin_ws/src/lab2/CMakeLists.txt~ @@ -0,0 +1,206 @@ +cmake_minimum_required(VERSION 3.0.2) +project(lab2) + +## 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 lab2 +# 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}/lab2.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(pose_listener /home/chris/3rdYear/RWR/Robot-With-Reflexes/labs/catkin_ws/src/lab2/pose_listener.cpp) +#add_executable(turtle_map /home/chris/3rdYear/RWR/Robot-With-Reflexes/labs/catkin_ws/src/lab2/turtle_map.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(pose_listener ${${PROJECT_NAME}_EXPORTED_TARGETS} ${catkin_EXPORTED_TARGETS}) +#add_dependencies(turtle_map ${${PROJECT_NAME}_EXPORTED_TARGETS} ${catkin_EXPORTED_TARGETS}) +## Specify libraries to link a library or executable target against +target_link_libraries(pose_listener + ${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_lab2.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/labs/catkin_ws/src/lab2/package.xml b/labs/catkin_ws/src/lab2/package.xml new file mode 100644 index 0000000000000000000000000000000000000000..c8c05071623d4c412ae90e6964738418dff0c0f6 --- /dev/null +++ b/labs/catkin_ws/src/lab2/package.xml @@ -0,0 +1,72 @@ +<?xml version="1.0"?> +<package format="2"> + <name>lab2</name> + <version>0.0.0</version> + <description>The lab2 package</description> + + <!-- One maintainer tag required, multiple allowed, one person per tag --> + <!-- Example: --> + <!-- <maintainer email="jane.doe@example.com">Jane Doe</maintainer> --> + <maintainer email="chris@todo.todo">chris</maintainer> + + + <!-- One license tag required, multiple allowed, one license per tag --> + <!-- Commonly used license strings: --> + <!-- BSD, MIT, Boost Software License, GPLv2, GPLv3, LGPLv2.1, LGPLv3 --> + <license>TODO</license> + + + <!-- Url tags are optional, but multiple are allowed, one per tag --> + <!-- Optional attribute type can be: website, bugtracker, or repository --> + <!-- Example: --> + <!-- <url type="website">http://wiki.ros.org/lab2</url> --> + + + <!-- Author tags are optional, multiple are allowed, one per tag --> + <!-- Authors do not have to be maintainers, but could be --> + <!-- Example: --> + <!-- <author email="jane.doe@example.com">Jane Doe</author> --> + + + <!-- The *depend tags are used to specify dependencies --> + <!-- Dependencies can be catkin packages or system dependencies --> + <!-- Examples: --> + <!-- Use depend as a shortcut for packages that are both build and exec dependencies --> + <!-- <depend>roscpp</depend> --> + <!-- Note that this is equivalent to the following: --> + <!-- <build_depend>roscpp</build_depend> --> + <!-- <exec_depend>roscpp</exec_depend> --> + <!-- Use build_depend for packages you need at compile time: --> + <!-- <build_depend>message_generation</build_depend> --> + <!-- Use build_export_depend for packages you need in order to build against this package: --> + <!-- <build_export_depend>message_generation</build_export_depend> --> + <!-- Use buildtool_depend for build tool packages: --> + <!-- <buildtool_depend>catkin</buildtool_depend> --> + <!-- Use exec_depend for packages you need at runtime: --> + <!-- <exec_depend>message_runtime</exec_depend> --> + <!-- Use test_depend for packages you need only for testing: --> + <!-- <test_depend>gtest</test_depend> --> + <!-- Use doc_depend for packages you need only for building documentation: --> + <!-- <doc_depend>doxygen</doc_depend> --> + <buildtool_depend>catkin</buildtool_depend> + <build_depend>roscpp</build_depend> + <build_depend>rospy</build_depend> + <build_depend>std_msgs</build_depend> + <build_depend>turtlesim</build_depend> + <build_export_depend>roscpp</build_export_depend> + <build_export_depend>rospy</build_export_depend> + <build_export_depend>std_msgs</build_export_depend> + <build_export_depend>turtlesim</build_export_depend> + <exec_depend>roscpp</exec_depend> + <exec_depend>rospy</exec_depend> + <exec_depend>std_msgs</exec_depend> + <exec_depend>turtlesim</exec_depend> + + + + <!-- The export tag contains other, unspecified, tags --> + <export> + <!-- Other tools can request additional information be placed here --> + + </export> +</package> diff --git a/labs/catkin_ws/src/lab2/pose_listener.cpp b/labs/catkin_ws/src/lab2/pose_listener.cpp new file mode 100644 index 0000000000000000000000000000000000000000..8af20e53a657e0eaaeeeb195b96c15d729ef3772 --- /dev/null +++ b/labs/catkin_ws/src/lab2/pose_listener.cpp @@ -0,0 +1,15 @@ +#include <ros/ros.h> +#include <turtlesim/Pose.h> + +void turtle_pose_callback(const turtlesim::Pose& msg){ + ROS_INFO("X=%f",msg.x); + ROS_INFO_STREAM("Y="<<msg.y); + ROS_INFO_STREAM("T="<<msg.theta); +} + +int main(int argc, char **argv){ + ros::init(argc, argv, "pose_subscriber"); + ros::NodeHandle nh; + ros::Subscriber sub = nh.subscribe("turtle1/pose",10, &turtle_pose_callback); + ros::spin(); +} \ No newline at end of file diff --git a/labs/catkin_ws/src/lab2/pose_rviz.cpp b/labs/catkin_ws/src/lab2/pose_rviz.cpp new file mode 100644 index 0000000000000000000000000000000000000000..b224d520d402732e1b0d1a1f6a22dd9465fdc53a --- /dev/null +++ b/labs/catkin_ws/src/lab2/pose_rviz.cpp @@ -0,0 +1,30 @@ +#include "geometry_msgs/PoseStamped.h" +#include <tf/tf.h> +#include <turtlesim/Pose.h> + +#include "wrap_rviz.h" + +void pub_rviz_wrapper::turtle_pose_callback(const turtlesim::Pose& msg){ + geometry_msgs::PoseStamped pose_rviz; + pose_rviz.header.frame_id="map"; + pose_rviz.header.stamp=ros::Time::now(); + pose_rviz.header.seq=0; + pose_rviz.pose.orientation = + tf::createQuaternionMsgFromYaw(msg.theta); + pose_rviz.pose.position.x = msg.x; + pose_rviz.pose.position.y = msg.y; + + this->pub.publish(pose_rviz); +} + +int main(int argc, char** argv) +{ + ros::init(argc, argv, "pose_subscriber"); + pub_rviz_wrapper wrap; + ros::NodeHandle nh; + //ros::Subscriber sub = nh.subscribe("turtle1/pose",10, &pub_rviz_wrapper::turtle_pose_callback); + ros::Subscriber sub = nh.subscribe("turtle1/pose", 10, &pub_rviz_wrapper::turtle_pose_callback, &wrap); + //pub = nh.advertise("turtle1/pose_rviz", 10, &pub_rviz_wrapper::turtle_pose_callback, &wrap); + wrap.pub = nh.advertise<geometry_msgs::PoseStamped>("turtle1/pose_rviz", 10); + ros::spin(); +} \ No newline at end of file diff --git a/labs/catkin_ws/src/lab2/scripts/pose_listener.py b/labs/catkin_ws/src/lab2/scripts/pose_listener.py new file mode 100755 index 0000000000000000000000000000000000000000..3b62a1980695927309ba21eb90e8e58c816b6d1b --- /dev/null +++ b/labs/catkin_ws/src/lab2/scripts/pose_listener.py @@ -0,0 +1,11 @@ +#!/usr/bin/env python +import rospy +from turtlesim.msg import Pose + +def callback(data): + print(data) + +if __name__ == '__main__': + rospy.init_node('pose_listener_python') + rospy.Subscriber('/turtle1/pose', Pose, callback, queue_size=1) + rospy.spin() \ No newline at end of file diff --git a/labs/catkin_ws/src/lab2/turtle_map.cpp b/labs/catkin_ws/src/lab2/turtle_map.cpp new file mode 100644 index 0000000000000000000000000000000000000000..e6945d5f6a5ee57956f4544224195dbd8f75eacd --- /dev/null +++ b/labs/catkin_ws/src/lab2/turtle_map.cpp @@ -0,0 +1,26 @@ +#include <ros/ros.h> +#include <turtlesim/Pose.h> +#include <geometry_msgs/PoseStamped.h> +#include <turtlesim/Pose.h> +#include <tf/transform_datatypes.h> + +int main(int argc, char **argv) { + ros::init(argc, argv, "pose_publisher"); + ros::NodeHandle nh; + ros::Publisher pose_pub = nh.advertise<geometry_msgs::PoseStamped>("pose_output", 1000); + ros::Rate loop_rate(10); + int count = 0; + while (ros::ok()) { + geometry_msgs::PoseStamped msg; + msg.header.frame_id="map"; + msg.header.stamp=ros::Time::now(); + msg.header.seq=count++; + msg.pose.orientation = tf::createQuaternionMsgFromYaw(0); + msg.pose.position.x = 1; + msg.pose.position.y = 1; + pose_pub.publish(msg); + ros::spinOnce(); + loop_rate.sleep(); + } + return 0; +} \ No newline at end of file diff --git a/labs/catkin_ws/src/lab2/wrap_rviz.h b/labs/catkin_ws/src/lab2/wrap_rviz.h new file mode 100644 index 0000000000000000000000000000000000000000..c7ac88685d18bffbce0629eae4d7e69367bbc766 --- /dev/null +++ b/labs/catkin_ws/src/lab2/wrap_rviz.h @@ -0,0 +1,14 @@ +#ifndef WRAP_RVIZ_H +#define WRAP_RVIZ_H + +#include <ros/ros.h> +#include <turtlesim/Pose.h> + +class pub_rviz_wrapper +{ + public: + ros::Publisher pub; + void turtle_pose_callback(const turtlesim::Pose& msg); +}; + +#endif //WRAP_RVIZ_H \ No newline at end of file diff --git a/rosStartLinux.sh b/rosStartLinux.sh new file mode 100755 index 0000000000000000000000000000000000000000..750165bbf688b07fbfb420b15f79ceb63e67d672 --- /dev/null +++ b/rosStartLinux.sh @@ -0,0 +1,9 @@ +#!/bin/bash + +source /opt/ros/noetic/setup.sh + +echo "source /opt/ros/noetic/setup/bash" >> ~.bashrc + +roscore + +source devel/setup.bash \ No newline at end of file