Skip to content

Commit 7f10ece

Browse files
author
Felix Durchdewald
committed
Port robot_state_helper to ROS2
1 parent 0639943 commit 7f10ece

File tree

5 files changed

+393
-1
lines changed

5 files changed

+393
-1
lines changed

ur_robot_driver/CMakeLists.txt

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,7 @@ add_library(ur_robot_driver_plugin
5555
src/dashboard_client_ros.cpp
5656
src/hardware_interface.cpp
5757
src/urcl_log_handler.cpp
58+
src/robot_state_helper.cpp
5859
)
5960
target_link_libraries(
6061
ur_robot_driver_plugin
@@ -103,13 +104,23 @@ add_executable(controller_stopper_node
103104
)
104105
ament_target_dependencies(controller_stopper_node ${${PROJECT_NAME}_EXPORTED_TARGETS} ${THIS_PACKAGE_INCLUDE_DEPENDS})
105106

107+
#
108+
# robot_state_helper
109+
#
110+
add_executable(robot_state_helper
111+
src/robot_state_helper.cpp
112+
src/robot_state_helper_node.cpp
113+
)
114+
target_link_libraries(robot_state_helper ${catkin_LIBRARIES} ur_client_library::urcl)
115+
ament_target_dependencies(robot_state_helper ${${PROJECT_NAME}_EXPORTED_TARGETS} ${THIS_PACKAGE_INCLUDE_DEPENDS})
116+
106117
add_executable(urscript_interface
107118
src/urscript_interface.cpp
108119
)
109120
ament_target_dependencies(urscript_interface ${${PROJECT_NAME}_EXPORTED_TARGETS} ${THIS_PACKAGE_INCLUDE_DEPENDS})
110121

111122
install(
112-
TARGETS dashboard_client ur_ros2_control_node controller_stopper_node urscript_interface
123+
TARGETS dashboard_client ur_ros2_control_node controller_stopper_node urscript_interface robot_state_helper
113124
DESTINATION lib/${PROJECT_NAME}
114125
)
115126

Lines changed: 72 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,72 @@
1+
#ifndef UR_ROBOT_DRIVER__ROBOT_STATE_HELPER_HPP_
2+
#define UR_ROBOT_DRIVER__ROBOT_STATE_HELPER_HPP_
3+
4+
#include <chrono>
5+
6+
#include "rclcpp/rclcpp.hpp"
7+
#include "rclcpp_action/create_server.hpp"
8+
#include "std_srvs/srv/trigger.hpp"
9+
10+
#include "ur_dashboard_msgs/action/set_mode.hpp"
11+
#include "ur_dashboard_msgs/msg/safety_mode.hpp"
12+
#include "ur_dashboard_msgs/msg/robot_mode.hpp"
13+
#include "ur_client_library/ur/datatypes.h"
14+
15+
namespace ur_robot_driver
16+
{
17+
class RobotStateHelper
18+
{
19+
public:
20+
using SetModeGoalHandle = rclcpp_action::ServerGoalHandle<ur_dashboard_msgs::action::SetMode>;
21+
22+
RobotStateHelper(const rclcpp::Node::SharedPtr& node);
23+
RobotStateHelper() = delete;
24+
virtual ~RobotStateHelper() = default;
25+
26+
private:
27+
rclcpp::Node::SharedPtr node_;
28+
29+
void robotModeCallback(ur_dashboard_msgs::msg::RobotMode::SharedPtr msg);
30+
void safetyModeCallback(ur_dashboard_msgs::msg::SafetyMode::SharedPtr msg);
31+
32+
void updateRobotState(bool called_from_thread = false);
33+
34+
void doTransition(bool called_from_thread = false);
35+
36+
bool safeDashboardTrigger(rclcpp::Client<std_srvs::srv::Trigger>::SharedPtr srv, bool called_from_thread = false);
37+
38+
void setModeAcceptCallback(const std::shared_ptr<SetModeGoalHandle> goal_handle);
39+
rclcpp_action::GoalResponse setModeGoalCallback(const rclcpp_action::GoalUUID& uuid,
40+
std::shared_ptr<const ur_dashboard_msgs::action::SetMode::Goal> goal);
41+
rclcpp_action::CancelResponse
42+
setModeCancelCallback(const std::shared_ptr<SetModeGoalHandle> goal_handle);
43+
44+
void setModeExecute(const std::shared_ptr<SetModeGoalHandle> goal_handle);
45+
46+
void startActionServer();
47+
bool is_started_;
48+
49+
std::shared_ptr<ur_dashboard_msgs::action::SetMode::Result> result_;
50+
std::shared_ptr<ur_dashboard_msgs::action::SetMode::Feedback> feedback_;
51+
std::shared_ptr<const ur_dashboard_msgs::action::SetMode::Goal> goal_;
52+
std::shared_ptr<SetModeGoalHandle> current_goal_handle_;
53+
54+
urcl::RobotMode robot_mode_;
55+
urcl::SafetyMode safety_mode_;
56+
57+
rclcpp_action::Server<ur_dashboard_msgs::action::SetMode>::SharedPtr set_mode_as_;
58+
59+
rclcpp::Subscription<ur_dashboard_msgs::msg::RobotMode>::SharedPtr robot_mode_sub_;
60+
rclcpp::Subscription<ur_dashboard_msgs::msg::SafetyMode>::SharedPtr safety_mode_sub_;
61+
62+
rclcpp::Client<std_srvs::srv::Trigger>::SharedPtr unlock_protective_stop_srv_;
63+
rclcpp::Client<std_srvs::srv::Trigger>::SharedPtr restart_safety_srv_;
64+
rclcpp::Client<std_srvs::srv::Trigger>::SharedPtr power_on_srv_;
65+
rclcpp::Client<std_srvs::srv::Trigger>::SharedPtr power_off_srv_;
66+
rclcpp::Client<std_srvs::srv::Trigger>::SharedPtr brake_release_srv_;
67+
rclcpp::Client<std_srvs::srv::Trigger>::SharedPtr stop_program_srv_;
68+
rclcpp::Client<std_srvs::srv::Trigger>::SharedPtr play_program_srv_;
69+
};
70+
} // namespace ur_robot_driver
71+
72+
#endif // UR_ROBOT_DRIVER__ROBOT_STATE_HELPER_HPP_

ur_robot_driver/launch/ur_control.launch.py

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -236,6 +236,14 @@ def launch_setup(context, *args, **kwargs):
236236
parameters=[{"robot_ip": robot_ip}],
237237
)
238238

239+
robot_state_helper_node = Node(
240+
package="ur_robot_driver",
241+
executable="robot_state_helper",
242+
name="robot_state_helper",
243+
output="screen",
244+
)
245+
246+
239247
tool_communication_node = Node(
240248
package="ur_robot_driver",
241249
condition=IfCondition(use_tool_communication),
@@ -354,6 +362,7 @@ def controller_spawner(name, active=True):
354362
control_node,
355363
ur_control_node,
356364
dashboard_client_node,
365+
robot_state_helper_node,
357366
tool_communication_node,
358367
controller_stopper_node,
359368
urscript_interface,

0 commit comments

Comments
 (0)