Skip to content

Commit

Permalink
feat!(controllers): remove robot description parameter
Browse files Browse the repository at this point in the history
  • Loading branch information
domire8 committed Jan 6, 2025
1 parent 8eb2470 commit 289f83f
Show file tree
Hide file tree
Showing 4 changed files with 19 additions and 35 deletions.
4 changes: 1 addition & 3 deletions source/modulo_controllers/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,6 @@ parameters, predicates, and services.
It supports the following parameters:

- `hardware_name` [string]: the name of the hardware interface
- `robot_description` [string]: the string formatted content of the controller's URDF description
- `joints` [string_array]: a vector of joint names that the controller will claim
- `activation_timeout` [double]: the seconds to wait for valid data on state interfaces before activating
- `input_validity_period` [double]: the maximum age of an input state before discarding it as expired
Expand Down Expand Up @@ -43,8 +42,7 @@ joint command or access the joint state using the `set_joint_command()` and `get

### Robot model and URDF

If a controller needs a robot model, a `robot_model::Model` will be configured from URDF information. To support this,
the `robot_description` must be specified.
If a controller needs a robot model, a `robot_model::Model` will be configured from URDF information.

The robot model is used to calculate the CartesianState of a task frame from the JointState using forward kinematics,
which is available to derived classes using the `get_cartesian_state()` method.
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -26,15 +26,6 @@
"optional": true,
"internal": true
},
{
"display_name": "Robot description",
"description": "The string formatted content of the controller's URDF description",
"parameter_name": "robot_description",
"parameter_type": "string",
"default_value": null,
"optional": true,
"internal": true
},
{
"display_name": "Activation timeout",
"description": "The seconds to wait for valid data on the state interfaces before activating (in seconds)",
Expand Down
3 changes: 0 additions & 3 deletions source/modulo_controllers/src/ControllerInterface.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -18,9 +18,6 @@ rclcpp_lifecycle::node_interfaces::LifecycleNodeInterface::CallbackReturn Contro

try {
add_parameter(std::make_shared<Parameter<std::string>>("hardware_name"), "The name of the hardware interface");
add_parameter(
std::make_shared<Parameter<std::string>>("robot_description"),
"The string formatted content of the controller's URDF description");
add_parameter(
std::make_shared<Parameter<std::vector<std::string>>>("joints"),
"A vector of joint names that the controller will claim");
Expand Down
38 changes: 18 additions & 20 deletions source/modulo_controllers/src/RobotControllerInterface.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -57,27 +57,25 @@ rclcpp_lifecycle::node_interfaces::LifecycleNodeInterface::CallbackReturn RobotC
}

rclcpp_lifecycle::node_interfaces::LifecycleNodeInterface::CallbackReturn RobotControllerInterface::on_configure() {
if (*get_parameter("robot_description")) {
std::stringstream timestamp;
timestamp << std::time(nullptr);
auto urdf_path = "/tmp/" + hardware_name_ + "_" + timestamp.str();
try {
robot_model::Model::create_urdf_from_string(get_parameter_value<std::string>("robot_description"), urdf_path);
if (load_geometries_) {
robot_ = std::make_shared<robot_model::Model>(hardware_name_, urdf_path, [](const std::string& package_name) {
return ament_index_cpp::get_package_share_directory(package_name) + "/";
});
RCLCPP_DEBUG(get_node()->get_logger(), "Generated robot model with collision features");
} else {
robot_ = std::make_shared<robot_model::Model>(hardware_name_, urdf_path);
RCLCPP_DEBUG(get_node()->get_logger(), "Generated robot model");
}
} catch (const std::exception& ex) {
RCLCPP_WARN(
get_node()->get_logger(),
"Could not generate robot model with temporary urdf from string content at path %s: %s", urdf_path.c_str(),
ex.what());
std::stringstream timestamp;
timestamp << std::time(nullptr);
auto urdf_path = "/tmp/" + hardware_name_ + "_" + timestamp.str();
try {
robot_model::Model::create_urdf_from_string(get_robot_description(), urdf_path);
if (load_geometries_) {
robot_ = std::make_shared<robot_model::Model>(hardware_name_, urdf_path, [](const std::string& package_name) {
return ament_index_cpp::get_package_share_directory(package_name) + "/";
});
RCLCPP_DEBUG(get_node()->get_logger(), "Generated robot model with collision features");
} else {
robot_ = std::make_shared<robot_model::Model>(hardware_name_, urdf_path);
RCLCPP_DEBUG(get_node()->get_logger(), "Generated robot model");
}
} catch (const std::exception& ex) {
RCLCPP_WARN(
get_node()->get_logger(),
"Could not generate robot model with temporary urdf from string content at path %s: %s", urdf_path.c_str(),
ex.what());
}
if (robot_model_required_ && robot_ == nullptr) {
RCLCPP_ERROR(get_node()->get_logger(), "Robot model is not available even though it's required by the controller.");
Expand Down

0 comments on commit 289f83f

Please sign in to comment.