51 std::filesystem::path ros_controllers_yaml_path = package_path / MOVEIT_CONTROLLERS_YAML;
52 std::ifstream input_stream(ros_controllers_yaml_path);
53 if (!input_stream.good())
55 RCLCPP_WARN_STREAM(*
logger_,
"Does not exist " << ros_controllers_yaml_path);
64 YAML::Node doc = YAML::Load(input_stream);
65 YAML::Node controllers = doc[
"moveit_simple_controller_manager"];
67 std::vector<std::string> controller_names;
71 for (
const std::string& controller_name : controller_names)
73 const YAML::Node& cnode = controllers[controller_name];
74 if (!cnode.IsDefined())
76 RCLCPP_WARN_STREAM(*
logger_,
"Configuration for controller " << controller_name <<
" does not exist! Ignoring.");
86 YAML::Node trajectory_execution = doc[
"trajectory_execution"];
87 if (trajectory_execution.IsDefined() && trajectory_execution.IsMap())
89 for (
const auto& kv : trajectory_execution)
95 catch (YAML::ParserException& e)
97 RCLCPP_ERROR_STREAM(*
logger_, e.what());
110 if (control_setting.
type_.empty())
112 RCLCPP_ERROR_STREAM(*
logger_,
"Couldn't parse type for controller " <<
name <<
" in moveit_controllers.yaml");
116 for (
const std::string parameter : {
"action_ns",
"default" })
118 if (controller_node[parameter].IsDefined())
120 control_setting.
parameters_[parameter] = controller_node[parameter].as<std::string>();
124 const YAML::Node& joints_node = controller_node[
"joints"];
126 if (joints_node.IsSequence())
128 control_setting.
joints_ = joints_node.as<std::vector<std::string>>();
130 else if (joints_node.IsDefined())
132 control_setting.
joints_.push_back(joints_node.as<std::string>());
134 if (control_setting.
joints_.empty())
136 RCLCPP_ERROR_STREAM(*
logger_,
"Couldn't parse joints for controller " <<
name <<
" in moveit_controllers.yaml");
149 emitter << YAML::Comment(
"MoveIt uses this configuration for controller management");
150 emitter << YAML::Newline;
151 emitter << YAML::BeginMap;
155 emitter << YAML::Key <<
"trajectory_execution" << YAML::Value;
156 emitter << YAML::BeginMap;
159 emitter << YAML::Key << kv.first << YAML::Value << kv.second;
161 emitter << YAML::EndMap;
164 emitter << YAML::Key <<
"moveit_controller_manager" << YAML::Value
165 <<
"moveit_simple_controller_manager/MoveItSimpleControllerManager";
166 emitter << YAML::Newline;
167 emitter << YAML::Newline;
169 emitter << YAML::Key <<
"moveit_simple_controller_manager" << YAML::Value;
170 emitter << YAML::BeginMap;
172 emitter << YAML::Key <<
"controller_names";
173 emitter << YAML::Value;
174 emitter << YAML::BeginSeq;
179 emitter << YAML::EndSeq;
180 emitter << YAML::Newline;
181 emitter << YAML::Newline;
185 emitter << YAML::Key << controller.name_;
186 emitter << YAML::Value;
187 emitter << YAML::BeginMap;
189 emitter << YAML::Key <<
"type" << YAML::Value << controller.type_;
190 if (controller.type_ ==
"FollowJointTrajectory")
192 emitter << YAML::Key <<
"action_ns" << YAML::Value <<
"follow_joint_trajectory";
193 emitter << YAML::Key <<
"default" << YAML::Value <<
"true";
197 emitter << YAML::Key <<
"joints";
198 emitter << YAML::Value;
199 emitter << YAML::BeginSeq;
202 for (
const std::string& joint : controller.joints_)
206 emitter << YAML::EndSeq;
208 for (
const auto& pair : controller.parameters_)
210 emitter << YAML::Key << pair.first;
211 emitter << YAML::Value << pair.second;
214 emitter << YAML::EndMap;
217 emitter << YAML::EndMap;
219 emitter << YAML::EndMap;
227 #include <pluginlib/class_list_macros.hpp>
PLUGINLIB_EXPORT_CLASS(cached_ik_kinematics_plugin::CachedIKKinematicsPlugin< kdl_kinematics_plugin::KDLKinematicsPlugin >, kinematics::KinematicsBase)
where all the data for each part of the configuration is stored.
std::shared_ptr< rclcpp::Logger > logger_
std::vector< ControllerInfo > controllers_
Controllers config data.
MoveItControllersConfig & parent_
bool writeYaml(YAML::Emitter &emitter) override
bool parseController(const std::string &name, const YAML::Node &controller)
std::map< std::string, YAML::Node > trajectory_parameters_
void loadPrevious(const std::filesystem::path &package_path, const YAML::Node &node) override
Loads the configuration from an existing MoveIt configuration.
bool getYamlProperty(const YAML::Node &node, const std::string &key, T &storage, const T &default_value=T())
std::vector< std::string > joints_
std::map< std::string, std::string > parameters_