ROS URDF: Setting up a Project

Last Updated on 4. October 2026 by SuffocationLink status: OK

Ich habe mal angefangen, mich mit ROS zu beschäftigen, irgendwann stößt man auf die Information, dass auch ohne physikalischen Roboter das Verhalten simuliert werden kann. Ein wenig mehr in die Materie eingelesen, fand ich mich vor zig Tutorials wieder, die ich mit den dort vorhandenen Informationen nicht ausprobieren konnte. Somit stellte ich mir die Frage, was denn die Grundvoraussetzungen sind, um solch ein Modell auch bei mir zu starten und zu simulieren. Damit ich es nicht wieder vergesse, habe ich versucht, die Grundkonfiguration ohne weitere Erklärungen hier festzuhalten. Ich hoffe, das hilft denjenigen, die vor dem gleichen Problem stehen.

Wie schon erwähnt, ist eine Stärke von ROS, Roboter simulieren zu können. Hierfür benötigt es möglichst genaue Modelle der Roboter. Diese können mit Hilfe der URDF erstellt werden. Die URDF bietet hierbei nicht nur graphische Modellierungsmöglichkeiten, sondern auch physikalische. Kenngrößen wie Gewicht, Reibung usw. können mit in das Modell einbezogen werden.

Alle Inhalte in diesem Beitrag wurden unter UBUNTU 18.4 getestet. Die eigentliche ROS-Installation ist nicht Teil dieses Beitrags, es wird davon ausgegangen, dass ROS installiert ist und funktioniert. Ich habe hier das Augenmerk auf die möglichst schnelle Erstellung eigener URDFs gelegt, die Erklärungen der Konfigurationsdateien sind nicht Bestandteil dieses Beitrags, bitte diese einfach als gegeben hinnehmen.

Zur Darstellung der Modelle wird RVizLink status: OK verwendet, dies ist die Roboter-Visualisierung von ROS.

Requirements

  • ROS (Melodic) installiert (LinkLink status: OK)
  • Catkin installiert (LinkLink status: OK)
  • Folgende Pakete sollten auch installiert sein
sudo apt install joint-state-publisher
sudo apt-get install liburdfdom-tools // optional

Arbeitsbereich erstellen

Erstellen der Verzeichnisse

mkdir -p ~/urdf_ws/src/launch
cd ~/urdf_ws/src

Neues Paket anlegen

catkin_create_pkg <Paket_Name> [Abhängikeit1] [Abhängikeit1] [Abhängikeit1]
catkin_create_pkg urdf_test

Launchdatei erstellen

Dateiname display.launch

cd launch
touch display.launch
edit display.launch
cd ..

Inhalt der Launchdatei

<launch>
  <arg name="model" default="$(find urdf_test)/test01.urdf"/>
  <arg name="gui" default="true" />
  <arg name="rvizconfig" default="$(find urdf_test)/urdf.rviz" />

  <param name="robot_description" command="$(find xacro)/xacro $(arg model)" />
  <node if="$(arg gui)" name="joint_state_publisher" pkg="joint_state_publisher_gui" type="joint_state_publisher_gui" />
  <node unless="$(arg gui)" name="joint_state_publisher" pkg="joint_state_publisher" type="joint_state_publisher" />
  <node name="robot_state_publisher" pkg="robot_state_publisher" type="robot_state_publisher" />
  <node name="rviz" pkg="rviz" type="rviz" args="-d $(arg rvizconfig)" required="true" />
</launch>

Wichtig sind die erste und die dritte Zeile. Sie geben an, wo das Modell zu finden ist und wo evtl. eine Konfiguration für RVIZ liegt. Diese RVIZ Konfiguration müssen wir jetzt auch noch erstellen.

touch urdf.rviz

Inhalt der Datei

Panels:
  - Class: rviz/Displays
    Name: Displays
  - Class: rviz/Views
    Name: Views
