Skip to content

Commit

Permalink
Implement Mr. Stanton's comments
Browse files Browse the repository at this point in the history
  • Loading branch information
Sodapop465 committed Feb 13, 2025
1 parent 94a2197 commit 5303ee8
Show file tree
Hide file tree
Showing 8 changed files with 313 additions and 251 deletions.
28 changes: 12 additions & 16 deletions src/common/heartbeat2/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ cmake_minimum_required(VERSION 3.8)
project(heartbeat2)

if(CMAKE_COMPILER_IS_GNUCXX OR CMAKE_CXX_COMPILER_ID MATCHES "Clang")
add_compile_options(-Wall -Wextra -Wpedantic)
add_compile_options(-Wall -Wpedantic)
endif()

# find dependencies
Expand All @@ -11,42 +11,38 @@ find_package(ament_cmake REQUIRED)
# further dependencies manually.
# find_package(<dependency> REQUIRED)
find_package(rclcpp REQUIRED)
find_package(builtin_interfaces REQUIRED)
find_package(csm_common_interfaces REQUIRED)
find_package(std_msgs REQUIRED)
find_package(std_srvs REQUIRED)
find_package(Boost 1.40 REQUIRED COMPONENTS container)

# add executables for ros to recognize
add_executable(client src/client.cpp)
target_include_directories(client PUBLIC
add_executable(heartbeat_client src/heartbeat_client.cpp)
target_include_directories(heartbeat_client PUBLIC
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>
$<INSTALL_INTERFACE:include>)
ament_target_dependencies(
client
heartbeat_client
rclcpp
csm_common_interfaces
builtin_interfaces
std_msgs
std_srvs
)
target_include_directories(client PUBLIC ${Boost_INCLUDE_DIR})
target_link_libraries(client ${Boost_LIBRARIES})
target_include_directories(heartbeat_client PUBLIC ${Boost_INCLUDE_DIR})
target_link_libraries(heartbeat_client ${Boost_LIBRARIES})

add_executable(server src/server.cpp)
target_include_directories(server PUBLIC
add_executable(heartbeat_server src/heartbeat_server.cpp)
target_include_directories(heartbeat_server PUBLIC
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>
$<INSTALL_INTERFACE:include>)
ament_target_dependencies(
server
heartbeat_server
rclcpp
csm_common_interfaces
builtin_interfaces
std_srvs
)

install(TARGETS client
install(TARGETS heartbeat_client
DESTINATION lib/${PROJECT_NAME})
install(TARGETS server
install(TARGETS heartbeat_server
DESTINATION lib/${PROJECT_NAME})


Expand Down
55 changes: 55 additions & 0 deletions src/common/heartbeat2/include/heartbeat_client.hpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,55 @@
#ifndef HEARTBEAT_CLIENT_HPP
#define HEARTBEAT_CLIENT_HPP

#include <rclcpp/rclcpp.hpp>
#include <boost/circular_buffer.hpp>
#include <std_srvs/srv/empty.hpp>

#include "csm_common_interfaces/msg/e_stop.hpp"

class HeartbeatClient : public rclcpp::Node {
public:
/**
* @brief Construct a new Heartbeat Client object
*
*/
HeartbeatClient();

/**
* @brief Establishes connection to heartbeat server
*
*/
void handshake();

private:
/**
* @brief Checks for handshake response
*
*/
void handshake_callback();

/**
* @brief Sends requests to server and checks if responses are sent
*
*/
void ping_callback();


// Time since last ping was received
unsigned int _lastResponseTime;
boost::circular_buffer<std::shared_future<std::shared_ptr<std_srvs::srv::Empty_Response>>> _futures;

// heartbeat and handshake
rclcpp::Client<std_srvs::srv::Empty>::SharedPtr handshakeClient;
rclcpp::Client<std_srvs::srv::Empty>::SharedPtr heartbeatClient;

// storing handshake futures and setting up timer to send requests and check for responses
std::shared_future<std::shared_ptr<std_srvs::srv::Empty_Response>> _handshakeFuture;
rclcpp::TimerBase::SharedPtr handshakeTimer;
rclcpp::TimerBase::SharedPtr pingTimer;

// the estop
rclcpp::Publisher<csm_common_interfaces::msg::EStop>::SharedPtr estopPub;
};

#endif // (HEARTBEAT_CLIENT_H)
55 changes: 55 additions & 0 deletions src/common/heartbeat2/include/heartbeat_server.hpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,55 @@
#ifndef HEARTBEAT_SERVER_HPP
#define HEARTBEAT_SERVER_HPP

#include <rclcpp/rclcpp.hpp>
#include <std_srvs/srv/empty.hpp>

#include "csm_common_interfaces/msg/e_stop.hpp"

class HeartbeatServer : public rclcpp::Node {
public:
/**
* @brief Construct a new Heartbeat Server object
*
*/
HeartbeatServer();

private:
/**
* @brief Establishes connection with heartbeat client
*
* @param request empty request
* @param response empty response
*/
void handshake(std_srvs::srv::Empty::Request::SharedPtr request, std_srvs::srv::Empty::Response::SharedPtr response);

/**
* @brief Watches if client stops sending requests
*
*/
void watchdog_callback();

/**
* @brief Processes requests from client
*
* @param request empty request
* @param response empty response
*/
void heartbeat_callback(std_srvs::srv::Empty::Request::SharedPtr request, std_srvs::srv::Empty::Response::SharedPtr response);

// last time request was received
unsigned int _lastPingTime;

// handshake and heartbeat
rclcpp::Service<std_srvs::srv::Empty>::SharedPtr handshakeSrv;
rclcpp::Service<std_srvs::srv::Empty>::SharedPtr heartbeatSrv;

// timer to periodically check for pings and send responses
rclcpp::TimerBase::SharedPtr watchdog;

// estop
rclcpp::Publisher<csm_common_interfaces::msg::EStop>::SharedPtr estopPub;
};


#endif // (HEARTBEAT_SERVER_H)
6 changes: 2 additions & 4 deletions src/common/heartbeat2/package.xml
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
<package format="3">
<name>heartbeat2</name>
<version>0.0.0</version>
<description>establish a heartbeat between drivestation and ROV</description>
<description>Establish a heartbeat between drivestation and ROV</description>
<maintainer email="[email protected]">kadin</maintainer>
<license>Apache-2.0</license>

Expand All @@ -13,11 +13,9 @@
<test_depend>ament_lint_common</test_depend>

<depend>rclcpp</depend>
<depend>builtin_interfaces</depend>
<depend>std_msgs</depend>
<depend>csm_common_interfaces</depend>
<depend>std_srvs</depend>
<depend>boost/circular_buffer</depend>
<depend>boost</depend>


<export>
Expand Down
137 changes: 0 additions & 137 deletions src/common/heartbeat2/src/client.cpp

This file was deleted.

Loading

0 comments on commit 5303ee8

Please sign in to comment.