Skip to content

Commit 5893946

Browse files
committed
Add test node.
1 parent 3a75a86 commit 5893946

File tree

3 files changed

+103
-0
lines changed

3 files changed

+103
-0
lines changed

ur_ros2_control_demos/CMakeLists.txt

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,21 @@ cmake_minimum_required(VERSION 3.5)
22
project(ur_ros2_control_demos)
33

44
find_package(ament_cmake REQUIRED)
5+
find_package(rclcpp REQUIRED)
6+
#find_package(std_srvs REQUIRED)
7+
find_package(sensor_msgs REQUIRED)
8+
9+
add_executable(test_driver
10+
src/test_driver.cpp
11+
)
12+
ament_target_dependencies(test_driver rclcpp std_msgs sensor_msgs)
513

614
install(DIRECTORY config launch urdf DESTINATION share/${PROJECT_NAME})
715

16+
install(TARGETS
17+
test_driver
18+
DESTINATION lib/${PROJECT_NAME})
19+
820
ament_export_dependencies(${THIS_PACKAGE_INCLUDE_DEPENDS})
921

1022
ament_package()

ur_ros2_control_demos/package.xml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,8 @@
1515

1616
<exec_depend>xacro</exec_depend>
1717

18+
<depend>rclcpp</depend>
19+
1820
<export>
1921
<build_type>ament_cmake</build_type>
2022
</export>
Lines changed: 89 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,89 @@
1+
#include <chrono>
2+
#include <functional>
3+
#include <memory>
4+
#include <string>
5+
6+
#include "rclcpp/rclcpp.hpp"
7+
#include "std_msgs/msg/string.hpp"
8+
#include "std_msgs/msg/float64_multi_array.hpp"
9+
#include <sensor_msgs/msg/joint_state.hpp>
10+
#include <std_msgs/msg/multi_array_dimension.hpp>
11+
12+
using namespace std::chrono_literals;
13+
14+
#define INCREMENT 0.1 // rads
15+
16+
std::vector<std::string> name_order = { "shoulder_pan_joint", "shoulder_lift_joint", "elbow_joint",
17+
"wrist_1_joint", "wrist_2_joint", "wrist_3_joint" };
18+
19+
class MinimalDriverTest : public rclcpp::Node
20+
{
21+
public:
22+
MinimalDriverTest() : Node("test_driver"), js_received_(false)
23+
{
24+
publisher_ =
25+
this->create_publisher<std_msgs::msg::Float64MultiArray>("forward_command_controller_position/commands", 10);
26+
timer_ = this->create_wall_timer(1500ms, std::bind(&MinimalDriverTest::timer_callback, this));
27+
28+
subscription_ = this->create_subscription<sensor_msgs::msg::JointState>(
29+
"joint_states", 10, std::bind(&MinimalDriverTest::topic_callback, this, std::placeholders::_1));
30+
}
31+
32+
private:
33+
void timer_callback()
34+
{
35+
if (!js_received_)
36+
{
37+
RCLCPP_ERROR_STREAM(this->get_logger(), "Joint states not received");
38+
return;
39+
}
40+
41+
if (msg_internal_.position.size() != 6)
42+
{
43+
RCLCPP_ERROR_STREAM(this->get_logger(), "Joint states and command size mismatch");
44+
return;
45+
}
46+
47+
auto message = std_msgs::msg::Float64MultiArray();
48+
message.data.resize(6);
49+
// set up dimensions
50+
message.layout.dim.push_back(std_msgs::msg::MultiArrayDimension());
51+
message.layout.dim[0].size = 6;
52+
message.layout.dim[0].stride = 1;
53+
message.layout.dim[0].label = "cmd";
54+
55+
for (size_t i = 0; i < name_order.size(); ++i)
56+
{
57+
for (size_t j = 0; j < msg_internal_.name.size(); ++j)
58+
{
59+
if (msg_internal_.name[j] == name_order[i])
60+
message.data[i] = msg_internal_.position[j] + INCREMENT;
61+
}
62+
}
63+
64+
publisher_->publish(message);
65+
}
66+
67+
void topic_callback(const sensor_msgs::msg::JointState::SharedPtr msg)
68+
{
69+
if (js_received_)
70+
return;
71+
72+
js_received_ = true;
73+
msg_internal_ = *msg;
74+
}
75+
76+
rclcpp::Subscription<sensor_msgs::msg::JointState>::SharedPtr subscription_;
77+
rclcpp::TimerBase::SharedPtr timer_;
78+
rclcpp::Publisher<std_msgs::msg::Float64MultiArray>::SharedPtr publisher_;
79+
bool js_received_;
80+
sensor_msgs::msg::JointState msg_internal_;
81+
};
82+
83+
int main(int argc, char* argv[])
84+
{
85+
rclcpp::init(argc, argv);
86+
rclcpp::spin(std::make_shared<MinimalDriverTest>());
87+
rclcpp::shutdown();
88+
return 0;
89+
}

0 commit comments

Comments
 (0)