diff --git a/.gitignore b/.gitignore index 226d3a71..3a449466 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,4 @@ + devel/ bin/ msg_gen/ @@ -59,3 +60,6 @@ COLCON_IGNORE # uwrt_mars_rover_hw_bridge shouldnt be added as a git submodule uwrt_mars_rover_utils/lib/uwrt_mars_rover_hw_bridge/ +uwrt_mars_rover_arm/uwrt_mars_rover_arm_hw/compile_commands.json +uwrt_mars_rover_arm/uwrt_mars_rover_arm_hw/compile_commands.json +.gitignore diff --git a/uwrt_mars_rover_arm/uwrt_mars_rover_arm_hw/CMakeLists.txt b/uwrt_mars_rover_arm/uwrt_mars_rover_arm_hw/CMakeLists.txt index ab5f9053..4e7255d5 100644 --- a/uwrt_mars_rover_arm/uwrt_mars_rover_arm_hw/CMakeLists.txt +++ b/uwrt_mars_rover_arm/uwrt_mars_rover_arm_hw/CMakeLists.txt @@ -24,6 +24,14 @@ if(NOT CMAKE_CXX_STANDARD) set(CMAKE_CXX_STANDARD 14) endif() +# add_library(uwrt_mars_rover_utils SHARED IMPORTED) +# target_link_libraries( +# ${PROJECT_NAME} +# PUBLIC +# uwrt_mars_rover_utils::uwrt_mars_rover_utils +# ) + + # find dependencies find_package(ament_cmake REQUIRED) find_package(hardware_interface REQUIRED) @@ -31,6 +39,7 @@ find_package(transmission_interface REQUIRED) find_package(pluginlib REQUIRED) find_package(rclcpp REQUIRED) find_package(rclcpp_lifecycle REQUIRED) +find_package(uwrt_mars_rover_utils REQUIRED) include_directories(include) @@ -41,6 +50,7 @@ include_directories(include) # include #) + # add dynamic library & it's dependecies add_library( ${PROJECT_NAME} @@ -48,6 +58,7 @@ add_library( src/${PROJECT_NAME}_actuator.cpp src/${PROJECT_NAME}_differential.cpp ) + ament_target_dependencies( ${PROJECT_NAME} hardware_interface @@ -55,7 +66,10 @@ ament_target_dependencies( pluginlib rclcpp_lifecycle rclcpp + uwrt_mars_rover_utils ) + + target_compile_options(${PROJECT_NAME} PRIVATE -Wshadow -Werror) # add some extra flags for this target target_compile_definitions(${PROJECT_NAME} PRIVATE "UWRT_MARS_ROVER_ARM_HW_DLL") # visibility header stuff regarding .so files #TODO: fill in the above correct compile definition above diff --git a/uwrt_mars_rover_arm/uwrt_mars_rover_arm_hw/compile_commands.json b/uwrt_mars_rover_arm/uwrt_mars_rover_arm_hw/compile_commands.json deleted file mode 120000 index fb786302..00000000 --- a/uwrt_mars_rover_arm/uwrt_mars_rover_arm_hw/compile_commands.json +++ /dev/null @@ -1 +0,0 @@ -/home/niiquaye/robotics/build/uwrt_mars_rover_arm_hw/compile_commands.json \ No newline at end of file diff --git a/uwrt_mars_rover_arm/uwrt_mars_rover_arm_hw/include/uwrt_mars_rover_arm_hw/uwrt_mars_rover_arm_hw_actuator.hpp b/uwrt_mars_rover_arm/uwrt_mars_rover_arm_hw/include/uwrt_mars_rover_arm_hw/uwrt_mars_rover_arm_hw_actuator.hpp index 2ca5ef60..34b7eb85 100644 --- a/uwrt_mars_rover_arm/uwrt_mars_rover_arm_hw/include/uwrt_mars_rover_arm_hw/uwrt_mars_rover_arm_hw_actuator.hpp +++ b/uwrt_mars_rover_arm/uwrt_mars_rover_arm_hw/include/uwrt_mars_rover_arm_hw/uwrt_mars_rover_arm_hw_actuator.hpp @@ -14,45 +14,11 @@ #include #include #include - +#include #include "uwrt_mars_rover_arm_hw/visibility.hpp" namespace uwrt_mars_rover_arm_hw { -// namespaced structs to hold transmission data - state & command -namespace TransmissionData -{ -namespace ActuatorData -{ -using CommandData = struct CommandData -{ - double velocity{}; -}; - -using StateData = struct StateData -{ - double velocity{}; - double position{}; - double iq_current{}; // not used for differential transmission -}; - -} // namespace ActuatorData -namespace JointData -{ -using CommandData = struct CommandData -{ - double velocity{}; -}; - -using StateData = struct StateData -{ - double velocity{}; - double position{}; -}; - -} // namespace JointData - -} // namespace TransmissionData class ArmActuatorInterface : public hardware_interface::ActuatorInterface { @@ -115,10 +81,10 @@ class ArmActuatorInterface : public hardware_interface::ActuatorInterface inline static constexpr std::size_t NUM_COMMAND_INTERFACES{1}; // holds actuator reads/writes - TransmissionData::ActuatorData::CommandData actuator_commands{}; - TransmissionData::ActuatorData::StateData actuator_states{}; - TransmissionData::JointData::CommandData joint_commands{}; - TransmissionData::JointData::StateData joint_states{}; + DifferentialTransmissionData::ActuatorData::CommandData actuator_commands{}; + DifferentialTransmissionData::ActuatorData::StateData actuator_states{}; + DifferentialTransmissionData::JointData::CommandData joint_commands{}; + DifferentialTransmissionData::JointData::StateData joint_states{}; // transmission for state & command transmission std::shared_ptr command_transmission{nullptr}; diff --git a/uwrt_mars_rover_arm/uwrt_mars_rover_arm_hw/include/uwrt_mars_rover_arm_hw/uwrt_mars_rover_arm_hw_differential.hpp b/uwrt_mars_rover_arm/uwrt_mars_rover_arm_hw/include/uwrt_mars_rover_arm_hw/uwrt_mars_rover_arm_hw_differential.hpp index 03ff12c2..2592e170 100644 --- a/uwrt_mars_rover_arm/uwrt_mars_rover_arm_hw/include/uwrt_mars_rover_arm_hw/uwrt_mars_rover_arm_hw_differential.hpp +++ b/uwrt_mars_rover_arm/uwrt_mars_rover_arm_hw/include/uwrt_mars_rover_arm_hw/uwrt_mars_rover_arm_hw_differential.hpp @@ -15,6 +15,7 @@ #include #include #include +#include #include #include "transmission_interface/handle.hpp" @@ -23,40 +24,6 @@ namespace uwrt_mars_rover_arm_hw { -namespace DifferentialTransmissionData -{ -namespace ActuatorData -{ -using CommandData = struct CommandData -{ - double - velocity{}; //TODO: change this so that it can work with any interface type... add enum class that will hold the different command types -}; - -using StateData = struct StateData -{ - double velocity{}; - double position{}; - double iq_current{}; // not used for differential transmission -}; - -} // namespace ActuatorData -namespace JointData -{ -using CommandData = struct CommandData -{ - double velocity{}; -}; - -using StateData = struct StateData -{ - double velocity{}; - double position{}; -}; - -} // namespace JointData - -} // namespace DifferentialTransmissionData class ArmDifferentialSystemInterface : public hardware_interface::SystemInterface { diff --git a/uwrt_mars_rover_arm/uwrt_mars_rover_arm_hw/package.xml b/uwrt_mars_rover_arm/uwrt_mars_rover_arm_hw/package.xml index f83ec7eb..464fac05 100644 --- a/uwrt_mars_rover_arm/uwrt_mars_rover_arm_hw/package.xml +++ b/uwrt_mars_rover_arm/uwrt_mars_rover_arm_hw/package.xml @@ -14,6 +14,7 @@ rclcpp rclcpp_lifecycle transmission_interface + uwrt_mars_rover_utils ament_cmake_cppcheck ament_clang_tidy diff --git a/uwrt_mars_rover_utils/CMakeLists.txt b/uwrt_mars_rover_utils/CMakeLists.txt new file mode 100644 index 00000000..547e254e --- /dev/null +++ b/uwrt_mars_rover_utils/CMakeLists.txt @@ -0,0 +1,79 @@ +cmake_minimum_required(VERSION 3.8) +project(uwrt_mars_rover_utils) + +# set C/C++ standard +if(NOT CMAKE_C_STANDARD) + set(CMAKE_C_STANDARD 99) +endif() +if(NOT CMAKE_CXX_STANDARD) + set(CMAKE_CXX_STANDARD 14) +endif() + + +if(CMAKE_COMPILER_IS_GNUCXX OR CMAKE_CXX_COMPILER_ID MATCHES "Clang") + add_compile_options(-Wall -Wextra -Wpedantic) +endif() + +# find dependencies +find_package(ament_cmake REQUIRED) + +add_library(${PROJECT_NAME} INTERFACE) +target_include_directories( + ${PROJECT_NAME} + INTERFACE + $ + $ +) + +ament_export_targets(${PROJECT_NAME}Targets HAS_LIBRARY_TARGET) + + +install( + DIRECTORY include/ + DESTINATION include +) +install( + TARGETS ${PROJECT_NAME} + EXPORT ${PROJECT_NAME}Targets + LIBRARY DESTINATION lib + ARCHIVE DESTINATION lib + RUNTIME DESTINATION bin + INCLUDES DESTINATION include +) + + + + +if(BUILD_TESTING) + # Force generation of compile_commands.json for clang-tidy + set(CMAKE_EXPORT_COMPILE_COMMANDS ON CACHE INTERNAL "") + + # clang-format + find_package(ament_cmake_clang_format REQUIRED) + ament_clang_format( + CONFIG_FILE ${CMAKE_SOURCE_DIR}/../../.clang-format + ) + + # clang-tidy + find_package(ament_cmake_clang_tidy REQUIRED) + ament_clang_tidy( + ${CMAKE_BINARY_DIR} + CONFIG_FILE ${CMAKE_SOURCE_DIR}/../../.clang-tidy + ) + + # cppcheck + find_package(ament_cmake_cppcheck REQUIRED) + ament_cppcheck() + + # flake8 + find_package(ament_cmake_flake8 REQUIRED) + ament_flake8( + CONFIG_FILE ${CMAKE_SOURCE_DIR}/../../.flake8 + ) + + # xmllint + find_package(ament_cmake_xmllint REQUIRED) + ament_xmllint() +endif() + +ament_package() diff --git a/uwrt_mars_rover_utils/include/uwrt_mars_rover_utils/data_utils.hpp b/uwrt_mars_rover_utils/include/uwrt_mars_rover_utils/data_utils.hpp new file mode 100644 index 00000000..62093899 --- /dev/null +++ b/uwrt_mars_rover_utils/include/uwrt_mars_rover_utils/data_utils.hpp @@ -0,0 +1,34 @@ +#pragma once + +namespace DifferentialTransmissionData { + +namespace ActuatorData { + +struct CommandData { + double velocity{}; // TODO: change this so that it can work with any interface type... add enum class that will hold + // the different command types +}; + +struct StateData { + double velocity{}; + double position{}; + double iq_current{}; // not used for differential transmission +}; + +} // namespace ActuatorData + +// keeping this separate from ActuatorData despite the overlap for extensibility reasons +namespace JointData { + +struct CommandData { + double velocity{}; +}; + +struct StateData { + double velocity{}; + double position{}; +}; + +} // namespace JointData + +} // namespace DifferentialTransmissionData diff --git a/uwrt_mars_rover_utils/package.xml b/uwrt_mars_rover_utils/package.xml new file mode 100644 index 00000000..0f91e6db --- /dev/null +++ b/uwrt_mars_rover_utils/package.xml @@ -0,0 +1,23 @@ + + + + uwrt_mars_rover_utils + 0.0.0 + UWRT Mars Rover utilities package for avoiding duplicate code. + keyonjerome + MIT + + ament_cmake + + ament_lint_auto + ament_lint_common + ament_cmake_clang_format + ament_cmake_clang_tidy + ament_cmake_cppcheck + ament_cmake_flake8 + ament_cmake_xmllint + + + ament_cmake + +