Skip to content

Commit ba9ed6e

Browse files
committed
Changes about robot base model and added some cartographing scripts
1 parent e8f9f83 commit ba9ed6e

File tree

169 files changed

+3812
-3051
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

169 files changed

+3812
-3051
lines changed

Diff for: README.md

100644100755
+189-1
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,190 @@
1-
# Project: Moria
1+
# 1. Genel Paketleme Özeti
22

3+
## 1.1 `moria_bringup`
4+
Bu paket robotun direkt rviz ortamında açılmasını sağlamak ve diğer kullanıcı paketlere koordinat transformlarını iletme amacı için yapılmıştır.
5+
6+
## 1.2 `moria_cartographer`
7+
Bu paket 2B ve 3B haritalama algoritmalarını barındırır. Paketin kullanımı aşağıda detaylı belirtilmiştir.
8+
9+
## 1.3 `moria_description`
10+
Bu paket robotun URDF tanımlamalarını içerir. Ana dosyalar `moria.urdf.xacro` ve `moria_fixed.urdf.xacro`.
11+
12+
- `moria.urdf.xacro`: Robotun kollarının hareketli tanımladığı dosyadır. Rviz için bu dosya kullanılmaktadır.
13+
- `moria_fixed.urdf.xacro`: Robotun kollarının sabit tanımlandığı dosyadır. Gazebo simülasyon ortamı için hazırlanmıştır.
14+
15+
## 1.4 `moria_gazebo`
16+
Bu paket tanımlanan robotun Gazebo ortamında kullanılan sürüş kontrolleri, sensör tanımlamaları ve pluginlerinin tanımlandığı dosyaları, oluşturulan dünyaları ve gerekli parametre ve python dosyalarını içermektedir.
17+
18+
19+
20+
# 2. Kurulum
21+
1. ROS2 Humle kurulacak
22+
2. Aşağıda belirtilen kütüphaneler kurulacak
23+
3. `workspace` klasörü ve içerisinde `src` klasörü oluşturulacak
24+
4. `moria_bringup`, `moria_cartographer`, `moria_description` ve `moria_gazebo` klasörleri `workspace/src/` içine atılacak
25+
5. workspace klasörü içerisindeyken paketler kurulacak
26+
6. source işlemi yapılacak
27+
28+
## 2.1 Rviz Açmak için
29+
`ros2 launch moria_bringup rviz2.launch.py`
30+
31+
## 2.2 Modeli Gazeboda Açmak İçin
32+
`ros2 launch moria_gazebo <script.py>
33+
34+
**Kullanılabilecek Scriptler**
35+
1. `btu_big.launch.py`: G Blok Kat 3 için yapılmış 1:1 ölçekli haritada robotu açar.
36+
2. `btu.launch.py`: G Blok Kat 3 için yapılmış 1:10 ölçekli haritada robotu açar.
37+
3. `empty_world.launch.py`: Boş bir dünyada robotu açar.
38+
39+
## 2.3 Haritalama İçin
40+
1. Robot dünyada açılacak
41+
2. Haritalama algoritması çalıştırılacak
42+
1. slam_toolbox asynchron
43+
2. vslam
44+
3. Duvar takibi algoritması başlatılacak
45+
4. Duvar takibi bittikten sonra keşif algoritması başlatılacak
46+
5. Harita Nav2 kütüphanesi kullanılarak kaydedilecek.
47+
48+
49+
50+
# 3. Paket Açıklamaları
51+
## 3.1 `moria_bringup`
52+
`robot_state_publisher` kütüphanesi kullanılarak robotun koordinat transformlarını yayınlar.
53+
54+
## 3.2 `moria_cartographer`
55+
2B ve 3B haritalama yapmak için hazırlanmıştır.
56+
57+
Gerekli ROS Kütüphaneleri (Versiyonlar "dependencies" dosyasının içerisinde bulunmaktadır.):
58+
59+
- Twist Mux
60+
- Slam_toolbox
61+
- Navigation2
62+
- RTabMap
63+
- Numpy
64+
- Scikit-learn
65+
- Open3D
66+
- PIL
67+
- yaml
68+
- gazebo-ros
69+
- tf2_ros
70+
71+
**SLAM işlemi için yapılması gerekenler:**
72+
73+
- Moria gazebo ortamına spawnlanmalıdır. `ros2 launch moria_gazebo btu.launch.py`
74+
- Slam_toolbox çalıştırılmalıdır. `ros2 launch slam_toolbox online_async_launch.py use_sim_time:=True`
75+
- Duvar takibi algoritması çalıştırılmalıdır. `ros2 run moria_cartographer wall_track.py`
76+
- Duvar takibi tamamlandıktan sonra eksik kalan yerler frontier exploration algoritması ile tamamlanmalıdır. `ros2 run moria_cartographer frontier_exploration.py`
77+
- 2D Harita nav2 kullanılarak kaydedilmelidir. `ros2 run nav2_map_server map_saver_cli -f my_map`
78+
79+
**VSLAM işlemi için yapılması gerekenler:**
80+
81+
- Moria gazebo ortamına spawnlanmalıdır.
82+
- Moria VSLAM çalıştırılmalıdır `ros2 launch moria_cartographer moria_vslam.launch.py`
83+
- Duvar takibi algoritması çalıştırılmalıdır.
84+
- Frontier exploration algoritması çalıştırılmalıdır.
85+
- Haritalama işlemi tamamlandığında process terminalden kapatılarak 3D harita kaydedilmelidir <CTRL + C>
86+
87+
**VSLAM - SLAM işlemi için yapılması gerekenler:**
88+
89+
- Moria gazebo ortamına spawnlanmalıdır.
90+
- Slam_toolbox çalıştırılmalıdır.
91+
- Moria VSLAM çalıştırılmalıdır.
92+
- Duvar takibi algoritması çalıştırılmalıdır.
93+
- Frontier exploration algoritması çalıştırılmalıdır.
94+
- 2D Harita nav2 kullanılarak kaydedilmelidir.
95+
- Haritalama işlemi tamamlandığında process terminalden kapatılarak 3D harita kaydedilmelidir.
96+
97+
Yapılan bu haritalama işlemleri sırasında sürecin takibi RViz üzerinden yapılabilmektedir.
98+
99+
Slam_toolbox kütüphanesi "/map" konusundan harita yayınlamaktadır.
100+
RTabMap kütüphanesine ait 3D map "/map_graph" konusundan yayınlanmaktadır, 2D harita ise "/map2" konusundan yayınlanmaktadır.
101+
102+
### 3.2.1 Frontier Exploration
103+
Frontier_Exploration algoritması bir çeşit haritalama stratejisidir ve Moria'nın daha etkili haritalama yapması için kullanılmaktadır.
104+
105+
106+
**Çalışma Prensibi:**
107+
108+
- Haritalama işlemi başladığı anda oluşan ilk harita "kanıt haritası" olarak alınmaktadır.
109+
- Kanıt haritası üzerinde keşfedilmemiş pikseller komşuluk ilişkilerine bakılarak bir ağırlıklı toplam ile puanlanır.
110+
- Keşfedilmeye en uygun piksel "best_frontier" olarak işaretlenir.
111+
- İşaretlenen piksele engellerden kaçınarak ilerleyebilmek için NAV2 kütüphanesi kullanılarak rota planlama işlemi yapılır.
112+
- Moria istenilen piksele ulaştığında bu işlem tekrarlanır ve bu sayede haritalama yapılır.
113+
114+
NAV2 Kütüphanesi vanilla olarak "Djikstra" rota planlama algoritmasını kullanmaktadır. Bu algoritma kesinlikle en kısa yolu vermektedir ancak çok yavaş bir algoritmadır.
115+
Bu sebeple "Moria" yine NAV2 Kütüphanesinin içerisinde bulunan "Hybrid A*" rota planlama algoritmasını kullanmaktadır.
116+
117+
### 3.2.2 Trim
118+
Trim algoritması lidar tarafından algılanması mümkün olmayan ve hayali duvar oluşumu gibi bir çok hataya sebep olabilecek cam, ayna vb. yüzeylerin kamera ile tespit edilmesini sağlamaktadır.
119+
120+
**Gerekli Kütüphaneler:**
121+
122+
- CV2
123+
- Numpy
124+
- CV_Bridge
125+
126+
**Çalışma Prensibi:**
127+
128+
- *Camera_callback* fonksiyonu ile kameradan (/camera_rgb/image_raw) RGB görüntü alınmaktadır.
129+
- *Detect_glass_regions* fonksiyonu ile görüntü grayscale formata çevirilmekte ve Canny algoritması kullanılarak yüksek kontrastlı kenar tespiti yapılmaktadır. Düşük kontrastlı bölgeler Laplace dönüşümü ile analiz edilir ve filtrelenir. Son olarak tespit edilen cam (reflector) yüzeylere ait x,y,w,h bilgileri döndürülür.
130+
- *map_lidar_to_camera* fonksiyonu ile lidar noktalarının kamera görüntüsündeki konumu hesaplanır.
131+
- Son olarak ise lidar verileri güncellenerek /filtered_scan ROS Topic'i altında yayınlanır.
132+
133+
Haritalanması gereken bölge cam, ayna vb. objeler bulundurmuyorsa veya LİDAR sensörünün ulaşamayacağı yükseklikte ise bu scripti kullanmaya gerek yoktur. Cam, ayna vb. objeler bulunmayan bir ortamda bu scripti kullanmak haritalama performansını kötü etkileyebilir.
134+
135+
### 3.2.3 Wall Tracking
136+
Duvar takibi algoritması sadece lidar sensör verileri kullanılarak gerçek zamanlı bir control algoritmasıdır. Olabilecek en basit şekilde kullanılan PD kontrol ile lidardan her veri için hesaplamalar yapıp robotu duvara 1.41m uzaklıkta tutmayı sağlamaktadır.
137+
138+
**Gerekli Kütüphaneler**
139+
- rclpy
140+
- math
141+
- numpy
142+
- sensor_msgs
143+
- nav_msgs
144+
- tf2_ros
145+
- geometry_msgs
146+
- /map topic
147+
148+
**Çalışma Prensibi**
149+
- Yayınlanan ros topic arasında "/map" yayınlanmasını bekler.
150+
- Robotun konumu ve yönü hesaplanır. Bu işlem sadece kullanıcıyı bildirmek amacıyla yapılır. Hareket algoritmasında yeri yoktur.
151+
- Yakında duvar olup olmadığı kontrol edilir.
152+
- Eğer duvar varsa duvarı sağına alır.
153+
- Eğer duvar yoksa 0.7m mesafede duvar görene kadar ileri hareket gerçekleştirilir.
154+
- Duvar bulunduktan sonra 180 derece tarama yapan lidarın 45. indeksindeki veriye göre hata PD kontrolcüsüne gönderilip robotun açısal hızı belirlenir.
155+
- Sağa ve sola dönüşleri sadece bu işlemleri kullanarak robot duvarları takip eder.
156+
157+
158+
## `moria_description`
159+
Robotun tasarlanmış parçalarını ve tanımlamalarını içerir. Tanımlamalar iki farklı durum için iki farklı ana dosya üzerinden yapılmıştır. Xacro formatı kullanılmıştır.
160+
161+
## `moria_gazebo`
162+
Robotun gazebo ortamında oluşturulması sağlaması için yapılmıştır.
163+
- `config/`: gerekli yaml parametre dosyalarını barındırır.
164+
- `launch/`: Robotu istenilen simülasyon ortamında açmak için kullanılır. Bu haritalama paketi için gereklidir.
165+
- `btu_big.launch.py`: Hazırlanmış 1:1 ölçekli haritada robotu açar.
166+
- `btu.launch.py`: Hazırlanmış 1:10 ölçekli haritada robotu açar.
167+
- `empty_world.launch.py`: Boş bir dünyada robotu açmak için kullanılır.
168+
- `spawn_moria.launch.py`: Moria tasarım dosyalarını belirterek gazebo ortamına getirilmesini sağlar.
169+
- `state_publisher.launch.py`: `models/moria/model.urdf` dosyasını okuyup gerekli pluginleri ve sensörlerin çalışma prensibini gazeboya iletmek için kullanılır.
170+
- `models/`: 1:1 ölçekli harita ve moria modellerini tanımlamalarıyla birlikte barındırır.
171+
- `rviz/`: Simülasyonun yanında rviz uygulaması için parametreleri barındırır.
172+
- `worlds/`: Kullanılacak haritaların ana tanımlamalarını içerir. İçerisindeki dosyalar gerekli dosyaları bulup çağırmaktadır.
173+
174+
175+
Eksikler:
176+
177+
- 3D Haritalama sırasında kameranın görüş açısı ve konumu sebebiyle 2 adet kör nokta bulunmaktadır. Bu kör noktalar 3D harita üzerinde boş kalmış duvar parçalarıdır.
178+
179+
Çözüm Önerisi:
180+
181+
- Kör noktada bulunan duvarların haritalanması işlemi için, duvar takibi algoritmasını bir defada sol tarafı takip edecek şekilde çalıştırmak yeterli olacaktır.
182+
183+
184+
Gelecekte Yapılması İstenilen/Planlanan İşlemler:
185+
186+
- Haritası çıkartılmış bir mekanda Moria'yı hareket ettirmek.
187+
- Moria'ya Pick & Place uygulaması yaptırmak.
188+
- Intel Realsense D435 kamerayı kullanarak "Gesture Prediction" yapmak.
189+
- Dynamic Window Approach vb. bir hareket planlama algoritması ile haritası çıkartılmış bir ortamda dinamik engellerden kaçınma.
190+
- LİDAR sensörünü tamamen robottan çıkartmak ve tüm haritalama vb. işlemleri yalnızca Intel Realsense D435 kamera ile gerçekleştirmek.

Diff for: TODOs.todo

-68
This file was deleted.

Diff for: moria_bringup/CMakeLists.txt

100644100755
File mode changed.

0 commit comments

Comments
 (0)