diff --git a/README.md b/README.md
index a2873aa2cd4f16986a6b39a6f75ca05dd18e83c8..dda75812c8a77ce8fe64a3a5cdc6afcb031e8b47 100644
--- a/README.md
+++ b/README.md
@@ -1,6 +1,6 @@
 # Podsystemy platform bezzałogowych
 
-Celem tego laboratorium jest zaznajomienie z oprogramowaniem oraz sprzętem wykorzystywanym przy tworzeniu robotów. Laboratorium podzielone zostało na 4 bloki tematyczne, które skupiają się na ważnych aspektach 
+Celem tego laboratorium jest zaznajomienie z oprogramowaniem oraz sprzętem wykorzystywanym przy tworzeniu robotów. Laboratorium podzielone zostało na 4 bloki tematyczne, które skupiają się na ważnych aspektach zagadnień związanych z platformami bezzałogowymi.
 
 ## Laboratorium 0
 **Opis**: W tym ćwiczeniu należy na swoim komputerze zainstalować środowisko Visual Studio Code oraz program NoMachine, które będą podstawowymi narzędziemi do zdalnej pracy na komputerze jednoukładowym z zainstalowanym środowiskiem Linux.
diff --git a/lab04/README.md b/lab04/README.md
new file mode 100644
index 0000000000000000000000000000000000000000..6c5f90e1768114bcf48bf0e910205145d76b545c
--- /dev/null
+++ b/lab04/README.md
@@ -0,0 +1,75 @@
+# Przygotowanie przestrzeni roboczej
+Połącz się ze zdalnym środowiskiem i ściągnij swoje repozytorium do przestrzeni roboczej catkin_ws.
+
+
+# Transformacje pomiędzy układami współrzędnych
+Przed przystapieniem do omawiania nawigacji ważnym jest aby rozumieć jak wiele układów współrzędnych znajduje się w platformie robotycznej, jak są one ze sobą połączone oraz jak określać położenie i orientacje względem poszczególnych układów współrzędnych. 
+
+Działanie zależności pomiędzy układami współrzędnych zostanie zwizualizowane na przykładzie manipulatora o 5 stopniach swobody. 
+
+![model_katana](img/model_katana.png "model_katana")
+
+W systemie ROS możemy wizualizować roboty i elementy środowiska przy pomocy opisu URDF. Na niniejszym laboratorium jednak nie zostanie on wyjaśniony. Jeśli chcesz dowiedzieć jak tworzy się pliki URDF i jak stworzyć model własnego robota, to tu znajdziesz więcej informacji [link](http://wiki.ros.org/urdf/Tutorials) (tutorial opisuje jak stworzyć prosty model robota R2D2).
+
+W skrócie pliki URDF pozwalają opisać jak złożony jest robot. Z jakich złożony jest elementów i jak są one połączone ze sobą. 
+
+Aby uruchomić naszą wizualizację potrzebujemy pliku launch.
+
+```xml
+<launch>
+  <param name="robot_description" command="$(find xacro)/xacro.py '$(find katana_description)/urdf/katana_300_6m180.urdf.xacro'" />
+    <node pkg="joint_state_publisher_gui" type="joint_state_publisher_gui" name="joint_state_publisher">
+    </node>
+
+    <node pkg="robot_state_publisher" type="robot_state_publisher" name="robot_state_publisher">
+        <param name="ignore_timestamp" value="false"/>
+    </node>
+
+    <node pkg="tf" type="static_transform_publisher" name="katana_base_link_to_box" args="0 0.5 0 0 0 0 /katana_base_link /box 100"/>
+</launch>
+```
+Został on już stworzony w pakiecie "laboratorium_pliki_dodatkowe". 
+
+Po pierwsze musimy załadować opis naszego robota jako parametr pod nazwą **robot_description**. 
+
+Następnie uruchamiamy trzy node'y. Pierwszy odpowaiada za publikowanie stanu poszczególnych przegubów robota. Po uruchomieniu zobaczysz okno z interfejsem, który pozwoli na zmianę pozycji poszczególnych przegubów robota. Jeśli posiadalibyśmy prawdziwego robota, którego chcielibyśmy wizualizować, wtedy jego sterownik publikowałby aktualne stany poszczególnych przegubów.  
+
+Kolejny node na podstawie pliku urdf oraz danych publikowanych przez **joint_state_publisher** uaktualnia pozycje wizualizowanych elementĂłw robota.
+
+Ostatni node **static_transform_publisher** publikuje stałe przekształcenie (odsunięcie o 0.5 m w osi y) pomiędzy układem współrzędnych **katana_base_link**, a **box**. Ma on symulować położenie przykładowego elementu i posłuży do lepszego wyjaśnienia omawianego zagadnienia.  
+
+Uruchom plik launch **wizualizacja_urdf** z paketu **laboratorium_pliki_dodatkowe**. Następnie uruchom program RVIZ i dodaj wizualizacje modelu robota, tf oraz zmień stały układ współrzędnych na **katana_base_link**.
+
+@@@@@@
+
+
+**Zadanie 1:** Przy pomocy **joint_state_publisher** obróć poszczególne przeguby robota i zobacz jak zmienia się wizualizacja. Zmień stały układ współrzędnych (Fixed frame) na wybrany układ zaczynający się od nazwy **katana_motor**. Sprawdź jak teraz zmienia się wizualizacja przy ruchach przegubów. 
+
+
+![model_tf](img/model_tf.png "model_tf")
+
+Jak widać robot złożony jest z wielu układów współrzędnych połączonych ze sobą. Każdy kolejny układ współrzędnych jest zaczepiony w poprzednim i względem niego jest ukreślana jego pozycja. Taki sposób organizacji wszystkich układów współrzędnych pozwala nam w łatwy sposób wyliczyć, gdzie np. znajduje się końcówka robota względem podstawy lub dowolnego innego obiektu np. pudełka o układnie współrzędnych **box**. Wszystkie połączenia pomiędzy układami współrzędnych są zorganizowane w postaci struktury drzewa. Aktualną strukturę możemy zobaczyć przy pomocy narzędzia rqt i TF Tree.
+
+**Zadanie 2:** Uruchom program rqt przy pomocy komendy ``` rqt ``` w terminalu. Następnie włącz wizualizacje TF Tree (Plugins -> Visualization -> TF Tree).
+
+Po uruchomieniu TF Tree możesz zobaczyć jak cała struktura jest zorgranizowana. Dodatkowo, dzięki temu narzędziu możemy sprawdzić czy na pewno wszystko jest ze sobą połączone. Jeśli któryś z elementów nie będzie połączony z resztą to dane z takiego elementu nie mogą być odniesione do innych np. jeśli nie wprowadzimy jak zamontowany jest lidar na robocie to będziemy wiedzieć jak dalego znajduje się przeszkoda od lidaru, ale nie będziemy wiedzieć jak blisko znajduje się od np. przedniego zderzaka robota. 
+
+![tf_tree](img/tf_tree.png "tf_tree")
+
+W dowolnej chwili możemy sprawdzić aktualne przesunięcie (transformacje) pomiędzy dwoma dowolnymi układami współrzędnych. Możomy to zrobić przy pomocy komendy:
+```bash
+rosrun tf tf_echo <nazwa układu współrzędnych> <nazwa układu współrzędnych>
+```
+
+@@@@@@@@@@
+
+![tf_echo](img/tf_echo.png "tf_echo")
+
+Program tf co sekundę pokazuje nam odległość i zmianę orinetacji pomiędzy dwoma układami współrzędnych. Przesunięcie określone jest kolejno w osiach X,Y,Z. Natomiast zmiana orientacji podana jest w trzech różnych jednostkach.
+
+
+**Zadanie 3:** Uruchom tf_echo pomiędzy układami współrzędnych **katana_gripper_tool_frame** i **box**, a następnie ustaw końcówkę robota na tyle blisko układu współrzędnych **box**, aby odległość w żadnej osi nie przekraczała 0.2 m.
+
+
+ 
+
diff --git a/lab04/img/README.md b/lab04/img/README.md
deleted file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..0000000000000000000000000000000000000000
diff --git a/lab04/img/model_katana.png b/lab04/img/model_katana.png
new file mode 100644
index 0000000000000000000000000000000000000000..32bc91b9f9a4f495bef6d4bc1bf4117764e5be4c
Binary files /dev/null and b/lab04/img/model_katana.png differ
diff --git a/lab04/img/model_tf.png b/lab04/img/model_tf.png
new file mode 100644
index 0000000000000000000000000000000000000000..c8c9ff05f0f66bec9623b5a0bea5edb8b012bb24
Binary files /dev/null and b/lab04/img/model_tf.png differ
diff --git a/lab04/img/tf_echo.png b/lab04/img/tf_echo.png
new file mode 100644
index 0000000000000000000000000000000000000000..9ed645d04dd3d14300bbd7facbadeb9fc591985c
Binary files /dev/null and b/lab04/img/tf_echo.png differ
diff --git a/lab04/img/tf_tree.png b/lab04/img/tf_tree.png
new file mode 100644
index 0000000000000000000000000000000000000000..b0f9b3aa62a3def519168aa152fac3f49539c1f3
Binary files /dev/null and b/lab04/img/tf_tree.png differ