50  QVBoxLayout* layout = 
new QVBoxLayout();
 
   52  layout->setAlignment(Qt::AlignTop);
 
   55  auto header = 
new HeaderWidget(
"ros2_control URDF Modifications",
 
   56                                 "This step can add the tags to the URDF required for interfacing with ros2_control. " 
   57                                 "See https://control.ros.org/ for more info.",
 
   59  layout->addWidget(header);
 
   60  content_widget_ = 
new QWidget(
this);
 
   61  layout->addWidget(content_widget_);
 
 
   66QWidget* UrdfModificationsWidget::makeInterfacesBox(
const std::string& interface_type,
 
   67                                                    const std::vector<std::string>& available_interfaces,
 
   68                                                    const std::vector<std::string>& selected_interfaces,
 
   71  QGroupBox* box = 
new QGroupBox((interface_type + 
" Interfaces").c_str(), parent);
 
   72  QVBoxLayout* box_layout = 
new QVBoxLayout(parent);
 
   73  for (
const std::string& interface_name : available_interfaces)
 
   75    QCheckBox* check = 
new QCheckBox(interface_name.c_str(), parent);
 
   76    box_layout->addWidget(check);
 
   78    std::string key = interface_type[0] + interface_name;
 
   79    check_boxes_[key] = check;
 
   81  for (
const std::string& interface_name : selected_interfaces)
 
   83    std::string key = interface_type[0] + interface_name;
 
   84    check_boxes_[key]->setChecked(
true);
 
   86  box->setLayout(box_layout);
 
   93  qDeleteAll(content_widget_->children());
 
   96  QVBoxLayout* layout = 
new QVBoxLayout();
 
   99    layout->addWidget(
new QLabel(
"All of the joints used by this MoveIt config have already been configured using\n" 
  100                                 "ros2_control, so there is no need to modify the URDF with ros2_control tags."));
 
  101    content_widget_->setLayout(layout);
 
  105  QWidget* interface_widget = 
new QWidget(
this);
 
  106  QHBoxLayout* interface_layout = 
new QHBoxLayout();
 
  111  interface_layout->addWidget(makeInterfacesBox(
"Command", available_interfaces.command_interfaces,
 
  112                                                selected_interfaces.command_interfaces, interface_widget));
 
  113  interface_layout->addWidget(makeInterfacesBox(
"State", available_interfaces.state_interfaces,
 
  114                                                selected_interfaces.state_interfaces, interface_widget));
 
  116  interface_widget->setLayout(interface_layout);
 
  117  layout->addWidget(interface_widget);
 
  119  btn_add_interfaces_ = 
new QPushButton(
"Add interfaces");
 
  120  connect(btn_add_interfaces_, SIGNAL(clicked()), 
this, SLOT(addInterfaces()));
 
  121  layout->addWidget(btn_add_interfaces_);
 
  123  generated_text_widget_ = 
new QTextEdit();
 
  124  generated_text_widget_->setReadOnly(
true);
 
  125  generated_text_widget_->setText(setup_step_.
getJointsXML().c_str());
 
  126  layout->addWidget(generated_text_widget_);
 
  127  content_widget_->setLayout(layout);
 
 
  130std::vector<std::string> UrdfModificationsWidget::getInterfaces(
const char first_letter,
 
  131                                                                const std::vector<std::string>& available_interfaces)
 
  133  std::vector<std::string> interface_names;
 
  134  for (
const std::string& interface_name : available_interfaces)
 
  136    std::string key = first_letter + interface_name;
 
  137    if (check_boxes_[key]->isChecked())
 
  139      interface_names.push_back(interface_name);
 
  142  return interface_names;
 
  145void UrdfModificationsWidget::addInterfaces()
 
  148  setup_step_.
setInterfaces(getInterfaces(
'C', available_interfaces.command_interfaces),
 
  149                            getInterfaces(
'S', available_interfaces.state_interfaces));
 
  150  generated_text_widget_->setText(setup_step_.
getJointsXML().c_str());
 
  156#include <pluginlib/class_list_macros.hpp>   
PLUGINLIB_EXPORT_CLASS(cached_ik_kinematics_plugin::CachedIKKinematicsPlugin< kdl_kinematics_plugin::KDLKinematicsPlugin >, kinematics::KinematicsBase)
 
const ControlInterfaces & getDefaultControlInterfaces() const
 
std::string getJointsXML() const
 
bool needsModification() const
Return true if there aren't ros2_control tags for all the joints.
 
const ControlInterfaces & getAvailableControlInterfaces() const
 
void setInterfaces(const std::vector< std::string > &command_interfaces, const std::vector< std::string > &state_interfaces)
Add ros2_control tags for all unconfigured joints with the specified interfaces.