diff --git a/CMakeLists.txt b/CMakeLists.txt index b4e6cf1..d2f8129 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -16,6 +16,7 @@ find_package(serial REQUIRED) find_package(hardware_interface REQUIRED) find_package(controller_manager REQUIRED) find_package(rclcpp REQUIRED) +find_package(rclcpp_lifecycle REQUIRED) find_package(pluginlib REQUIRED) @@ -36,6 +37,7 @@ ament_target_dependencies( controller_manager serial rclcpp + rclcpp_lifecycle pluginlib ) @@ -56,6 +58,7 @@ ament_target_dependencies( hardware_interface controller_manager rclcpp + rclcpp_lifecycle pluginlib ) @@ -87,6 +90,7 @@ ament_export_dependencies( controller_manager serial rclcpp + rclcpp_lifecycle pluginlib ) diff --git a/include/diffdrive_arduino/diffdrive_arduino.h b/include/diffdrive_arduino/diffdrive_arduino.h index 296f708..313b994 100644 --- a/include/diffdrive_arduino/diffdrive_arduino.h +++ b/include/diffdrive_arduino/diffdrive_arduino.h @@ -3,13 +3,13 @@ #include #include "rclcpp/rclcpp.hpp" +#include "rclcpp_lifecycle/state.hpp" +#include "rclcpp_lifecycle/node_interfaces/lifecycle_node_interface.hpp" -#include "hardware_interface/base_interface.hpp" #include "hardware_interface/system_interface.hpp" #include "hardware_interface/handle.hpp" #include "hardware_interface/hardware_info.hpp" #include "hardware_interface/types/hardware_interface_return_values.hpp" -#include "hardware_interface/types/hardware_interface_status_values.hpp" #include "config.h" #include "wheel.h" @@ -17,27 +17,28 @@ using hardware_interface::return_type; +using hardware_interface::CallbackReturn; -class DiffDriveArduino : public hardware_interface::BaseInterface +class DiffDriveArduino : public hardware_interface::SystemInterface { public: DiffDriveArduino(); - return_type configure(const hardware_interface::HardwareInfo & info) override; + CallbackReturn on_init(const hardware_interface::HardwareInfo & info) override; std::vector export_state_interfaces() override; std::vector export_command_interfaces() override; - return_type start() override; + CallbackReturn on_activate(const rclcpp_lifecycle::State & previous_state) override; - return_type stop() override; + CallbackReturn on_deactivate(const rclcpp_lifecycle::State & previous_state) override; - return_type read() override; + return_type read(const rclcpp::Time & time, const rclcpp::Duration & period) override; - return_type write() override; + return_type write(const rclcpp::Time & time, const rclcpp::Duration & period) override; diff --git a/include/diffdrive_arduino/fake_robot.h b/include/diffdrive_arduino/fake_robot.h index 3f2e355..b07f7fc 100644 --- a/include/diffdrive_arduino/fake_robot.h +++ b/include/diffdrive_arduino/fake_robot.h @@ -3,39 +3,41 @@ #include "rclcpp/rclcpp.hpp" +#include "rclcpp_lifecycle/state.hpp" +#include "rclcpp_lifecycle/node_interfaces/lifecycle_node_interface.hpp" -#include "hardware_interface/base_interface.hpp" #include "hardware_interface/system_interface.hpp" #include "hardware_interface/handle.hpp" #include "hardware_interface/hardware_info.hpp" #include "hardware_interface/types/hardware_interface_return_values.hpp" -#include "hardware_interface/types/hardware_interface_status_values.hpp" #include "config.h" #include "wheel.h" using hardware_interface::return_type; +using hardware_interface::CallbackReturn; -class FakeRobot : public hardware_interface::BaseInterface +class FakeRobot : public hardware_interface::SystemInterface { public: + using rclcpp_lifecycle::node_interfaces::LifecycleNodeInterface::CallbackReturn; FakeRobot(); - return_type configure(const hardware_interface::HardwareInfo & info) override; + CallbackReturn on_init(const hardware_interface::HardwareInfo & info) override; std::vector export_state_interfaces() override; std::vector export_command_interfaces() override; - return_type start() override; + CallbackReturn on_activate(const rclcpp_lifecycle::State & previous_state) override; - return_type stop() override; + CallbackReturn on_deactivate(const rclcpp_lifecycle::State & previous_state) override; - return_type read() override; + return_type read(const rclcpp::Time & time, const rclcpp::Duration & period) override; - return_type write() override; + return_type write(const rclcpp::Time & time, const rclcpp::Duration & period) override; diff --git a/package.xml b/package.xml index 1bddcbf..5144199 100644 --- a/package.xml +++ b/package.xml @@ -1,7 +1,7 @@ diffdrive_arduino - 0.0.1 + 1.0.0 Provides an interface between diff_drive_controller and an Arduino. Josh Newans @@ -21,6 +21,7 @@ controller_manager pluginlib rclcpp + rclcpp_lifecycle serial diff --git a/src/diffdrive_arduino.cpp b/src/diffdrive_arduino.cpp index 701c48a..f3c5069 100644 --- a/src/diffdrive_arduino.cpp +++ b/src/diffdrive_arduino.cpp @@ -14,10 +14,10 @@ DiffDriveArduino::DiffDriveArduino() -return_type DiffDriveArduino::configure(const hardware_interface::HardwareInfo & info) +CallbackReturn DiffDriveArduino::on_init(const hardware_interface::HardwareInfo & info) { - if (configure_default(info) != return_type::OK) { - return return_type::ERROR; + if (hardware_interface::SystemInterface::on_init(info) != CallbackReturn::SUCCESS) { + return CallbackReturn::ERROR; } RCLCPP_INFO(logger_, "Configuring..."); @@ -41,8 +41,7 @@ return_type DiffDriveArduino::configure(const hardware_interface::HardwareInfo & RCLCPP_INFO(logger_, "Finished Configuration"); - status_ = hardware_interface::status::CONFIGURED; - return return_type::OK; + return CallbackReturn::SUCCESS; } std::vector DiffDriveArduino::export_state_interfaces() @@ -72,7 +71,7 @@ std::vector DiffDriveArduino::export_comma } -return_type DiffDriveArduino::start() +CallbackReturn DiffDriveArduino::on_activate(const rclcpp_lifecycle::State & previous_state) { RCLCPP_INFO(logger_, "Starting Controller..."); @@ -81,20 +80,17 @@ return_type DiffDriveArduino::start() // arduino.setPidValues(14,7,0,100); arduino_.setPidValues(30, 20, 0, 100); - status_ = hardware_interface::status::STARTED; - - return return_type::OK; + return CallbackReturn::SUCCESS; } -return_type DiffDriveArduino::stop() +CallbackReturn DiffDriveArduino::on_deactivate(const rclcpp_lifecycle::State & previous_state) { RCLCPP_INFO(logger_, "Stopping Controller..."); - status_ = hardware_interface::status::STOPPED; - return return_type::OK; + return CallbackReturn::SUCCESS; } -hardware_interface::return_type DiffDriveArduino::read() +hardware_interface::return_type DiffDriveArduino::read(const rclcpp::Time & time, const rclcpp::Duration & period) { // TODO fix chrono duration @@ -128,7 +124,7 @@ hardware_interface::return_type DiffDriveArduino::read() } -hardware_interface::return_type DiffDriveArduino::write() +hardware_interface::return_type DiffDriveArduino::write(const rclcpp::Time & time, const rclcpp::Duration & period) { if (!arduino_.connected()) diff --git a/src/fake_robot.cpp b/src/fake_robot.cpp index 9208f9f..1a14492 100644 --- a/src/fake_robot.cpp +++ b/src/fake_robot.cpp @@ -10,10 +10,10 @@ FakeRobot::FakeRobot() -return_type FakeRobot::configure(const hardware_interface::HardwareInfo & info) +CallbackReturn FakeRobot::on_init(const hardware_interface::HardwareInfo & info) { - if (configure_default(info) != return_type::OK) { - return return_type::ERROR; + if (hardware_interface::SystemInterface::on_init(info) != CallbackReturn::SUCCESS){ + return CallbackReturn::ERROR; } RCLCPP_INFO(logger_, "Configuring..."); @@ -33,8 +33,7 @@ return_type FakeRobot::configure(const hardware_interface::HardwareInfo & info) RCLCPP_INFO(logger_, "Finished Configuration"); - status_ = hardware_interface::status::CONFIGURED; - return return_type::OK; + return CallbackReturn::SUCCESS; } std::vector FakeRobot::export_state_interfaces() @@ -64,23 +63,21 @@ std::vector FakeRobot::export_command_inte } -return_type FakeRobot::start() +CallbackReturn FakeRobot::on_activate(const rclcpp_lifecycle::State & previous_state) { RCLCPP_INFO(logger_, "Starting Controller..."); - status_ = hardware_interface::status::STARTED; - return return_type::OK; + return CallbackReturn::SUCCESS; } -return_type FakeRobot::stop() +CallbackReturn FakeRobot::on_deactivate(const rclcpp_lifecycle::State & previous_state) { RCLCPP_INFO(logger_, "Stopping Controller..."); - status_ = hardware_interface::status::STOPPED; - return return_type::OK; + return CallbackReturn::SUCCESS; } -hardware_interface::return_type FakeRobot::read() +hardware_interface::return_type FakeRobot::read(const rclcpp::Time & time, const rclcpp::Duration & period) { // TODO fix chrono duration @@ -101,7 +98,7 @@ hardware_interface::return_type FakeRobot::read() } -hardware_interface::return_type FakeRobot::write() +hardware_interface::return_type FakeRobot::write(const rclcpp::Time & time, const rclcpp::Duration & period) { // Set the wheel velocities to directly match what is commanded