Skip to content
Merged
Show file tree
Hide file tree
Changes from 2 commits
Commits
Show all changes
29 commits
Select commit Hold shift + click to select a range
ceb4d67
Initial version of new package implementing components for controling…
destogl Jun 12, 2020
3ceb98c
Add control component interfaces.
destogl Jun 16, 2020
9ddc603
Added initial tests for Joint and JointInterface
destogl Jul 27, 2020
eeaff7e
Extended SensorInterface to work with hardware. Added Example for Dum…
destogl Jul 28, 2020
d7eae16
Remove component types since they are not used yet.
destogl Jul 28, 2020
818846d
Added tests for all interfaces and implemented review comments
destogl Jul 29, 2020
3fead1f
Added HardwareInfo as the main structure in the robot's URDF file
destogl Aug 17, 2020
2fea78d
Add Hardware and Component base classes and tests.
destogl Aug 17, 2020
182d7f1
Update hardware_interface/include/hardware_interface/sensor_hardware_…
destogl Aug 18, 2020
90b6ee2
Update hardware_interface/include/hardware_interface/system_hardware_…
destogl Aug 18, 2020
53e83c4
Update hardware_interface/include/hardware_interface/system_hardware_…
destogl Aug 18, 2020
7f922dd
Update hardware_interface/include/hardware_interface/system_hardware_…
destogl Aug 18, 2020
ef5a259
Split Component and Hardware Infos into two files
destogl Aug 18, 2020
374aeb0
Use separated headers for components_info and hardware_info
destogl Aug 18, 2020
daaac84
Style corrections
destogl Aug 18, 2020
5e4ed73
Add documentation for joint and sensor components
destogl Aug 18, 2020
3053824
Update hardware_interface/test/test_component_interfaces.cpp
destogl Aug 18, 2020
7089abe
Style corrections
destogl Aug 18, 2020
f9c1d15
The base classes for Joints and Sensors are implemented
destogl Aug 18, 2020
ed11e86
Add more tests to get better coverage
destogl Aug 19, 2020
f6a731a
Updated after comments and added helper header
destogl Aug 19, 2020
8dbe0bc
Implementation moved to cpp files
destogl Aug 19, 2020
f871d5e
Removed virtual function for checking limits
destogl Aug 19, 2020
fbed601
Use inline functions in helper header and make API-consistent return …
destogl Aug 20, 2020
62cf9ab
Correct faulty header guard
destogl Aug 20, 2020
567b774
Corrected depency export and sorting of includes and namespaces in te…
destogl Aug 20, 2020
71aafc2
remove helpers namespace
destogl Aug 21, 2020
3d5f7a5
osx touchups
Karsten1987 Aug 21, 2020
00b73ee
move components into components folder
Karsten1987 Aug 21, 2020
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
14 changes: 10 additions & 4 deletions hardware_interface/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -26,14 +26,14 @@ add_library(
target_include_directories(
hardware_interface
PUBLIC
include)
include
)
ament_target_dependencies(
hardware_interface
control_msgs
rclcpp
rcpputils
)

# Causes the visibility macros to use dllexport rather than dllimport,
# which is appropriate when building the dll but not consuming it.
target_compile_definitions(hardware_interface PRIVATE "HARDWARE_INTERFACE_BUILDING_DLL")
Expand Down Expand Up @@ -76,11 +76,17 @@ if(BUILD_TESTING)

endif()

ament_export_dependencies(
rclcpp
rcpputils
)
ament_export_include_directories(
include
)
ament_export_libraries(
hardware_interface)
hardware_interface
)
ament_export_dependencies(
control_msgs)
control_msgs
)
ament_package()
103 changes: 103 additions & 0 deletions hardware_interface/include/hardware_interface/component_info.hpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,103 @@
// Copyright 2020 ros2_control Development Team
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.


#ifndef HARDWARE_INTERFACE__COMPONENT_INFO_HPP_
#define HARDWARE_INTERFACE__COMPONENT_INFO_HPP_

#include <string>
#include <unordered_map>
#include <vector>

namespace hardware_interface
{

/**
* \brief constants for types of components.
*/
constexpr const auto robotType = "robot";
Comment thread
destogl marked this conversation as resolved.
Outdated
constexpr const auto actuatorType = "actuator";
constexpr const auto sensorType = "sensor";

/**
* \brief This structure stores information about components defined in a robot's URDF.
*/
struct ComponentInfo
{
/**
* \brief name of the component.
*/
std::string name;
/**
* \brief type of the component: sensor or actuator.
*/
std::string type;
/**
* \brief component's class, which will be dynamically loaded.
*/
std::string class_type;
Comment thread
destogl marked this conversation as resolved.
/**
* \brief joint where component is placed.
*/
std::string joint;
/**
* \brief name of the interface, e.g. "position", "velocity", etc. for meaning of data this component holds.
*/
std::vector<std::string> interface_names;
/**
* \brief (optional) key-value pairs of components parameters.
*/
std::unordered_map<std::string, std::string> parameters;

Comment thread
destogl marked this conversation as resolved.
Outdated
/**
* \brief (optional) hardware class of the component that will be dynamically loaded. If not defined, the system's hardware class has to be defined.
Comment thread
destogl marked this conversation as resolved.
Outdated
*/
std::string hardware_class_type;
/**
* \brief (optional) key-value pairs for components hardware.
*/
std::unordered_map<std::string, std::string> hardware_parameters;
};

/**
* \brief This structure stores informations about system defined in robot's URDF, i.e. "ros2_control"-tag.
*/
struct SystemInfo
{
/**
* \brief name of the system.
*/
std::string name;
/**
* \brief type of the system: robot, actuator or sensor. Note: URDF always needs a "robot" tag, nevertheless in terms of ros2_control, it can hold a definition for an actuator or sensor.
*/
std::string type;
/**
* \brief (optional) hardware class of the system, which will be dynamically loaded. If not defined, a hardware class for each subcomponent has to be defined.
*/
std::string hardware_class_type;
/**
* \brief (optional) key-value pairs for systems hardware.
*/
std::unordered_map<std::string, std::string> hardware_parameters;

/**
* \brief list of subcomponents in the system, i.e., list of sensors and actuators.
*/
std::vector<ComponentInfo> subcomponents;
};

} // namespace hardware_interface

