diff --git a/CHANGELOG.md b/CHANGELOG.md index 313a012b..9ff6e81d 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,7 @@ Release Versions: +- [5.1.0](#510) - [5.0.2](#502) - [5.0.1](#501) - [5.0.0](#500) @@ -18,6 +19,10 @@ Release Versions: - [2.1.1](#211) - [2.1.0](#210) +## Upcoming changes + +feat(controllers)!: remove robot description parameter (#186) + ## 5.1.0 ### December 16th, 2024 diff --git a/aica-package.toml b/aica-package.toml index e350c740..b18d1dcc 100644 --- a/aica-package.toml +++ b/aica-package.toml @@ -1,4 +1,4 @@ -#syntax=ghcr.io/aica-technology/package-builder:v1.3.0 +#syntax=ghcr.io/aica-technology/package-builder:v1.3.2 [metadata] version = "5.1.0" @@ -9,7 +9,7 @@ name = "modulo" [build] type = "ros" -image = "v2.0.0-jazzy" +image = "v2.1.0-rc1-jazzy" [build.dependencies] "@aica/foss/control-libraries" = "v9.0.0" diff --git a/source/modulo_controllers/README.md b/source/modulo_controllers/README.md index c1a863b2..b19925ed 100644 --- a/source/modulo_controllers/README.md +++ b/source/modulo_controllers/README.md @@ -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 @@ -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. diff --git a/source/modulo_controllers/controller_descriptions/modulo_controllers_controller_interface.json b/source/modulo_controllers/controller_descriptions/modulo_controllers_controller_interface.json index 8a58baa9..4882bd96 100644 --- a/source/modulo_controllers/controller_descriptions/modulo_controllers_controller_interface.json +++ b/source/modulo_controllers/controller_descriptions/modulo_controllers_controller_interface.json @@ -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)", diff --git a/source/modulo_controllers/src/ControllerInterface.cpp b/source/modulo_controllers/src/ControllerInterface.cpp index 41ea23c9..7d6c9dec 100644 --- a/source/modulo_controllers/src/ControllerInterface.cpp +++ b/source/modulo_controllers/src/ControllerInterface.cpp @@ -18,9 +18,6 @@ rclcpp_lifecycle::node_interfaces::LifecycleNodeInterface::CallbackReturn Contro try { add_parameter(std::make_shared>("hardware_name"), "The name of the hardware interface"); - add_parameter( - std::make_shared>("robot_description"), - "The string formatted content of the controller's URDF description"); add_parameter( std::make_shared>>("joints"), "A vector of joint names that the controller will claim"); diff --git a/source/modulo_controllers/src/RobotControllerInterface.cpp b/source/modulo_controllers/src/RobotControllerInterface.cpp index e3b23dcd..225aa403 100644 --- a/source/modulo_controllers/src/RobotControllerInterface.cpp +++ b/source/modulo_controllers/src/RobotControllerInterface.cpp @@ -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("robot_description"), urdf_path); - if (load_geometries_) { - robot_ = std::make_shared(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(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(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(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.");