diff --git a/README.md b/README.md index ff0ac327b94dc1778c423693ebdf9de0acebce0f..ed8e646a86ff8d3b76c39e0bb3a495834630eb87 100644 --- a/README.md +++ b/README.md @@ -3,4 +3,8 @@ 1. run `./run.sh -b` to build the docker image, copy custom msgs into the docker image and compile ros1 bridge -2. `./run.sh` to launch the container and interract with bridge, ros1 and ros2. +2. `./run.sh -r` to launch the container and interract with bridge, ros1 and ros2. + +3. test the bridge + +source /home/nx/ros1_bridge_ws/install/setup.bash && source /home/nx/rosbridge_general_update_ament.sh '/home/nx/ros1_bridge_ws/install' 'ros1_bridge' && ros2 run ros1_bridge dynamic_bridge --print-pairs | grep custom \ No newline at end of file diff --git a/custom_bridge.Dockerfile b/custom_bridge.Dockerfile index 5ec2d29212edc468c0cc29ed51383e2a93661907..62d102d7872647c53bd06fc14676a467a8208ca0 100644 --- a/custom_bridge.Dockerfile +++ b/custom_bridge.Dockerfile @@ -24,7 +24,7 @@ ARG PW=10 ENV ROS2_DISTRO=humble -ENV ROS2_INSTALL_PATH=$HOME/ros2_humble +ENV ROS2_INSTALL_PATH=$HOME/ros2_ws RUN mkdir -p $ROS2_INSTALL_PATH/src ENV ROS2_INSTALL=$ROS2_INSTALL_PATH/install/setup.bash @@ -125,14 +125,11 @@ RUN apt install -y \ WORKDIR $HOME COPY ./rosbridge_general_update_ament.sh . -RUN bash -c "./rosbridge_general_update_ament.sh" - - #### COPY CUSTOM_BRIDGE WORKDIR $HOME -COPY ./custom_bridge_ros1_ws $HOME/custom_bridge_ros1_ws/src +COPY ./custom_bridge_ros1_ws $HOME/custom_bridge_ros1_ws WORKDIR $HOME/custom_bridge_ros1_ws RUN bash -c "catkin_make" @@ -142,7 +139,7 @@ RUN bash -c "catkin_make" #### COPY NEW BRIDGE WS COPY ./custom_bridge_ros2_ws $HOME/custom_bridge_ros2_ws WORKDIR $HOME/custom_bridge_ros2_ws -RUN bash -c "source $HOME/ros2_humble/install/setup.bash && colcon build --symlink-install" +RUN bash -c "source $HOME/ros2_ws/install/setup.bash && colcon build --symlink-install" RUN mkdir -p $HOME/.ros/log && \ @@ -159,7 +156,7 @@ RUN chown -R $USERNAME:$USERNAME $HOME/custom_bridge_ros2_ws && \ #### INSTALL ROS1_BRIDGE -ARG ROS1_BRIDGE_ROOT_DIR=/ros1_bridge_ws +ARG ROS1_BRIDGE_ROOT_DIR=$HOME/ros1_bridge_ws ENV ROS1_BRIDGE_ROOT_DIR=$ROS1_BRIDGE_ROOT_DIR ARG ROS1_BRIDGE_INSTALL_DIR=$ROS1_BRIDGE_ROOT_DIR/src @@ -175,10 +172,9 @@ WORKDIR $ROS1_BRIDGE_ROOT_DIR #### BUILD/COMPILE ROS1_BRIDGE -# RUN bash -c "cd ${HOME}/ht_planner_ws \ -# && source ./scripts/rosbridge_source.sh \ -# && cd ${ROS1_BRIDGE_ROOT_DIR} \ -# && colcon build --packages-select ros1_bridge --cmake-force-configure --parallel-workers $PW \ -# " +RUN bash -c "source $HOME/custom_bridge_ros1_ws/devel/setup.bash &&\ + source $HOME/ros2_ws/install/setup.bash &&\ + source $HOME/custom_bridge_ros2_ws/install/setup.bash &&\ + colcon build --packages-select ros1_bridge --cmake-force-configure --parallel-workers 12" diff --git a/custom_bridge_ros1_ws/src/custom_bridge_msgs/CMakeLists.txt b/custom_bridge_ros1_ws/src/custom_bridge_msgs/CMakeLists.txt index 531d4735acdfb44edf038e7f026b235e0088a7f0..20bae420b366579b5f530570ec253a7382ddb538 100644 --- a/custom_bridge_ros1_ws/src/custom_bridge_msgs/CMakeLists.txt +++ b/custom_bridge_ros1_ws/src/custom_bridge_msgs/CMakeLists.txt @@ -23,15 +23,15 @@ find_package(catkin REQUIRED COMPONENTS ## Generate messages in the 'msg' folder add_message_files( FILES - Intent.msg - IntentComponent.msg + State.msg + CustomState.msg ) ## Generate services in the 'srv' folder add_service_files( FILES - BeginPlanning.srv - CustomSrvRes.srv + CustomServiceOne.srv + CustomServiceTwo.srv ) ## Generate added messages and services with any dependencies listed here @@ -55,19 +55,18 @@ include_directories( ${catkin_INCLUDE_DIRS} ) +# Declare a C++ executable +add_executable(custom_talker src/custom_talker.cpp) +add_executable(custom_service_one src/custom_service_one.cpp) +# Specify the dependencies for this executable +add_dependencies(custom_talker ${${PROJECT_NAME}_EXPORTED_TARGETS} ${catkin_EXPORTED_TARGETS}) +add_dependencies(custom_service_one ${${PROJECT_NAME}_EXPORTED_TARGETS} ${catkin_EXPORTED_TARGETS}) -# # Declare a C++ executable -# add_executable(dummy_start_planning_service src/custom_service.cpp) - -# # Specify the dependencies for this executable -# add_dependencies(dummy_start_planning_service ${${PROJECT_NAME}_EXPORTED_TARGETS} ${catkin_EXPORTED_TARGETS}) - - -# target_link_libraries(dummy_start_planning_service ${catkin_LIBRARIES}) - -# # Install the executable -# install(TARGETS dummy_start_planning_service -# RUNTIME DESTINATION ${CATKIN_PACKAGE_BIN_DESTINATION} -# ) +target_link_libraries(custom_talker ${catkin_LIBRARIES}) +target_link_libraries(custom_service_one ${catkin_LIBRARIES}) +# Install the executable +install(TARGETS custom_talker custom_service_one + RUNTIME DESTINATION ${CATKIN_PACKAGE_BIN_DESTINATION} +) diff --git a/custom_bridge_ros1_ws/src/custom_bridge_msgs/README.md b/custom_bridge_ros1_ws/src/custom_bridge_msgs/README.md deleted file mode 100644 index 2b8712e7fb5f877263b86d35125074619abc753c..0000000000000000000000000000000000000000 --- a/custom_bridge_ros1_ws/src/custom_bridge_msgs/README.md +++ /dev/null @@ -1,6 +0,0 @@ -# custom_bridge_msgs - -## custom_bridge_msgs for ros1 (and ros1_bridge) - -mount this directory into custom jammy docker image to bridge custom interfaces on 22.04 - diff --git a/custom_bridge_ros1_ws/src/custom_bridge_msgs/msg/CustomState.msg b/custom_bridge_ros1_ws/src/custom_bridge_msgs/msg/CustomState.msg new file mode 100644 index 0000000000000000000000000000000000000000..4f617d9644131c7cf33eaadc4a34fe34c4f1dc50 --- /dev/null +++ b/custom_bridge_ros1_ws/src/custom_bridge_msgs/msg/CustomState.msg @@ -0,0 +1 @@ +State state \ No newline at end of file diff --git a/custom_bridge_ros1_ws/src/custom_bridge_msgs/msg/Intent.msg b/custom_bridge_ros1_ws/src/custom_bridge_msgs/msg/Intent.msg deleted file mode 100644 index 67ba7d726a0ed8a3a7bb4fd0b3395da1d40ef74d..0000000000000000000000000000000000000000 --- a/custom_bridge_ros1_ws/src/custom_bridge_msgs/msg/Intent.msg +++ /dev/null @@ -1,3 +0,0 @@ -std_msgs/Header header -IntentComponent[] components - diff --git a/custom_bridge_ros1_ws/src/custom_bridge_msgs/msg/IntentComponent.msg b/custom_bridge_ros1_ws/src/custom_bridge_msgs/msg/IntentComponent.msg deleted file mode 100644 index 9506b2db5d152d5b52b47cb5ec47affa4c002d11..0000000000000000000000000000000000000000 --- a/custom_bridge_ros1_ws/src/custom_bridge_msgs/msg/IntentComponent.msg +++ /dev/null @@ -1,2 +0,0 @@ -float32 prob -nav_msgs/Path path \ No newline at end of file diff --git a/custom_bridge_ros1_ws/src/custom_bridge_msgs/msg/State.msg b/custom_bridge_ros1_ws/src/custom_bridge_msgs/msg/State.msg new file mode 100644 index 0000000000000000000000000000000000000000..fb82a2b6d2de983074514491512edcce1bf43b7f --- /dev/null +++ b/custom_bridge_ros1_ws/src/custom_bridge_msgs/msg/State.msg @@ -0,0 +1,2 @@ +float64[] rewards +int64 value \ No newline at end of file diff --git a/custom_bridge_ros1_ws/src/custom_bridge_msgs/src/custom_service.cpp b/custom_bridge_ros1_ws/src/custom_bridge_msgs/src/custom_service.cpp deleted file mode 100644 index 22cc6aeaabd5a9ff346c9afe64145aec16b6b353..0000000000000000000000000000000000000000 --- a/custom_bridge_ros1_ws/src/custom_bridge_msgs/src/custom_service.cpp +++ /dev/null @@ -1,32 +0,0 @@ -// #include "ros/ros.h" -// #include "custom_bridge_msgs/BeginPlanning.h" - -// class DummyStartPlanning -// { -// public: -// DummyStartPlanning() -// { -// service_ = nh_.advertiseService("dummy_start_planning", &DummyStartPlanning::handle_service, this); -// } - -// private: -// bool handle_service(custom_bridge_msgs::BeginPlanning::Request &request, custom_bridge_msgs::BeginPlanning::Response &response) -// { -// ROS_INFO_STREAM("Received request: " << request.start_pose.pose.position.x); -// response.start = true; -// // response.message = std::to_string(request.spose); // Commented out as in the original code -// return true; -// } - -// ros::NodeHandle nh_; -// ros::ServiceServer service_; -// }; - -// int main(int argc, char **argv) -// { -// ros::init(argc, argv, "dummy_start_planning"); -// DummyStartPlanning dummyStartPlanning; -// ros::spin(); -// return 0; -// } - diff --git a/custom_bridge_ros1_ws/src/custom_bridge_msgs/src/custom_service_one.cpp b/custom_bridge_ros1_ws/src/custom_bridge_msgs/src/custom_service_one.cpp new file mode 100644 index 0000000000000000000000000000000000000000..98575bdc9a4f18c655c646808078445b63b27ca8 --- /dev/null +++ b/custom_bridge_ros1_ws/src/custom_bridge_msgs/src/custom_service_one.cpp @@ -0,0 +1,32 @@ +#include "ros/ros.h" +#include "custom_bridge_msgs/CustomServiceOne.h" + +class DummyCustomServiceOne +{ +public: + DummyCustomServiceOne() + { + service_ = nh_.advertiseService("custom_service_topic", &DummyCustomServiceOne::handle_service, this); + } + +private: + bool handle_service(custom_bridge_msgs::CustomServiceOne::Request &request, custom_bridge_msgs::CustomServiceOne::Response &response) + { + ROS_INFO_STREAM("Received request: " << request.start_pose.pose.position.x); + response.start = true; + // response.message = std::to_string(request.spose); // Commented out as in the original code + return true; + } + + ros::NodeHandle nh_; + ros::ServiceServer service_; +}; + +int main(int argc, char **argv) +{ + ros::init(argc, argv, "dummy_custom_service_one"); + DummyCustomServiceOne dummy_custom_service_one; + ros::spin(); + return 0; +} + diff --git a/custom_bridge_ros1_ws/src/custom_bridge_msgs/src/custom_talker.cpp b/custom_bridge_ros1_ws/src/custom_bridge_msgs/src/custom_talker.cpp new file mode 100644 index 0000000000000000000000000000000000000000..0b265c2bc43f958acd6c791b02d1d3e33ad828da --- /dev/null +++ b/custom_bridge_ros1_ws/src/custom_bridge_msgs/src/custom_talker.cpp @@ -0,0 +1,82 @@ +// #include "ros/ros.h" +// #include "std_msgs/String.h" + +// class DummyTalker +// { +// public: +// DummyTalker() : count_(0) +// { +// nh_ = ros::NodeHandle("~"); +// publisher_ = nh_.advertise<std_msgs::String>("chatter", 10); +// timer_ = nh_.createTimer(ros::Duration(0.5), &DummyTalker::publish_message, this); +// } + +// private: +// void publish_message(const ros::TimerEvent&) +// { +// std_msgs::String message; +// message.data = "I am talking"; +// ROS_INFO("Publishing: '%s'", message.data.c_str()); +// publisher_.publish(message); +// } + +// ros::NodeHandle nh_; +// ros::Publisher publisher_; +// ros::Timer timer_; +// size_t count_; +// }; + +// int main(int argc, char **argv) +// { +// ros::init(argc, argv, "dummy_talker"); +// DummyTalker talker; +// ros::spin(); +// return 0; +// } + + +#include "ros/ros.h" +#include "custom_bridge_msgs/CustomState.h" +#include "custom_bridge_msgs/State.h" + +int PUBLISH_RATE = 1; + +class DummyPublisher +{ + public: + DummyPublisher() : publish_rate_(PUBLISH_RATE) // Rate of 10 Hz + { + // Advertise the topic with a queue size of 10 + publisher_ = nh_.advertise<custom_bridge_msgs::CustomState>("custom_state_topic", PUBLISH_RATE); + } + + void publishLoop() + { + while (ros::ok()) + { + std::vector<double> reward_vector{1., 2., 3., 4., 5.}; + custom_bridge_msgs::State state; + custom_bridge_msgs::CustomState custom_state; + state.value = 2; + state.rewards = reward_vector; + custom_state.state = state; + publisher_.publish(custom_state); + + ros::spinOnce(); + publish_rate_.sleep(); + } + } + + private: + ros::NodeHandle nh_; + ros::Publisher publisher_; + ros::Rate publish_rate_; // Rate object to control the publish frequency +}; + +int main(int argc, char **argv) +{ + ros::init(argc, argv, "dummy_publisher"); + DummyPublisher dummyPublisher; + dummyPublisher.publishLoop(); + return 0; +} \ No newline at end of file diff --git a/custom_bridge_ros1_ws/src/custom_bridge_msgs/srv/BeginPlanning.srv b/custom_bridge_ros1_ws/src/custom_bridge_msgs/srv/BeginPlanning.srv deleted file mode 100644 index 77b774ce5cab5feafa49c7719af5ecabb218a9e3..0000000000000000000000000000000000000000 --- a/custom_bridge_ros1_ws/src/custom_bridge_msgs/srv/BeginPlanning.srv +++ /dev/null @@ -1,7 +0,0 @@ -# decmcts_msgs/StartPlanning -# https://gitlab.com/dst-uts-aerial/decmcts_msgs/-/blob/master/srv/StartPlanning.srv - -geometry_msgs/PoseStamped start_pose -float32 horizon_m ---- -bool start \ No newline at end of file diff --git a/custom_bridge_ros2_ws/src/custom_bridge_msgs/srv/BeginPlanning.srv b/custom_bridge_ros1_ws/src/custom_bridge_msgs/srv/CustomServiceOne.srv similarity index 100% rename from custom_bridge_ros2_ws/src/custom_bridge_msgs/srv/BeginPlanning.srv rename to custom_bridge_ros1_ws/src/custom_bridge_msgs/srv/CustomServiceOne.srv diff --git a/custom_bridge_ros2_ws/src/custom_bridge_msgs/srv/CustomSrvRes.srv b/custom_bridge_ros1_ws/src/custom_bridge_msgs/srv/CustomServiceTwo.srv similarity index 68% rename from custom_bridge_ros2_ws/src/custom_bridge_msgs/srv/CustomSrvRes.srv rename to custom_bridge_ros1_ws/src/custom_bridge_msgs/srv/CustomServiceTwo.srv index 616e3d5d6fea5e6740793cc21b69ae025c09bd84..c19f17f073e8969ac3071ef187303e512f27a60b 100644 --- a/custom_bridge_ros2_ws/src/custom_bridge_msgs/srv/CustomSrvRes.srv +++ b/custom_bridge_ros1_ws/src/custom_bridge_msgs/srv/CustomServiceTwo.srv @@ -2,5 +2,5 @@ --- bool success float32 reward -int32 num_iterations +int32 iterations nav_msgs/Path path \ No newline at end of file diff --git a/custom_bridge_ros1_ws/src/custom_bridge_msgs/srv/CustomSrvRes.srv b/custom_bridge_ros1_ws/src/custom_bridge_msgs/srv/CustomSrvRes.srv deleted file mode 100644 index 3135e1767b14bb506eb8fbe46f6d32eda429f430..0000000000000000000000000000000000000000 --- a/custom_bridge_ros1_ws/src/custom_bridge_msgs/srv/CustomSrvRes.srv +++ /dev/null @@ -1,8 +0,0 @@ -# decmcts_msgs/CompletePlanning -# https://gitlab.com/dst-uts-aerial/decmcts_msgs/-/blob/master/srv/CompletePlanning.srv - ---- -bool success -float32 reward -int32 num_iterations -nav_msgs/Path path \ No newline at end of file diff --git a/custom_bridge_ros2_ws/src/custom_bridge_msgs/CMakeLists.txt b/custom_bridge_ros2_ws/src/custom_bridge_msgs/CMakeLists.txt index dc044059bf41ddbf65d64f206b351dccb2b0aca2..71e8cfd59ed601aae6e773af6c13e9c6405c91ae 100644 --- a/custom_bridge_ros2_ws/src/custom_bridge_msgs/CMakeLists.txt +++ b/custom_bridge_ros2_ws/src/custom_bridge_msgs/CMakeLists.txt @@ -5,24 +5,35 @@ if(CMAKE_COMPILER_IS_GNUCXX OR CMAKE_CXX_COMPILER_ID MATCHES "Clang") add_compile_options(-Wall -Wextra -Wpedantic) endif() -#set(CMAKE_CXX_FLAGS "--std=c++20 ${CMAKE_CXX_FLAGS} -g -rdynamic") -# Find dependencies -find_package(ament_cmake REQUIRED) -find_package(rosidl_default_generators REQUIRED) -find_package(nav_msgs REQUIRED) -find_package(std_msgs REQUIRED) -find_package(geometry_msgs REQUIRED) -find_package(visualization_msgs REQUIRED) +set(pkg_dependencies + ament_cmake + geometry_msgs + nav_msgs + std_msgs + visualization_msgs + rosidl_default_generators + rclcpp + rclcpp_components + geometry_msgs +) + +foreach(pkg IN ITEMS ${pkg_dependencies}) + find_package(${pkg} REQUIRED) +endforeach() rosidl_generate_interfaces(${PROJECT_NAME} - "msg/Intent.msg" - "msg/IntentComponent.msg" - "srv/BeginPlanning.srv" - "srv/CustomSrvRes.srv" + "msg/State.msg" + "msg/CustomState.msg" + "srv/CustomServiceOne.srv" + "srv/CustomServiceTwo.srv" DEPENDENCIES nav_msgs ) +set(msg_dependencies + rclcpp + geometry_msgs # needed by CustomServiceRequest +) # Include directories include_directories( @@ -31,12 +42,44 @@ include_directories( ) +rosidl_get_typesupport_target(cpp_typesupport_target ${PROJECT_NAME} "rosidl_typesupport_cpp") +# include act/msg/srv files in source code +include_directories( + ${CMAKE_CURRENT_BINARY_DIR}/rosidl_generator_cpp +) + + +# Create ROS 2 executables +add_executable(custom_listener + "src/custom_listener.cpp" +) + +ament_target_dependencies(custom_listener + ${pkg_dependencies} + ${msg_dependencies} +) + +target_link_libraries(custom_listener "${cpp_typesupport_target}") + + + + + +add_executable(custom_service_two + "src/custom_service_two.cpp" +) + +ament_target_dependencies(custom_service_two + ${pkg_dependencies} + ${msg_dependencies} +) +target_link_libraries(custom_service_two "${cpp_typesupport_target}") + -# Export dependencies for downstream packages ament_export_dependencies(rosidl_default_runtime) -# Finalize the package setup -ament_package() + +ament_package() \ No newline at end of file diff --git a/custom_bridge_ros2_ws/src/custom_bridge_msgs/msg/CustomState.msg b/custom_bridge_ros2_ws/src/custom_bridge_msgs/msg/CustomState.msg new file mode 100644 index 0000000000000000000000000000000000000000..4f617d9644131c7cf33eaadc4a34fe34c4f1dc50 --- /dev/null +++ b/custom_bridge_ros2_ws/src/custom_bridge_msgs/msg/CustomState.msg @@ -0,0 +1 @@ +State state \ No newline at end of file diff --git a/custom_bridge_ros2_ws/src/custom_bridge_msgs/msg/Intent.msg b/custom_bridge_ros2_ws/src/custom_bridge_msgs/msg/Intent.msg deleted file mode 100644 index 67ba7d726a0ed8a3a7bb4fd0b3395da1d40ef74d..0000000000000000000000000000000000000000 --- a/custom_bridge_ros2_ws/src/custom_bridge_msgs/msg/Intent.msg +++ /dev/null @@ -1,3 +0,0 @@ -std_msgs/Header header -IntentComponent[] components - diff --git a/custom_bridge_ros2_ws/src/custom_bridge_msgs/msg/IntentComponent.msg b/custom_bridge_ros2_ws/src/custom_bridge_msgs/msg/IntentComponent.msg deleted file mode 100644 index 9506b2db5d152d5b52b47cb5ec47affa4c002d11..0000000000000000000000000000000000000000 --- a/custom_bridge_ros2_ws/src/custom_bridge_msgs/msg/IntentComponent.msg +++ /dev/null @@ -1,2 +0,0 @@ -float32 prob -nav_msgs/Path path \ No newline at end of file diff --git a/custom_bridge_ros2_ws/src/custom_bridge_msgs/msg/State.msg b/custom_bridge_ros2_ws/src/custom_bridge_msgs/msg/State.msg new file mode 100644 index 0000000000000000000000000000000000000000..fb82a2b6d2de983074514491512edcce1bf43b7f --- /dev/null +++ b/custom_bridge_ros2_ws/src/custom_bridge_msgs/msg/State.msg @@ -0,0 +1,2 @@ +float64[] rewards +int64 value \ No newline at end of file diff --git a/custom_bridge_ros2_ws/src/custom_bridge_msgs/src/custom_listener.cpp b/custom_bridge_ros2_ws/src/custom_bridge_msgs/src/custom_listener.cpp new file mode 100644 index 0000000000000000000000000000000000000000..7ab872baba062421c02821f91097cb8f38057c60 --- /dev/null +++ b/custom_bridge_ros2_ws/src/custom_bridge_msgs/src/custom_listener.cpp @@ -0,0 +1,33 @@ +#include "rclcpp/rclcpp.hpp" +#include "custom_bridge_msgs/msg/custom_state.hpp" // Adjust the include path to your ROS 2 message definition + +class DummySubscriber : public rclcpp::Node +{ +public: + DummySubscriber() : Node("dummy_subscriber") + { + subscriber_ = this->create_subscription<custom_bridge_msgs::msg::CustomState>( + "custom_state_topic", 10, + std::bind(&DummySubscriber::topic_callback, this, std::placeholders::_1)); + } + +private: + void topic_callback(const custom_bridge_msgs::msg::CustomState::SharedPtr msg) const + { + RCLCPP_INFO_STREAM(this->get_logger(), "Received state value: " << msg->state.value); + for (int reward : msg->state.rewards) + { + RCLCPP_INFO_STREAM(this->get_logger(), "reward: " << reward); + } + } + + rclcpp::Subscription<custom_bridge_msgs::msg::CustomState>::SharedPtr subscriber_; +}; + +int main(int argc, char *argv[]) +{ + rclcpp::init(argc, argv); + rclcpp::spin(std::make_shared<DummySubscriber>()); + rclcpp::shutdown(); + return 0; +} diff --git a/custom_bridge_ros2_ws/src/custom_bridge_msgs/src/custom_service_two.cpp b/custom_bridge_ros2_ws/src/custom_bridge_msgs/src/custom_service_two.cpp new file mode 100644 index 0000000000000000000000000000000000000000..8509c4a26f67419156c685a0785f9a4c78734e7d --- /dev/null +++ b/custom_bridge_ros2_ws/src/custom_bridge_msgs/src/custom_service_two.cpp @@ -0,0 +1,41 @@ +#include "rclcpp/rclcpp.hpp" +#include <nav_msgs/msg/path.hpp> +#include "custom_bridge_msgs/srv/custom_service_two.hpp" + +class DummyCustomServiceTwo : public rclcpp::Node +{ +public: + DummyCustomServiceTwo() : Node("custom_service_topic") + { + service_ = this->create_service<custom_bridge_msgs::srv::CustomServiceTwo>( + "custom_service_topic", + std::bind(&DummyCustomServiceTwo::service_callback, this, std::placeholders::_1, std::placeholders::_2)); + } + +private: + void service_callback( + const std::shared_ptr<custom_bridge_msgs::srv::CustomServiceTwo::Request> request, + std::shared_ptr<custom_bridge_msgs::srv::CustomServiceTwo::Response> response) + { + RCLCPP_INFO_STREAM(this->get_logger(), "Received CustomServiceTwo request (empty), populating response obj"); + response->success = true; + response->reward = 10.0; + response->iterations = 200; + response->path = nav_msgs::msg::Path(); + + response->path.header.frame_id = "map"; + response->path.header.stamp = this->get_clock()->now(); + + } + + rclcpp::Service<custom_bridge_msgs::srv::CustomServiceTwo>::SharedPtr service_; +}; + +int main(int argc, char *argv[]) +{ + rclcpp::init(argc, argv); + auto node = std::make_shared<DummyCustomServiceTwo>(); + rclcpp::spin(node); + rclcpp::shutdown(); + return 0; +} diff --git a/custom_bridge_ros2_ws/src/custom_bridge_msgs/srv/CustomServiceOne.srv b/custom_bridge_ros2_ws/src/custom_bridge_msgs/srv/CustomServiceOne.srv new file mode 100644 index 0000000000000000000000000000000000000000..2d95da4eafb382fc38d45570df2f3e7c64ba0697 --- /dev/null +++ b/custom_bridge_ros2_ws/src/custom_bridge_msgs/srv/CustomServiceOne.srv @@ -0,0 +1,5 @@ + +geometry_msgs/PoseStamped start_pose +float32 horizon_m +--- +bool start \ No newline at end of file diff --git a/custom_bridge_ros2_ws/src/custom_bridge_msgs/srv/CustomServiceTwo.srv b/custom_bridge_ros2_ws/src/custom_bridge_msgs/srv/CustomServiceTwo.srv new file mode 100644 index 0000000000000000000000000000000000000000..c19f17f073e8969ac3071ef187303e512f27a60b --- /dev/null +++ b/custom_bridge_ros2_ws/src/custom_bridge_msgs/srv/CustomServiceTwo.srv @@ -0,0 +1,6 @@ + +--- +bool success +float32 reward +int32 iterations +nav_msgs/Path path \ No newline at end of file diff --git a/run.sh b/run.sh index a9466a95497e93609498d928f35528fd1e657c6c..72ee2fc393eae2af7d8d1edba4e4665de6835296 100755 --- a/run.sh +++ b/run.sh @@ -1,20 +1,45 @@ +if [ "$1" = "--help" ] || [ "$1" == "-h" ]; then + echo "custom bridge jammy help menu - build images / run containers" + echo " -b (default) build custom_bridge_jammy using ros2_from_src" + echo " -r start container from default image" + echo "" + echo " --help print help menu" + exit 0 +fi + +OS="jammy" +image="custom_bridge_example_$OS" if [ "$1" == "-b" ]; then - docker build -f custom_bridge.Dockerfile -t custom_bridge_example:jammy . + echo "default build" + image+="latest" + docker build -f custom_bridge.Dockerfile -t $image . + exit 0 -else - docker run \ - -it \ - --rm \ - --user "0" \ - -v /tmp/.X11-unix:/tmp/.X11-unix:rw \ - --env DISPLAY=$DISPLAY \ - --env NVIDIA_DRIVER_CAPABILITIES=compute,utility,graphics \ - --env NVIDIA_VISIBLE_DEVICES=all \ - --name ros1_bridge_example3 \ - ros1_bridge_example_cb:jammy \ - "/bin/bash" +elif [ "$1" == "-r" ]; then + image+="latest" + +else + echo "no options selected" + exit 0 fi + +name="custom_bridge_example_$OS""_tmp" + + +docker run \ + -it \ + --rm \ + --user "0" \ + -v /tmp/.X11-unix:/tmp/.X11-unix:rw \ + --env DISPLAY=$DISPLAY \ + --env NVIDIA_DRIVER_CAPABILITIES=compute,utility,graphics \ + --env NVIDIA_VISIBLE_DEVICES=all \ + --name $name \ + $image \ + "/bin/bash" + +