Anleitung zur Inbetriebnahme des UR3-Roboters mittels des ROS

Aus HSHL Mechatronik
Zur Navigation springen Zur Suche springen

Autor: Vincent Holthaus

Dies ist ein Artikel der als Anleitung zur Inbetriebnahme des UR3- Roboters mittels des Robot Operating Systems (ROS) dient.

Voraussetzungen

Voraussetzung für eine erfolgreiche Verbindung ist, dass der Linux PC mit Ubuntu 20.04 oder 18.04 betrieben wird. Als ROS Version wird "melodic" empfohlen, aber "noetic" sollte auch möglich sein. Außerdem sollten die ROS-Bibliotheken "Rviz" und "Moveit", sowie die entsprechenden Treiber installiert sein. Diese sind hier zu finden. Der UR3 muss Polyscope 3.7 oder höher installiert haben.

Anleitung zur Verbindung

  1. Ethernet Verbindung zwischen Roboter und PC herstellen
  2. Am Touchscreen des Roboters unter Einstellungen -> Netzwerk eine statische IP-Adresse vergeben. 192.168.0.75 sollte funktionieren. Als Port wird 50002 gesetzt.
  3. IP-Adresse des Ubuntu PCs unter Netzwerk auslesen.
  4. Am Touchscreen des Roboters ein neues Programm erstellen
  5. Unter "URCaps" den Programmpunkt "external control" hinzufügen.
  6. Sicherstellen dass "PROFINET" deaktiviert ist
  7. Netzwerkeinstellungen am Roboter überprüfen. Falls nötig unter "Host IP" die IP-Adresse des PCs eingeben.

Als nächstes muss eine Reihe von Befehlen in jeweils eigenen Ubuntu-Terminals ausgeführt werden. Diese müssen während der Nutzung des Roboters geöffnet bleiben.

1. Fenster: Laden der Arbeitsumgebung und Informationen zum Roboter

cd catkin_ws

source devel/setup.bash

roslaunch ur_description ur3_upload.launch

2. Fenster: Laden der Moveit-Treiber zum Planen und Ausführen von Bewegungen

cd catkin_ws
source devel/setup.bash
roslaunch ur3_moveit_config ur3_moveit_planning_execution.launch
3. Fenster: Laden von Rviz zur Visualsierung des Roboters am PC
cd catkin_ws
source devel/setup.bash
roslaunch ur3_moveit_config moveit_rviz.launch config:=true
4. Fenster: Herstellung einer Verbindung unter dem angegeben IP-Adresse (auszutauschen, falls geändert)
cd catkin_ws
source devel/setup.bash
roslaunch ur_robot_driver ur3_bringup.launch robot_ip=192.168.0.75


Nach ausführen der Befehle sollte sich eine Rviz-Umgebung öffnen, welche den aktuellen Zustand des Roboters anzeigt. Eins der Fenster sollte "ready to recieve commands" ausgeben und der Roboter ist bereit über Rviz, C++ oder Python angesteuert zu werden.


Ansteuerung über Moveit/Rviz

Zur Einstellung einer Zielposition des Roboters können die Gelenke mit der Maus bewegt werden. Auch können Zielkoordinaten eingegeben werden. Das Programm zeigt dabei an in welcher Position der Roboter sich befindet und wie die Zielpositon aussieht. Hierbei ist zu beachten, dass mit mit dem "Plan"-Knopf eine Visualisierung des Pfades erfolgt. Es kann sein, dass dieser Pfad nicht möglich ist, da er sich zum Beispiel durch die Tischplatte bewegen würde. Dieser darf nicht ausgeführt werden, da es sonst zur Beschädigung des Roboters und seinem Umfeld kommen könnte. Anschließend kann mit "Execute"-Knopf der geplante Weg auf dem Roboter ausgeführt werden. Es ist zu empfehlen eine niedrige Beschleunigung und Maximalgeschwindigkeit einzustellen und den Not-Aus Schalter griffbereit zu haben um eine Kollision zu vermeiden.

Ansteuerung über C++ oder Python

Auch eine Ansteuerung des Roboters über C++ oder Python ist möglich. Hierbei ist zu beachten, dass die Entwicklungsumgebung möglichst über das Terminal im catkin-workspace geöffnet wird. Bei der Programmierung in Programmiersprachen müssen die auszuführeden Programme in Nodes umgeschrieben werden. Das heißt, dass alle Ausgaben eines Programms als "Publisher" umgeschrieben werden. Dies umfasst beispielsweise Bewegungskoordinaten oder Zielkoordinaten. Hier ist ein Beispielcode, welcher eine "targetpose" in Koordinaten für den Roboter ausgibt. Wichtig ist, dass bei der Anlegung eines neuen Programms ein neues "package" erstellt wird, welches in der "CMakeList" im workspace referenziert wird. Da in diesem Programm keine reduzierten Geschwindigkeiten angegeben sind und die Planung des Pfades nicht einsehbar ist, sollte besonders vorsichtig gearbeitet werden.

#include <moveit/move_group_interface/move_group_interface.h>
#include "ros/ros.h"
#include "std_msgs/String.h"
#include <sstream>
int main(int argc, char* argv[])

//Ros initialisieren, Node erstellen

rclcpp::init(argc, argv);
auto const node = std::make_shared<rclcpp::Node>(
    "hello_moveit",
    rclcpp::NodeOptions().automatically_declare_parameters_from_overrides(true)
);

//Ros Logger erstellen
auto const logger = rclcpp::get_logger("hello_moveit");

//Moveit Interface group erstellen
using moveit::planning_interface::MoveGroupInterface;
auto move_group_interface = MoveGroupInterface(node, "ur3");

//targetpose erstellen

auto const taget_pose = []{
    geometry_msgs::msg::Pose msg;
    msg.orientation.w = 1.0;
    msg.position.x = 0.2;
    msg.position.y = 0.2;  
    msg.position.z = 0.2;
}();
move_group_interface.setPoseTarget(target_pose);

//targetpose planen
auto const [success, plan] = [&move_group_interface]{
    moveit::planning_interface::MoveGroupInterface;;plan msg;
    auto const ok= static_cast<bool>(move_group_interface.plan(msg));
    return std::make_pair(ok,msg);

}();

//Plan ausfuehren

if(success){
    move_group_interface.execute(plan);
}else{
    RCLPP_ERROR(logger,"Planning failed");
    //ROS ausschalten
    rclcpp::shutdown();
    return 0;
}