Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
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
Original file line number Diff line number Diff line change
Expand Up @@ -100,6 +100,11 @@ class CombinedRobotHW : public hardware_interface::RobotHW
*/
virtual void write(const ros::Time& time, const ros::Duration& period);

/**
* Checks whether the robot HW components have errors
*/
virtual bool hasError();

protected:
ros::NodeHandle root_nh_;
ros::NodeHandle robot_hw_nh_;
Expand Down
14 changes: 14 additions & 0 deletions combined_robot_hw/src/combined_robot_hw.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -205,6 +205,20 @@ namespace combined_robot_hw
}
}

bool CombinedRobotHW::hasError()
{
// Call the hasError method of the single RobotHW objects.
std::vector<hardware_interface::RobotHWSharedPtr>::iterator robot_hw;
for (robot_hw = robot_hw_list_.begin(); robot_hw != robot_hw_list_.end(); ++robot_hw)
{
if ((*robot_hw)->hasError())
{
return true;
}
}
return false;
}

void CombinedRobotHW::filterControllerList(const std::list<hardware_interface::ControllerInfo>& list,
std::list<hardware_interface::ControllerInfo>& filtered_list,
hardware_interface::RobotHWSharedPtr robot_hw)
Expand Down
1 change: 1 addition & 0 deletions combined_robot_hw_tests/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,7 @@ add_library(${PROJECT_NAME}
src/my_robot_hw_2.cpp
src/my_robot_hw_3.cpp
src/my_robot_hw_4.cpp
src/my_robot_hw_5.cpp
)
add_dependencies(${PROJECT_NAME} ${catkin_EXPORTED_TARGETS})
target_link_libraries(${PROJECT_NAME} ${catkin_LIBRARIES} ${Boost_LIBRARIES})
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,54 @@
///////////////////////////////////////////////////////////////////////////////
// Copyright (C) 2015, Shadow Robot Company Ltd.
//
// Redistribution and use in source and binary forms, with or without
// modification, are permitted provided that the following conditions are met:
// * Redistributions of source code must retain the above copyright notice,
// this list of conditions and the following disclaimer.
// * Redistributions in binary form must reproduce the above copyright
// notice, this list of conditions and the following disclaimer in the
// documentation and/or other materials provided with the distribution.
// * Neither the name of hiDOF, Inc. nor the names of its
// contributors may be used to endorse or promote products derived from
// this software without specific prior written permission.
//
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
// POSSIBILITY OF SUCH DAMAGE.
//////////////////////////////////////////////////////////////////////////////



#ifndef CONTROLLER_MANAGER_TESTS_MY_ROBOT_HW_5_H
#define CONTROLLER_MANAGER_TESTS_MY_ROBOT_HW_5_H

#include <hardware_interface/joint_command_interface.h>
#include <hardware_interface/robot_hw.h>
#include <pluginlib/class_list_macros.hpp>

namespace combined_robot_hw_tests
{

class MyRobotHW5 : public hardware_interface::RobotHW
{
public:
MyRobotHW5();
virtual ~MyRobotHW5(){};
virtual bool init(ros::NodeHandle& root_nh, ros::NodeHandle &robot_hw_nh);
void read(const ros::Time& time, const ros::Duration& period);
void write(const ros::Time& time, const ros::Duration& period);
bool hasError();

};
}


#endif
61 changes: 61 additions & 0 deletions combined_robot_hw_tests/src/my_robot_hw_5.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,61 @@
///////////////////////////////////////////////////////////////////////////////
// Copyright (C) 2015, Shadow Robot Company Ltd.
//
// Redistribution and use in source and binary forms, with or without
// modification, are permitted provided that the following conditions are met:
// * Redistributions of source code must retain the above copyright notice,
// this list of conditions and the following disclaimer.
// * Redistributions in binary form must reproduce the above copyright
// notice, this list of conditions and the following disclaimer in the
// documentation and/or other materials provided with the distribution.
// * Neither the name of Shadow Robot Company Ltd. nor the names of its
// contributors may be used to endorse or promote products derived from
// this software without specific prior written permission.
//
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
// POSSIBILITY OF SUCH DAMAGE.
//////////////////////////////////////////////////////////////////////////////


#include <combined_robot_hw_tests/my_robot_hw_5.h>

namespace combined_robot_hw_tests
{

MyRobotHW5::MyRobotHW5()
{
}

bool MyRobotHW5::init(ros::NodeHandle& root_nh, ros::NodeHandle &robot_hw_nh)
{
return true;
}


void MyRobotHW5::read(const ros::Time& time, const ros::Duration& period)
{

}

void MyRobotHW5::write(const ros::Time& time, const ros::Duration& period)
{
}

bool MyRobotHW5::hasError()
{
return true;
}

}

PLUGINLIB_EXPORT_CLASS( combined_robot_hw_tests::MyRobotHW5, hardware_interface::RobotHW)

2 changes: 2 additions & 0 deletions combined_robot_hw_tests/test/cm_test.test
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,8 @@
joint_name_filter: right_arm
my_robot_hw_4:
type: combined_robot_hw_tests/MyRobotHW4
my_robot_hw_5:
type: combined_robot_hw_tests/MyRobotHW5
my_controller:
type: controller_manager_tests/EffortTestController
my_controller2:
Expand Down
3 changes: 3 additions & 0 deletions combined_robot_hw_tests/test/combined_robot_hw_test.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -94,6 +94,9 @@ TEST(CombinedRobotHWTests, combinationOk)
robot_hw.write(ros::Time::now(), period);
ej_handle = ej_interface->getHandle("test_joint2");
ASSERT_FLOAT_EQ(3.5, ej_handle.getCommand());

bool error = robot_hw.hasError();
ASSERT_TRUE(error);
}

TEST(CombinedRobotHWTests, switchOk)
Expand Down
3 changes: 3 additions & 0 deletions combined_robot_hw_tests/test/combined_robot_hw_test.test
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
- my_robot_hw_2
- my_robot_hw_3
- my_robot_hw_4
- my_robot_hw_5
my_robot_hw_1:
type: combined_robot_hw_tests/MyRobotHW1
my_robot_hw_2:
Expand All @@ -18,6 +19,8 @@
joint_name_filter: right_arm
my_robot_hw_4:
type: combined_robot_hw_tests/MyRobotHW4
my_robot_hw_5:
type: combined_robot_hw_tests/MyRobotHW5
</rosparam>

<test test-name="combined_robot_hw_tests" pkg="combined_robot_hw_tests" type="combined_robot_hw_test"/>
Expand Down
6 changes: 6 additions & 0 deletions combined_robot_hw_tests/test_robot_hw_plugin.xml
Original file line number Diff line number Diff line change
Expand Up @@ -22,4 +22,10 @@
A type of RobotHW
</description>
</class>

<class name="combined_robot_hw_tests/MyRobotHW5" type="combined_robot_hw_tests::MyRobotHW5" base_class_type="hardware_interface::RobotHW">
<description>
A type of RobotHW
</description>
</class>
</library>
6 changes: 6 additions & 0 deletions hardware_interface/include/hardware_interface/robot_hw.h
Original file line number Diff line number Diff line change
Expand Up @@ -163,6 +163,12 @@ class RobotHW : public InterfaceManager
* \param period The time passed since the last call to \ref write
*/
virtual void write(const ros::Time& time, const ros::Duration& period) {}

/**
* Check whether the robot HW has encountered an error
*/
virtual bool hasError() { return false; };

};

typedef std::shared_ptr<RobotHW> RobotHWSharedPtr;
Expand Down