Last Updated on 22. April 2023 by sfambach
Ich habe mal angefangen mich mit ROS zu veschäftigen, irgendwann stösst man auf die Information das auch ohne physikalischen Roboter das Verhalten simulieren werden kann. Einwenig mehr in die Materie eingelesen fand ich mich vor zich Tutorials wieder die ich mit den dort vorhandenen Informationen nicht ausprobieren konnte. Somit stellt ich mir die Frage was sind denn die Grundvoraussetzungen um solch ein Modell auch bei mir zu starten und zu simulieren und 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 wurde 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 eigenen URDFs gelegt, die Erklärung der Konfigurationsdateien sind nicht Bestandteil dieses Beitrag bitte diese einfach als gegeben hinnehmen.
Zur Darstellung der Modelle wird RViz verwendet, dies ist die Roboter Visualisierung von ROS.
Voraussetzungen
- ROS (Melodic) installiert (Link)
- Catkin installiert (Link)
- Folgende Paket sollten auch installiert sein
sudo apt install joint-state-publisher
sudo apt-get install liburdfdom-tools // optional
Abeitsbereich 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 ersten und die dritte Zeilen. 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 minimal konfiguration
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()
Paketbeschriebung 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>
Minimal Modell 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 siehts aus
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
Sonstiges
./.
Probleme
./.
Fazit
Wenn man weiss wie, erscheint es ganz einfach jedoch ist der Weg zum Ziel aus meiner sicht sehr steinig.
Quellen
https://classic.gazebosim.org/tutorials?tut=ros_urdf
https://automaticaddison.com/how-to-make-an-autonomous-wheeled-robot-using-ros/
http://wiki.ros.org/rviz