Skip to content

Commit f19c308

Browse files
AndyZelivanov93
andauthored
Update the dashboard client for ROS2 (#5)
* Implement dashboard_client_node * Implement createDashboardTriggerSrv() * Implement the Trigger-type services * Clang format * Add unlock protective service. Add query service for program running. * Add get_loaded_program service. * Add program and installation loading services. * Finish all querying and commanding services. * Uncomment dashboard node. * Remove blank line in service cb. Remove spare service declaration. Co-authored-by: TODO <@picknik.ai> Co-authored-by: Lovro <[email protected]>
1 parent 79cd4f2 commit f19c308

File tree

6 files changed

+418
-8
lines changed

6 files changed

+418
-8
lines changed

ur_robot_driver/CMakeLists.txt

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ find_package(ament_cmake REQUIRED)
1515
find_package(hardware_interface REQUIRED)
1616
find_package(pluginlib REQUIRED)
1717
find_package(rclcpp REQUIRED)
18+
find_package(std_srvs REQUIRED)
1819
find_package(ur_client_library REQUIRED)
1920
find_package(ur_dashboard_msgs REQUIRED)
2021

@@ -26,6 +27,7 @@ set(THIS_PACKAGE_INCLUDE_DEPENDS
2627
hardware_interface
2728
pluginlib
2829
rclcpp
30+
std_srvs
2931
ur_client_library
3032
ur_dashboard_msgs
3133
)
@@ -59,12 +61,12 @@ pluginlib_export_plugin_description_file(hardware_interface hardware_interface_p
5961
# target_link_libraries(ur_robot_driver_node ${catkin_LIBRARIES} ur_client_library::urcl)
6062
# ament_target_dependencies(ur_robot_driver_node ${${PROJECT_NAME}_EXPORTED_TARGETS} ${THIS_PACKAGE_INCLUDE_DEPENDS})
6163

62-
# add_executable(dashboard_client
63-
# src/dashboard_client_ros.cpp
64-
# src/dashboard_client_node.cpp
65-
# )
66-
# target_link_libraries(dashboard_client ${catkin_LIBRARIES} ur_client_library::urcl)
67-
# ament_target_dependencies(dashboard_client ${${PROJECT_NAME}_EXPORTED_TARGETS} ${THIS_PACKAGE_INCLUDE_DEPENDS})
64+
add_executable(dashboard_client
65+
src/dashboard_client_ros.cpp
66+
src/dashboard_client_node.cpp
67+
)
68+
target_link_libraries(dashboard_client ${catkin_LIBRARIES} ur_client_library::urcl)
69+
ament_target_dependencies(dashboard_client ${${PROJECT_NAME}_EXPORTED_TARGETS} ${THIS_PACKAGE_INCLUDE_DEPENDS})
6870

6971
# add_executable(robot_state_helper
7072
# src/robot_state_helper.cpp

ur_robot_driver/include/ur_robot_driver/dashboard_client_ros.h

Lines changed: 78 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,10 +27,15 @@
2727

2828
#pragma once
2929

30+
// System
3031
#include <regex>
3132

32-
#include <ur_client_library/ur/dashboard_client.h>
33+
// ROS
34+
#include <rclcpp/rclcpp.hpp>
35+
#include <std_srvs/srv/trigger.hpp>
3336

37+
// UR client library
38+
#include <ur_client_library/ur/dashboard_client.h>
3439
#include <ur_dashboard_msgs/msg/program_state.hpp>
3540
#include <ur_dashboard_msgs/srv/add_to_log.hpp>
3641
#include <ur_dashboard_msgs/srv/get_loaded_program.hpp>
@@ -51,5 +56,77 @@ namespace ur_robot_driver
5156
*/
5257
class DashboardClientROS
5358
{
59+
public:
60+
/*!
61+
* \brief Constructor that shall be used by default
62+
*
63+
* \param nh Node handle pointing to the name space the dashboard-related functionalities are to
64+
* be found
65+
* \param robot_ip IP address of the robot
66+
*/
67+
DashboardClientROS(const rclcpp::Node::SharedPtr& node, const std::string& robot_ip);
68+
DashboardClientROS() = delete;
69+
virtual ~DashboardClientROS() = default;
70+
71+
private:
72+
inline rclcpp::Service<std_srvs::srv::Trigger>::SharedPtr createDashboardTriggerSrv(const std::string& topic,
73+
const std::string& command,
74+
const std::string& expected)
75+
{
76+
rclcpp::Service<std_srvs::srv::Trigger>::SharedPtr service = node_->create_service<std_srvs::srv::Trigger>(
77+
"topic", [&, command, expected](const std::shared_ptr<std_srvs::srv::Trigger::Request> req,
78+
const std::shared_ptr<std_srvs::srv::Trigger::Response> resp) {
79+
resp->message = this->client_.sendAndReceive(command);
80+
resp->success = std::regex_match(resp->message, std::regex(expected));
81+
});
82+
83+
return service;
84+
}
85+
86+
bool handleRunningQuery(ur_dashboard_msgs::srv::IsProgramRunning::Request::SharedPtr req,
87+
ur_dashboard_msgs::srv::IsProgramRunning::Response::SharedPtr resp);
88+
89+
bool handleSavedQuery(ur_dashboard_msgs::srv::IsProgramSaved::Request::SharedPtr req,
90+
ur_dashboard_msgs::srv::IsProgramSaved::Response::SharedPtr resp);
91+
92+
bool handleSafetyModeQuery(ur_dashboard_msgs::srv::GetSafetyMode::Request::SharedPtr req,
93+
ur_dashboard_msgs::srv::GetSafetyMode::Response::SharedPtr resp);
94+
95+
bool handleRobotModeQuery(ur_dashboard_msgs::srv::GetRobotMode::Request::SharedPtr req,
96+
ur_dashboard_msgs::srv::GetRobotMode::Response::SharedPtr resp);
97+
98+
bool connect();
99+
100+
std::shared_ptr<rclcpp::Node> node_;
101+
urcl::DashboardClient client_;
102+
103+
// Commanding services
104+
rclcpp::Service<std_srvs::srv::Trigger>::SharedPtr brake_release_service_;
105+
rclcpp::Service<std_srvs::srv::Trigger>::SharedPtr clear_operational_mode_service_;
106+
rclcpp::Service<std_srvs::srv::Trigger>::SharedPtr close_popup_service_;
107+
rclcpp::Service<std_srvs::srv::Trigger>::SharedPtr close_safety_popup_service_;
108+
rclcpp::Service<std_srvs::srv::Trigger>::SharedPtr pause_service_;
109+
rclcpp::Service<std_srvs::srv::Trigger>::SharedPtr play_service_;
110+
rclcpp::Service<std_srvs::srv::Trigger>::SharedPtr power_off_service_;
111+
rclcpp::Service<std_srvs::srv::Trigger>::SharedPtr power_on_service_;
112+
rclcpp::Service<std_srvs::srv::Trigger>::SharedPtr restart_safety_service_;
113+
rclcpp::Service<std_srvs::srv::Trigger>::SharedPtr shutdown_service_;
114+
rclcpp::Service<std_srvs::srv::Trigger>::SharedPtr stop_service_;
115+
rclcpp::Service<std_srvs::srv::Trigger>::SharedPtr unlock_protective_stop_service_;
116+
rclcpp::Service<ur_dashboard_msgs::srv::Load>::SharedPtr load_installation_service_;
117+
rclcpp::Service<ur_dashboard_msgs::srv::Load>::SharedPtr load_program_service_;
118+
rclcpp::Service<std_srvs::srv::Trigger>::SharedPtr quit_service_;
119+
rclcpp::Service<ur_dashboard_msgs::srv::AddToLog>::SharedPtr add_to_log_service_;
120+
rclcpp::Service<std_srvs::srv::Trigger>::SharedPtr reconnect_service_;
121+
rclcpp::Service<ur_dashboard_msgs::srv::RawRequest>::SharedPtr raw_request_service_;
122+
123+
// Query services
124+
rclcpp::Service<ur_dashboard_msgs::srv::IsProgramRunning>::SharedPtr running_service_;
125+
rclcpp::Service<ur_dashboard_msgs::srv::GetLoadedProgram>::SharedPtr get_loaded_program_service_;
126+
rclcpp::Service<ur_dashboard_msgs::srv::IsProgramSaved>::SharedPtr is_program_saved_service_;
127+
rclcpp::Service<ur_dashboard_msgs::srv::Popup>::SharedPtr popup_service_;
128+
rclcpp::Service<ur_dashboard_msgs::srv::GetProgramState>::SharedPtr program_state_service_;
129+
rclcpp::Service<ur_dashboard_msgs::srv::GetSafetyMode>::SharedPtr safety_mode_service_;
130+
rclcpp::Service<ur_dashboard_msgs::srv::GetRobotMode>::SharedPtr robot_mode_service_;
54131
};
55132
} // namespace ur_robot_driver

ur_robot_driver/include/ur_robot_driver/hardware_interface.h

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -77,5 +77,4 @@ class URHardwareInterface : public hardware_interface::components::SystemInterfa
7777
status status_;
7878
std::vector<double> joint_angle_commands_, current_joint_angles_;
7979
};
80-
8180
} // namespace ur_robot_driver

ur_robot_driver/package.xml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,8 @@
2424
<buildtool_depend>pluginlib</buildtool_depend>
2525
<buildtool_depend>rclcpp</buildtool_depend>
2626

27+
<depend>rclcpp</depend>
28+
<depend>std_srvs</depend>
2729
<depend>ur_client_library</depend>
2830
<depend>ur_dashboard_msgs</depend>
2931

ur_robot_driver/src/dashboard_client_node.cpp

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,9 +25,20 @@
2525
*/
2626
//----------------------------------------------------------------------
2727

28+
#include <rclcpp/rclcpp.hpp>
2829
#include <ur_robot_driver/dashboard_client_ros.h>
2930

3031
int main(int argc, char** argv)
3132
{
33+
rclcpp::init(argc, argv);
34+
rclcpp::Node::SharedPtr node = rclcpp::Node::make_shared("ur_dashboard_client");
35+
36+
// The IP address under which the robot is reachable.
37+
const std::string robot_ip = node->declare_parameter<std::string>("robot_ip", "192.168.56.101");
38+
39+
ur_robot_driver::DashboardClientROS client(node, robot_ip);
40+
41+
rclcpp::spin(node);
42+
3243
return 0;
3344
}

0 commit comments

Comments
 (0)