Skip to content

Commit 21dd965

Browse files
authored
Merge pull request #1 from ipa320/md_update
update from mdtool stack to CANdle SDK stack
2 parents a803422 + 85fa920 commit 21dd965

4 files changed

Lines changed: 61 additions & 53 deletions

File tree

ipa_ros2_control/include/ipa_ros2_control/curt_mini_hardware_interface.hpp

Lines changed: 16 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -35,14 +35,13 @@
3535
#include "rclcpp_lifecycle/node_interfaces/lifecycle_node_interface.hpp"
3636
#include "rclcpp_lifecycle/state.hpp"
3737

38-
#include "candle_ros2/msg/impedance_command.hpp"
39-
#include "candle_ros2/msg/motion_command.hpp"
40-
#include "candle_ros2/msg/position_pid_command.hpp"
41-
#include "candle_ros2/msg/velocity_pid_command.hpp"
42-
#include "candle_ros2/srv/add_md80s.hpp"
43-
#include "candle_ros2/srv/generic_md80_msg.hpp"
44-
#include "candle_ros2/srv/set_limits_md80.hpp"
45-
#include "candle_ros2/srv/set_mode_md80s.hpp"
38+
#include "candle_ros2/msg/motion_cmd.hpp"
39+
#include "candle_ros2/msg/position_pid_cmd.hpp"
40+
#include "candle_ros2/msg/velocity_pid_cmd.hpp"
41+
#include "candle_ros2/srv/add_devices.hpp"
42+
#include "candle_ros2/srv/generic.hpp"
43+
#include "candle_ros2/srv/set_limits.hpp"
44+
#include "candle_ros2/srv/set_mode.hpp"
4645