Visualization Manager:
  Displays:
    - Class: rviz/Grid
      Name: Grid
      Value: true
    - Alpha: 0.8
      Class: rviz/RobotModel
      Enabled: true
      Name: RobotModel
      Robot Description: robot_description
      Value: true
    - Class: rviz/TF
      Name: TF
      Value: false
  Global Options:
    Fixed Frame: base_link
    Frame Rate: 30
  Name: root
  Tools:
    - Class: rviz/MoveCamera
  Value: true
  Views:
    Current:
      Class: rviz/Orbit
      Distance: 1.7
      Name: Current View
      Pitch: 0.33
      Value: Orbit (rviz)
      Yaw: 5.5
Window Geometry:
  Height: 800
  Width: 1200

CMakeList anpassen

Die CMake Datei benötigen wir zum Bauen. Die CMakeLists.txt besteht schon, sie wurde mit dem Catkin Paket erstellt, diese muss nur noch editiert werden. Auch hier nur eine Minimalkonfiguration

cmake_minimum_required(VERSION 3.0.2)
project(urdf_test)
find_package(catkin REQUIRED)
catkin_package()

#install(DIRECTORY images meshes launch rviz urdf
install(DIRECTORY launch 
        DESTINATION ${CATKIN_PACKAGE_SHARE_DESTINATION}
)

#############
## Testing ##
#############

if(CATKIN_ENABLE_TESTING)
  find_package(roslaunch REQUIRED)
  roslaunch_add_file_check(launch)
endif()

Paketbeschreibung erstellen

touch package.xml
<package>
  <name>urdf_test</name>
  <version>0.0.1</version>

  <description>This package contains a number of URDF test.</description>
  <author email="anfrage@fambach.net">Stefan Fambach</author>

  <maintainer email="anfrage@fambach.net">Stefan Fambach</maintainer>

  <license>BSD</license>
  <url>http://www.fambach.net</url>

  <buildtool_depend>catkin</buildtool_depend>
  <build_depend>roslaunch</build_depend>
  <run_depend>joint_state_publisher</run_depend>
  <run_depend>joint_state_publisher_gui</run_depend>
  <run_depend>robot_state_publisher</run_depend>
  <run_depend>rviz</run_depend>
  <run_depend>xacro</run_depend>

</package>

Minimalmodell erstellen

Urdf Datei anlegen

touch test01.urdf

Inhalt der Datei ist ein Zylinder.

<?xml version="1.0"?>
<robot name="myfirst">
  <link name="base_link">
    <visual>
      <geometry>
        <cylinder length="0.0025" radius="0.07"/>
      </geometry>
    </visual>
  </link>
</robot>

Modell bauen

Ins Hauptverzeichnis zurückkehren

cd ~/test_ws

Projekt bauen und installieren

catkin_make && catkin_make install

Modell starten

Quellverzeichnis setzen (Dies wird auch später benötigt, wenn eine neue Console geöffnet wird)

source devel/setup.bash

… und starten

catkin_make install && roslaunch urdf_test display.launch model:='$(find urdf_test)/test01.urdf'

So sieht’s aus

Screenshot des RVIZ Viewers

Sollte er das Paket nicht finden … einfach mal den folgenden Befehl verwenden, bitte auf die Hochkommata achten.

roslaunch <Paket> <display.launch> model:='$(find <Paket)<Urdf Datei>

Bitte darauf achten: Wenn die urdf Datei in einem Unterverzeichnis liegt, muss diese mit angegeben werden (wie beispielsweise im ROS URDF tutorial).

git clone https://github.com/ros-simulation/gazebo_ros_demos.git
git clone https://github.com/ros/urdf_tutorial.git

Miscellaneous

./.

Problems

./.

Conclusion

Wenn man weiß, wie, erscheint es ganz einfach, jedoch ist der Weg zum Ziel aus meiner Sicht sehr steinig.

Sources

https://classic.gazebosim.org/tutorials?tut=ros_urdfLink status: OK

https://automaticaddison.com/how-to-make-an-autonomous-wheeled-robot-using-ros/Link status: OK

http://wiki.ros.org/rviz

DateChangeAuthor
04.10.2026Rechtschreibung korrigiert: Tippfehler, Kommas, Grammatik, Groß-/KleinschreibungSuffocation
03.10.2026Log-Liste eingefügtSuffocation
24.03.2023Post createdSuffocation
Changelog

Leave a Reply

Your email address will not be published. Required fields are marked *