#endif // HARDWARE_INTERFACE__COMPONENT_INFO_HPP_
Original file line number Diff line number Diff line change
@@ -0,0 +1,70 @@
// Copyright 2020 ros2_control Development Team
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.

#ifndef HARDWARE_INTERFACE__COMPONENT_INTERFACES__JOINT_INTERFACE_HPP_
#define HARDWARE_INTERFACE__COMPONENT_INTERFACES__JOINT_INTERFACE_HPP_

#include <algorithm>
#include <array>
#include <string>
#include <vector>

#include "hardware_interface/component_info.hpp"
#include "hardware_interface/types/hardware_interface_return_values.hpp"
#include "hardware_interface/visibility_control.h"

namespace hardware_interface
{

class JointInterface
{
public:
HARDWARE_INTERFACE_PUBLIC
JointInterface() = default;

HARDWARE_INTERFACE_PUBLIC
virtual
~JointInterface() = default;

HARDWARE_INTERFACE_PUBLIC
virtual
return_type configure(const ComponentInfo & actuator_info) = 0;

HARDWARE_INTERFACE_PUBLIC
virtual
std::string get_interface_name() const = 0;

HARDWARE_INTERFACE_PUBLIC
virtual
return_type start() = 0;

HARDWARE_INTERFACE_PUBLIC
virtual
return_type stop() = 0;

HARDWARE_INTERFACE_PUBLIC
virtual
bool is_started() const = 0;

HARDWARE_INTERFACE_PUBLIC
virtual
return_type read(double & data) = 0;

HARDWARE_INTERFACE_PUBLIC
virtual
return_type write(const double & data) = 0;
};

} // namespace hardware_interface
#endif // HARDWARE_INTERFACE__COMPONENT_INTERFACES__JOINT_INTERFACE_HPP_
Original file line number Diff line number Diff line change
@@ -0,0 +1,63 @@
// Copyright 2020 ros2_control Development Team
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.

#ifndef HARDWARE_INTERFACE__COMPONENT_INTERFACES__SENSOR_INTERFACE_HPP_
#define HARDWARE_INTERFACE__COMPONENT_INTERFACES__SENSOR_INTERFACE_HPP_

#include <string>

#include "hardware_interface/component_info.hpp"
#include "hardware_interface/types/hardware_interface_return_values.hpp"
#include "hardware_interface/visibility_control.h"

namespace hardware_interface
{

class SensorInterface
{
public:
HARDWARE_INTERFACE_PUBLIC
SensorInterface() = default;

HARDWARE_INTERFACE_PUBLIC
virtual
~SensorInterface() = default;

HARDWARE_INTERFACE_PUBLIC
virtual
return_type configure(const ComponentInfo & sensor_info) = 0;

HARDWARE_INTERFACE_PUBLIC
virtual
std::string get_interface_name() const = 0;

HARDWARE_INTERFACE_PUBLIC
virtual
return_type start() = 0;

HARDWARE_INTERFACE_PUBLIC
virtual
return_type stop() = 0;

HARDWARE_INTERFACE_PUBLIC
virtual
bool is_started() const = 0;

HARDWARE_INTERFACE_PUBLIC
virtual
return_type read(double & data) = 0;
};

} // namespace hardware_interface
#endif // HARDWARE_INTERFACE__COMPONENT_INTERFACES__SENSOR_INTERFACE_HPP_
Original file line number Diff line number Diff line change
@@ -0,0 +1,70 @@
// Copyright 2020 ros2_control Development Team
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.

#ifndef HARDWARE_INTERFACE__COMPONENT_INTERFACES__SYSTEM_INTERFACE_HPP_
#define HARDWARE_INTERFACE__COMPONENT_INTERFACES__SYSTEM_INTERFACE_HPP_

#include <string>
#include <vector>

#include "hardware_interface/component_info.hpp"
#include "hardware_interface/types/hardware_interface_return_values.hpp"
#include "hardware_interface/visibility_control.h"

namespace hardware_interface
{

class SystemInterface
{
public:
HARDWARE_INTERFACE_PUBLIC
SystemInterface() = default;

HARDWARE_INTERFACE_PUBLIC
virtual
~SystemInterface() = default;

HARDWARE_INTERFACE_PUBLIC
virtual
return_type configure(const SystemInfo & system_info) = 0;

HARDWARE_INTERFACE_PUBLIC
virtual
std::vector<std::string> get_interface_names() const = 0;

HARDWARE_INTERFACE_PUBLIC
virtual
return_type start() = 0;

HARDWARE_INTERFACE_PUBLIC
virtual
return_type stop() = 0;

HARDWARE_INTERFACE_PUBLIC
virtual
bool is_started() const = 0;

HARDWARE_INTERFACE_PUBLIC
virtual
return_type read(std::vector<double> & data) = 0;

return_type
virtual
write(const std::vector<double> & data) = 0;
Comment thread
destogl marked this conversation as resolved.
Outdated
};

typedef SystemInterface RobotInterface;

} // namespace hardware_interface
#endif // HARDWARE_INTERFACE__COMPONENT_INTERFACES__SYSTEM_INTERFACE_HPP_
Loading