4746
namespace ipa_ros2_control
4847
{
@@ -103,13 +102,13 @@ class CurtMiniHardwareInterface : public hardware_interface::SystemInterface
103102
typename candle_srv_type::Request::SharedPtr request = std::make_shared<typename candle_srv_type::Request>())
104103
{
105104
RCLCPP_INFO_STREAM(nh_->get_logger(), "Calling " << client->get_service_name());
106-
request->drive_ids = { 102, 100, 103, 101 }; // { br , fr, bl , fl}
105+
request->device_ids = { 102, 100, 103, 101 }; // { br , fr, bl , fl}
107106
auto result = client->async_send_request(request);
108107
if (rclcpp::spin_until_future_complete(nh_, result, std::chrono::seconds{5}) == rclcpp::FutureReturnCode::SUCCESS)
109108
{
110109
RCLCPP_INFO_STREAM(nh_->get_logger(), "Calling ");
111110
auto res = *result.get();
112-
if (!std::all_of(res.drives_success.begin(), res.drives_success.end(),
111+
if (!std::all_of(res.success.begin(), res.success.end(),
113112
[](bool b) { return b; }))
114113
{
115114
RCLCPP_ERROR_STREAM(nh_->get_logger(),
@@ -130,15 +129,15 @@ class CurtMiniHardwareInterface : public hardware_interface::SystemInterface
130129
std::vector<double> hw_states_position_, hw_states_velocity_;
131130
sensor_msgs::msg::JointState motor_joint_state_;
132131
// ROS services
133-
rclcpp::Client<candle_ros2::srv::AddMd80s>::SharedPtr add_controller_service_client_;
134-
rclcpp::Client<candle_ros2::srv::SetModeMd80s>::SharedPtr set_mode_service_client_;
135-
rclcpp::Client<candle_ros2::srv::GenericMd80Msg>::SharedPtr set_zero_service_client_;
136-
rclcpp::Client<candle_ros2::srv::GenericMd80Msg>::SharedPtr enable_motors_service_client_;
137-
rclcpp::Client<candle_ros2::srv::GenericMd80Msg>::SharedPtr disable_motors_service_client_;
132+
rclcpp::Client<candle_ros2::srv::AddDevices>::SharedPtr add_controller_service_client_;
133+
rclcpp::Client<candle_ros2::srv::SetMode>::SharedPtr set_mode_service_client_;
134+
rclcpp::Client<candle_ros2::srv::Generic>::SharedPtr set_zero_service_client_;
135+
rclcpp::Client<candle_ros2::srv::Generic>::SharedPtr enable_motors_service_client_;
136+
rclcpp::Client<candle_ros2::srv::Generic>::SharedPtr disable_motors_service_client_;
138137

139138
// ROS publishers
140-
rclcpp::Publisher<candle_ros2::msg::MotionCommand>::SharedPtr command_pub_;
141-
rclcpp::Publisher<candle_ros2::msg::VelocityPidCommand>::SharedPtr config_pub_;
139+
rclcpp::Publisher<candle_ros2::msg::MotionCmd>::SharedPtr command_pub_;
140+
rclcpp::Publisher<candle_ros2::msg::VelocityPidCmd>::SharedPtr config_pub_;
142141

143142
// ROS subscribers
144143
rclcpp::Subscription<sensor_msgs::msg::JointState>::SharedPtr joint_state_sub_;
Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
repositories:
22
candle_ros2:
33
type: git
4-
url: https://github.com/ipa323/candle_ros2.git
5-
version: main
4+
url: https://github.com/mabrobotics/candle_ros2.git
5+
version: v2.1.2

ipa_ros2_control/launch/ros2_control.launch.py

Lines changed: 20 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -4,9 +4,12 @@
44
from ament_index_python.packages import get_package_share_directory
55
from launch import LaunchDescription
66
from launch.actions import DeclareLaunchArgument
7-
from launch.substitutions import LaunchConfiguration, Command
7+
from launch.substitutions import LaunchConfiguration, Command, PathJoinSubstitution
88
from launch_ros.actions import Node
9-
from launch.actions import OpaqueFunction
9+
from launch_ros.substitutions import FindPackageShare
10+
from launch.actions import OpaqueFunction, IncludeLaunchDescription
11+
from launch.launch_description_sources import AnyLaunchDescriptionSource
12+
1013

1114

1215
def launch_ros2_control(context, *args, **kwargs):
@@ -29,15 +32,22 @@ def launch_ros2_control(context, *args, **kwargs):
2932
},
3033
)
3134

32-
md80_manager_node = Node(
33-
package="candle_ros2",
34-
executable="candle_ros2_node",
35-
output={
36-
"stdout": "screen",
37-
"stderr": "screen",
38-
},
39-
arguments=["USB", "1M"],
35+
md80_manager_node = IncludeLaunchDescription(
36+
AnyLaunchDescriptionSource(
37+
PathJoinSubstitution(
38+
[
39+
FindPackageShare("candle_ros2"),
40+
"launch",
41+
"md_node_launch.py",
42+
]
43+
)
44+
),
45+
launch_arguments={
46+
"bus": "USB",
47+
"data_rate": "1M",
48+
}.items(),
4049
)
50+
4151
return [controller_manager_node, md80_manager_node]
4252

4353

ipa_ros2_control/src/curt_mini_hardware_interface.cpp

Lines changed: 23 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -69,17 +69,16 @@ CallbackReturn CurtMiniHardwareInterface::on_init(const hardware_interface::Hard
6969
// return CallbackReturn::SUCCESS;
7070
}
7171
RCLCPP_INFO(nh_->get_logger(), "Init ROS services etc");
72-
add_controller_service_client_ = nh_->create_client<candle_ros2::srv::AddMd80s>("candle_ros2_node/add_md80s");
73-
set_mode_service_client_ = nh_->create_client<candle_ros2::srv::SetModeMd80s>("candle_ros2_node/set_mode_md80s");
74-
set_zero_service_client_ = nh_->create_client<candle_ros2::srv::GenericMd80Msg>("candle_ros2_node/zero_md80s");
75-
enable_motors_service_client_ = nh_->create_client<candle_ros2::srv::GenericMd80Msg>("candle_ros2_node/enable_md80s");
76-
disable_motors_service_client_ =
77-
nh_->create_client<candle_ros2::srv::GenericMd80Msg>("candle_ros2_node/disable_md80s");
72+
add_controller_service_client_ = nh_->create_client<candle_ros2::srv::AddDevices>("/md/add_mds");
73+
set_mode_service_client_ = nh_->create_client<candle_ros2::srv::SetMode>("/md/set_mode");
74+
set_zero_service_client_ = nh_->create_client<candle_ros2::srv::Generic>("/md/zero");
75+
enable_motors_service_client_ = nh_->create_client<candle_ros2::srv::Generic>("/md/enable");
76+
disable_motors_service_client_ = nh_->create_client<candle_ros2::srv::Generic>("/md/disable");
7877

7978
joint_state_sub_ = nh_->create_subscription<sensor_msgs::msg::JointState>(
8079
"/md80/joint_states", 10, std::bind(&CurtMiniHardwareInterface::jointsCallback, this, std::placeholders::_1));
81-
command_pub_ = nh_->create_publisher<candle_ros2::msg::MotionCommand>("/md80/motion_command", 10);
82-
config_pub_ = nh_->create_publisher<candle_ros2::msg::VelocityPidCommand>("/md80/velocity_pid_command", 10);
80+
command_pub_ = nh_->create_publisher<candle_ros2::msg::MotionCmd>("/md/motion_command", 10);
81+
config_pub_ = nh_->create_publisher<candle_ros2::msg::VelocityPidCmd>("/md/velocity_pid_command", 10);
8382

8483
// Init Motor:
8584
// Add Controllers
@@ -199,8 +198,8 @@ CallbackReturn CurtMiniHardwareInterface::on_init(const hardware_interface::Hard
199198

200199
void CurtMiniHardwareInterface::publishPIDParams(const candle_ros2::msg::Pid& pid_config)
201200
{
202-
auto pid_msg = candle_ros2::msg::VelocityPidCommand();
203-
pid_msg.drive_ids = { 101, 100, 103, 102 };
201+
auto pid_msg = candle_ros2::msg::VelocityPidCmd();
202+
pid_msg.device_ids = { 101, 100, 103, 102 };
204203
pid_msg.velocity_pid = { pid_config, pid_config, pid_config, pid_config };
205204
config_pub_->publish(pid_msg);
206205
}
@@ -245,10 +244,10 @@ std::vector<hardware_interface::CommandInterface> CurtMiniHardwareInterface::exp
245244
return command_interfaces;
246245
}
247246

248-
// bool CurtMiniHardwareInterface::sendGenericRequest(rclcpp::Client<candle_ros2::srv::GenericMd80Msg>::SharedPtr&
247+
// bool CurtMiniHardwareInterface::sendGenericRequest(rclcpp::Client<candle_ros2::srv::Generic>::SharedPtr&
249248
// client)
250249
// {
251-
// auto request = std::make_shared<candle_ros2::srv::GenericMd80Msg::Request>();
250+
// auto request = std::make_shared<candle_ros2::srv::Generic::Request>();
252251
// request->drive_ids = { 102, 100, 103, 101 };
253252
// auto result = client->async_send_request(request);
254253
// if (rclcpp::spin_until_future_complete(nh_, result) == rclcpp::FutureReturnCode::SUCCESS)
@@ -289,30 +288,30 @@ CallbackReturn CurtMiniHardwareInterface::on_activate(const rclcpp_lifecycle::St
289288
}
290289
// add controllers via service
291290
RCLCPP_INFO(nh_->get_logger(), "Waited for motor controllers.");
292-
if (!sendCandleRequest<candle_ros2::srv::AddMd80s>(add_controller_service_client_))
291+
if (!sendCandleRequest<candle_ros2::srv::AddDevices>(add_controller_service_client_))
293292
{
294293
RCLCPP_ERROR(nh_->get_logger(), "Error in adding motor controllers.");
295294
return CallbackReturn::ERROR;
296295
}
297296
RCLCPP_INFO(nh_->get_logger(), "Added motor controllers.");
298297
// Set Mode via service call
299-
auto set_mode_request = std::make_shared<candle_ros2::srv::SetModeMd80s::Request>();
298+
auto set_mode_request = std::make_shared<candle_ros2::srv::SetMode::Request>();
300299
set_mode_request->mode = { "VELOCITY_PID", "VELOCITY_PID", "VELOCITY_PID", "VELOCITY_PID" };
301-
if (!sendCandleRequest<candle_ros2::srv::SetModeMd80s>(set_mode_service_client_, set_mode_request))
300+
if (!sendCandleRequest<candle_ros2::srv::SetMode>(set_mode_service_client_, set_mode_request))
302301
{
303302
return CallbackReturn::ERROR;
304303
}
305304

306305
RCLCPP_INFO(nh_->get_logger(), "Set mode of motor controllers.");
307306
// set zero position via service call
308-
if (!sendCandleRequest<candle_ros2::srv::GenericMd80Msg>(set_zero_service_client_))
307+
if (!sendCandleRequest<candle_ros2::srv::Generic>(set_zero_service_client_))
309308
{
310309
return CallbackReturn::ERROR;
311310
}
312311

313312
RCLCPP_INFO(nh_->get_logger(), "Set zero position of the motors.");
314313
// enable motors via service call
315-
if (!sendCandleRequest<candle_ros2::srv::GenericMd80Msg>(enable_motors_service_client_))
314+
if (!sendCandleRequest<candle_ros2::srv::Generic>(enable_motors_service_client_))
316315
{
317316
return CallbackReturn::ERROR;
318317
}
@@ -322,8 +321,8 @@ CallbackReturn CurtMiniHardwareInterface::on_activate(const rclcpp_lifecycle::St
322321
publishPIDParams(pid_config_);
323322

324323
// publish zero velocity once
325-
auto zero_vel = candle_ros2::msg::MotionCommand();
326-
zero_vel.drive_ids = { 101, 100, 103, 102 };
324+
auto zero_vel = candle_ros2::msg::MotionCmd();
325+
zero_vel.device_ids = { 101, 100, 103, 102 };
327326
zero_vel.target_position = { 0.0, 0.0, 0.0, 0.0 };
328327
zero_vel.target_velocity = { 0.0, 0.0, 0.0, 0.0 };
329328
zero_vel.target_torque = { 0.0, 0.0, 0.0, 0.0 };
@@ -338,15 +337,15 @@ CallbackReturn CurtMiniHardwareInterface::on_deactivate(const rclcpp_lifecycle::
338337
{
339338
// disable motors
340339
// publish zero once before
341-
auto zero_vel = candle_ros2::msg::MotionCommand();
342-
zero_vel.drive_ids = { 101, 100, 103, 102 };
340+
auto zero_vel = candle_ros2::msg::MotionCmd();
341+
zero_vel.device_ids = { 101, 100, 103, 102 };
343342
zero_vel.target_position = { 0.0, 0.0, 0.0, 0.0 };
344343
zero_vel.target_velocity = { 0.0, 0.0, 0.0, 0.0 };
345344
zero_vel.target_torque = { 0.0, 0.0, 0.0, 0.0 };
346345
command_pub_->publish(zero_vel);
347346

348347
// disable service call
349-
if (!sendCandleRequest<candle_ros2::srv::GenericMd80Msg>(disable_motors_service_client_))
348+
if (!sendCandleRequest<candle_ros2::srv::Generic>(disable_motors_service_client_))
350349
{
351350
return CallbackReturn::ERROR;
352351
}
@@ -369,8 +368,8 @@ CallbackReturn CurtMiniHardwareInterface::on_deactivate(const rclcpp_lifecycle::
369368

370369
void CurtMiniHardwareInterface::writeCommandsToHardware()
371370
{
372-
auto command_vel = candle_ros2::msg::MotionCommand();
373-
command_vel.drive_ids = { 101, 100, 103, 102 };
371+
auto command_vel = candle_ros2::msg::MotionCmd();
372+
command_vel.device_ids = { 101, 100, 103, 102 };
374373
command_vel.target_position = { 0.0, 0.0, 0.0, 0.0 };
375374

376375
command_vel.target_torque = { 0.0, 0.0, 0.0, 0.0 };

0 commit comments

Comments
 (0)