From 0838689fa36216b4530706d20197c93bde66c816 Mon Sep 17 00:00:00 2001 From: Maryne DEY Date: Mon, 25 Mar 2024 14:08:48 +0100 Subject: [PATCH] Moving joystick_ros --- joystick_ros/CMakeLists.txt | 206 ----------------------------- joystick_ros/package.xml | 68 ---------- joystick_ros/src/parser.cpp | 46 ------- joystick_ros/src/position_ctrl.cpp | 70 ---------- joystick_ros/src/readSerial.cpp | 51 ------- 5 files changed, 441 deletions(-) delete mode 100644 joystick_ros/CMakeLists.txt delete mode 100644 joystick_ros/package.xml delete mode 100644 joystick_ros/src/parser.cpp delete mode 100644 joystick_ros/src/position_ctrl.cpp delete mode 100644 joystick_ros/src/readSerial.cpp diff --git a/joystick_ros/CMakeLists.txt b/joystick_ros/CMakeLists.txt deleted file mode 100644 index 51dc825..0000000 --- a/joystick_ros/CMakeLists.txt +++ /dev/null @@ -1,206 +0,0 @@ -cmake_minimum_required(VERSION 3.0.2) -project(joystick_ros) - -## 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 joystick_ros -# 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}/joystick_ros.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/joystick_ros_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_joystick_ros.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/joystick_ros/package.xml b/joystick_ros/package.xml deleted file mode 100644 index 834b245..0000000 --- a/joystick_ros/package.xml +++ /dev/null @@ -1,68 +0,0 @@ - - - joystick_ros - 0.0.0 - The joystick_ros package - - - - - maryne-dey - - - - - - TODO - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - catkin - roscpp - rospy - std_msgs - roscpp - rospy - std_msgs - roscpp - rospy - std_msgs - - - - - - - - diff --git a/joystick_ros/src/parser.cpp b/joystick_ros/src/parser.cpp deleted file mode 100644 index a072ffc..0000000 --- a/joystick_ros/src/parser.cpp +++ /dev/null @@ -1,46 +0,0 @@ -#include -#include -#include -#include - -// Declare global variables to store Axis values -float axis0_value = 0.0; -float axis1_value = 0.0; - -void serial_data_callback(const std_msgs::String::ConstPtr& msg) { - // Parse received string message - std::string data_str = msg->data; - if (data_str.find("Axis0") != std::string::npos) { - // Extract value for Axis0 - axis0_value = std::stof(data_str.substr(data_str.find(":") + 1)); - } else if (data_str.find("Axis1") != std::string::npos) { - // Extract value for Axis1 - axis1_value = std::stof(data_str.substr(data_str.find(":") + 1)); - } - - // If both Axis0 and Axis1 values are available, publish them together - if (axis0_value != 0.0 && axis1_value != 0.0) { - std_msgs::Float32MultiArray float_array_msg; - float_array_msg.data.push_back(axis0_value); - float_array_msg.data.push_back(axis1_value); - axis_values_pub.publish(float_array_msg); - } -} - -int main(int argc, char** argv) { - // Initialize ROS node - ros::init(argc, argv, "serial_data_parser"); - ros::NodeHandle nh; - - // Subscribe to serial data topic - ros::Subscriber sub = nh.subscribe("serial_data", 10, serial_data_callback); - - // Initialize publisher for Axis values - ros::Publisher axis_values_pub = nh.advertise("axis_values", 10); - - // Spin ROS node - ros::spin(); - - return 0; -} - diff --git a/joystick_ros/src/position_ctrl.cpp b/joystick_ros/src/position_ctrl.cpp deleted file mode 100644 index bac53f8..0000000 --- a/joystick_ros/src/position_ctrl.cpp +++ /dev/null @@ -1,70 +0,0 @@ -#include -#include -#include - -// Constants -const float DEAD_ZONE = 5.0; // Dead zone in percentage (0 to 100) -const float MAX_SPEED = 1.0; // Maximum speed of the plate - -// Global variables -float y_position = 0.0; // Initial y position -float prev_time = 0.0; // Previous time -float direction = 0.0; // Direction of movement - -void joystick_axis_callback(const std_msgs::Float32MultiArray::ConstPtr& msg) { - // Extract joystick x and y positions - float x_joystick = msg->data[0]; - float y_joystick = msg->data[1]; - - // Determine direction based on joystick position - if (std::abs(x_joystick) < DEAD_ZONE) { - direction = 0.0; // Joystick in dead zone, no movement - } else { - direction = (x_joystick > 0) ? 1.0 : -1.0; // Joystick outside dead zone, set direction accordingly - } - - // Calculate speed based on joystick position - float speed = MAX_SPEED * std::abs(x_joystick) / 100.0; - - // Calculate time elapsed since last callback - float current_time = ros::Time::now().toSec(); - float time_elapsed = current_time - prev_time; - - // Calculate change in y position - y_position = y_position + time_elapsed * speed * direction; - - // Store current time for next iteration - prev_time = current_time; - - // Publish robot position in a point format - geometry_msgs::Point position_cmd; - position_cmd.x = 65.0; // Fixed x-coordinate - position_cmd.y = y_position; - position_cmd.z = 0.0; // Assuming z-coordinate is not used - - // Publish position command - ros::NodeHandle nh; - ros::Publisher position_cmd_pub = nh.advertise("/position_cmd", 10); - position_cmd_pub.publish(position_cmd); -} - -int main(int argc, char** argv) { - // Initialize ROS node - ros::init(argc, argv, "joystick_to_robot_converter"); - ros::NodeHandle nh; - - // Subscribe to joystick axis values topic - ros::Subscriber joystick_sub = nh.subscribe("joystick_axis_values", 10, joystick_axis_callback); - - // Initialize y position - y_position = 0.0; - - // Initialize previous time - prev_time = ros::Time::now().toSec(); - - // Spin ROS node - ros::spin(); - - return 0; -} - diff --git a/joystick_ros/src/readSerial.cpp b/joystick_ros/src/readSerial.cpp deleted file mode 100644 index 3a42923..0000000 --- a/joystick_ros/src/readSerial.cpp +++ /dev/null @@ -1,51 +0,0 @@ -#include -#include -#include -#include // Make sure to include the serial library, install using "sudo apt install ros-$ROS_DISTRO-serial" - -void readSerial(const std::string& port, uint32_t baud_rate) { - serial::Serial ser; - ser.setPort(port); - ser.setBaudrate(baud_rate); - - try { - ser.open(); - } catch (const std::exception& e) { - ROS_ERROR_STREAM("Failed to open serial port " << port << ": " << e.what()); - return; - } - - ros::NodeHandle nh; - ros::Publisher serial_pub = nh.advertise("serial_data", 10); - - ROS_INFO_STREAM("Reading from serial port " << port); - - while (ros::ok()) { - if (ser.available()) { - std_msgs::String msg; - msg.data = ser.readline(); - ROS_INFO_STREAM("Received data: " << msg.data); - serial_pub.publish(msg); - } - ros::spinOnce(); - ros::Duration(0.1).sleep(); // Sleep for 0.1 second - } - - ser.close(); -} - -int main(int argc, char** argv) { - ros::init(argc, argv, "serial_reader"); - - if (argc != 3) { - ROS_ERROR("Usage: rosrun your_package_name serial_reader "); - return 1; - } - - std::string port = "COM14"; - uint32_t baud_rate = 9600; - - readSerial(port, baud_rate); - - return 0; -}