Download as pdf or txt
Download as pdf or txt
You are on page 1of 82

Subscribe to DeepL Pro to translate larger documents.

Visit www.DeepL.com/pro for more information.

İSTANBUL TEKNİK ÜNİVERSİTESİ ★ FEN BİLİMLERİ ENSTİTÜSÜ


MÜHENDİSLİK VE TEKNOLOJİ

ENDÜSTRİYEL ÖLÇÜMLERDE KOORDİNAT SİSTEMLERİ VE


JEODEZİK ÖLÇÜMLER

YÜKSEK

LİSANS TEZİ

Wael ALNAGAR

İnşaat Mühendisliği Bölümü

Geomatik Mühendisliği Programı

Aralık 2019
İSTANBUL TEKNİK ÜNİVERSİTESİ ★ FEN BİLİMLERİ ENSTİTÜSÜ
MÜHENDİSLİK VE TEKNOLOJİ

ENDÜSTRİYEL ÖLÇÜMLERDE KOORDİNAT SİSTEMLERİ VE JEODEZİK


ÖLÇÜMLER

YÜKSEK LİSANS TEZİ

Wael ALNAGAR
501161668

Geomatik Mühendisliği Bölümü

Geomatik Mühendisliği Programı

Tez Danışmanı Prof: Dr. Rahmi Nurhan ÇELİK

Aralık 2019
İSTANBUL TEKNİK ÜNİVERSİTESİ ★ FEN BİLİMLERİ ENSTİTÜSÜ

ENDÜSTRİYEL ÖLÇEMLERDE KOORDİNAT SİSTEMLERİ VE JEODEZİK


ÖLÇMELER

YÜKSEK LİSANS TEZİ

Wael ALNAGAR
501161668

Geomatik Mühendisliği Anabilim Dalı

Geomatik Mühendisliği Programı

Tez Danışmanı: Dr. Rahmi Nurhan ÇELİK

Aralık 2019
İTÜ Fen Bilimleri Enstitüsü Mühendislik ve Teknoloji Anabilim Dalı 521161668
numaralı yüksek lisans öğrencisi Wael ALNAGAR, "COORDINATE SYSTEMS
AND GEODETIC MEASUREMENTS IN
İlgili mevzuatta belirtilen gereklilikleri yerine getirerek hazırladığı "ENDÜSTRİYEL
ÖLÇÜMLER" adlı çalışmasını aşağıda imzaları bulunan jüri önünde sunmuştur.

Tez Danışmanı: Prof. Dr. Rahmi Nurhan ÇELİK


İstanbul Teknik Üniversitesi

Jüri Üyeleri: Doç. Dr.Mustafa Tevfik Özlüdemir


İstanbul Teknik Üniversitesi

Dr. Şenol Hakan Kutoğlu


Bülent Ecevit Üniversitesi

Teslim Tarihi : 13 Kasım 2019 Savunma


Tarihi : 23 Aralık 2019

v
vi
ÖNSÖZ

Her zaman yanımda olan sevgili eşim Weam'a. Tüm güzel ve


samimi aileme.
Anıları her zaman aklımda olan nazik ve dürüst insanlara. Dr. Rahmi
Nurhan Çelik'e değerli destek ve tavsiyeleri için teşekkür ederim.
Ve hala kalbimin derinliklerinde benimle birlikte yaşayan
ülkeme. Minnettarlığımı adıyorum ....

Kasım 2019 Wael Alnagar

vii
viii
İÇİNDEKİLER

Sayf

a ÖNSÖZ vii ..............................................................................................................


İÇİNDEKİLER ..........................................................................................................ix
KISALTMALAR .......................................................................................................xi
TABLOLAR LİSTESİ ............................................................................................xiii
ŞEKİLLER LİSTESİ................................................................................................xv
ÖZET .......................................................................................................................xvii
ÖZET ........................................................................................................................xix
GİRİŞ1
Problem
..................................................................................................................................Tanı
mı1
1.1.1 Koordinat dönüşümleri ................................................................................1
1.1.2 Mesafeler aracılığıyla bilinmeyen nokta koordinatlarının hesaplanması ....2
1.1.3 Noktaları belirleme ......................................................................................2
Çalışmanın Amacı2...............................................................................................
KOORDINAT
......................................................................................................................................SIS
TEMLERI3
Koordinat Ölçüm Makineleri (CMM).................................................................3
Datum4
Makine Koordinat Sistemleri (MCS) ..................................................................5
Parça Koordinat Sistemi (PCS)...........................................................................5
Parça Koordinat Sistemine Karşı Makine Koordinat
...................................................................................................................................Siste
mi7
Fikstür Koordinat Sistemi
..................................................................................................................................FCS
8
KOORDINAT
......................................................................................................................................DÖ
NÜŞÜMÜ9
Helmert Dönüşümü - Matematiksel
..................................................................................................................................Mod
el9
3.1.1 Doğrusallaştırma rotasyon matrisi .............................................................10
3.1.2 Ölçek matrisini doğrusallaştırma ...............................................................11
3.1.3 Bursa-Wolfs model matrisinin doğrusallaştırılması ..................................11
3.1.4 Dönüşüm parametrelerinin tahmin edilmesi ..............................................13
3.1.5 Doğruluk tahmini .......................................................................................13
Helmert Dönüşümü - Parametrelerin Hesaplanması Kara Kedi
................................................................................................................................Kodu
14

ix
Helmert Dönüşümü - Koordinat Hesaplama
................................................................................................................................Kodu
15
Helmert Dönüşümü -
................................................................................................................................Örne
k16 Üzerinden Kodun Test Edilmesi ......................................................................
3.4.1 Black Cat kullanarak Helmert parametrelerini hesaplama ........................17
3.4.2 Black Cat kullanarak Helmert parametrelerini hesaplama ........................18
3.4.3 Yeni koordinatları hesaplamak için Helmert parametrelerini kullanma ....20
MESAFEYE DAYALI REZEKSIYON (ALAN RETRAKSIYONU) .............22
Giriş22
Matematiksel
.................................................................................................................................Mode
l23
Mesafe Tabanlı Rezeksiyon - Python
.................................................................................................................................Code
25
Mesafeye Dayalı Rezeksiyon -
.................................................................................................................................Örne
k26 Üzerinden Kodun Test Edilmesi ......................................................................
ÇIKIŞ NOKTALARI
....................................................................................................................................POZI
SYONLARI29
Kutupsal Koordinatlardan Yola
................................................................................................................................Çıkm
ak29
Kutupsal Koordinatlardan Yola Çıkma - Python
................................................................................................................................Code
30
Kutupsal Koordinatlardan Yola Çıkma - Kara Kedi
................................................................................................................................Örne
ği31
KARA KEDI
....................................................................................................................................UYGULAMA
SI33
Kara Kedi .........................................................................................................Nedir33
Ana Pencerenin ................................................................................................Kodu33
Kara Kedi Klasör ..............................................................................................İçindekiler34
SONUÇ35
REFERANSLAR.......................................................................................................36
EKLER.......................................................................................................................37
EK A: Helmert dönüşüm parametrelerini hesaplamak için python betiği 38 EK B:
Helmert parametrelerini kullanmak için python betiği ...........................................
43
EK C: Alan geri çekmeyi programlamak için Python kodu....................................47
EK D: Kara Kedi'de kullanılan Kodun belirlenmesi ...............................................49
EK E: Kara Kedi ana penceresinin kodu.................................................................51
ÖZGEÇMİŞ...............................................................................................................55

x
KISALTMALAR

CMM : Bilgisayar Kontrollü Makineler


CSV : Virgülle Ayrılmış Değerler
BT : Bilgisayar Tomografisi
FCS : FIKSTÜR KOORDINAT
SISTEMI Fikstür Koordinat Sistemi
MCS : Makine Koordinat Sistemi
MRI : Manyetik Rezonans
PCS Parça Koordinat Sistemi

xi
xii
TABLOLAR LİSTESİ

Sayf

a Tablo 3.1 : BAsys1 & BAsys2 koordinatları ..........................................................

17
Tablo 3.2 : "parametreler" dosya içeriği ....................................................................19
Tablo 3.3 : "Helmert Parameters Variance_Covariance" dosya içeriği.....................19
Tablo 3.4 : "Helmert Kullanımı" dosya içeriği. .........................................................20
Tablo 3.5 : "Helmert'ten sonra" dosya içeriği ............................................................21
Tablo 4.1 : "alan geri çekme" dosya içeriği...............................................................26
Tablo 4.2 : "Rezeksiyon sonucu" dosya içeriği .........................................................28
Tablo 4.3 : "Rezeksiyon Varyans Kovaryansı" dosya içeriği ....................................28
Tablo 5.1 : "stakeoutpoints" CSV dosya içeriği ........................................................31
Tablo 5.2 : "Stakeoutresult" dosya içeriği..................................................................32

xiii
xiv
ŞEKİLLER LİSTESİ

Sayfa

Koordinat ölçüm sistemleri (Sladek, 2016)..............................................4


Datum Nedir (Koordinat metrolojisine giriş, 2019).................................4
Çok projeksiyonlu 2D çizim (Koordinat Sistemlerine Giriş, 2018) 6......
3D parça Koordinat Sistemi (Koordinat Sistemlerine Giriş, 2018).
. .............................................................................................................................6
PCS, MCS ile ilişkili olarak gösterilmiştir (Koordinat Sistemlerine
Giriş, 2018). 7 .......................................................................................................
Şekil 3.1 : BA ve BB nesneleri...................................................................................16
Şekil 3.2 : Kara Kedi arayüzü - Parametrelerin Hesaplanması...................................18
Şekil 3.3 : SYS1 ve SYS2'ye göre BA nesnesi 1 .......................................................18
Şekil 3.4 : BB (sys1) ve BB (sys2) Kara Kedi Çizimi ...............................................20
Şekil 3.5 : Kara Kedi arayüzü - Yeni koordinatların hesaplanması............................21
Şekil 4.1 : Üç kürenin kesişimi (Bektas et la, 2018) ..................................................22
Şekil 4.2 : Kara Kedi arayüzü / mesafelere dayalı rezeksiyon ...................................27
Şekil 4.3 : Kara Kedi / bilinen ve hesaplanan nokta konumları .................................27
Şekil 5.1 : kutupsal koordinatlardan yola çıkma ( Rozsa, 2010)................................29
Şekil 5.2 : Kara Kedi komutayı ele geçiriyor .............................................................32

xv
xvi
ENDÜSTRİYEL ÖLÇÜMLERDE KOORDİNAT SİSTEMLERİ VE JEODEZİK
ÖLÇÜMLER

ÖZET

Tekne şasilerinin montajı, değirmenlerin döner şaft kurulumları ve hatta büyük


motorlar veya uçaklardaki deformasyonların ölçülmesi gibi birçok endüstriyel
uygulama ve kurulum faaliyeti, tüm bu tür işler milimetre altı gibi çok yüksek
doğruluk derecelerine sahip ölçüm ölçümlerine ihtiyaç duyar, bu kadar yüksek bir
doğruluk seviyesine ulaşmak için daha yüksek hassasiyete sahip cihazlara ve hatta
ölçüm tekniklerinde ve matematiksel hesaplamalarda farklı yaklaşımlara ihtiyacımız
vardır.

Endüstriyel Metroloji terimi (endüstriyel makinelerin ve bilimsel cihazların


konumlandırılması ve hizalanması için hassas ölçüm tekniklerinin kullanılması)
(Ogundare, 2016) bu bilim alanını tanımlamak için kullanılır. Yüksek hassasiyetli
ölçümlerde en önemli ihtiyaçlardan biri kullandığımız Koordinat Sistemleridir. Her
endüstriyel metroloji projesinin birden fazla koordinat sistemi vardır ve bu sistemler
ölçüm cihazlarıyla, monte edilen parçalarla ve hatta dışarıdaki sabit bir çerçeveyle
ilgili olabilir. Bu farklı koordinat sistemleri arasında esnek, kolay ve doğru bir
dönüşüm, endüstriyel metrolojinin gerektirdiği yüksek doğruluk standartlarına
ulaşmak için çok önemlidir. Bu tezde, Helmert 3D dönüşümünü kullanarak dönüşüm
parametrelerini hesaplamak ve bu parametreleri farklı koordinat sistemlerine göre
koordinatları hesaplamak için uygulamak için endüstriyel bir ölçüm programı
tanıtılacak, bunun yanı sıra bu uygulama, iyi bilinen koordinat noktalarına olan
göreceli mesafelerine bağlı olarak belirli bir noktanın koordinatlarını hesaplamak için
kullanılan bir alan rezeksiyonu seçeneği sunacaktır, bu seçenek, küçük yedek parça
boyutları veya görüş koşulları gibi birçok nedenden dolayı tipik rezeksiyon veya
kesişme yöntemlerinin mümkün olmadığı bazı endüstriyel uygulamalarda son derece
önemlidir. Ayrıca, noktaların ayarlanması için bir parametre listeleme seçeneği
(gözlem noktaları ve hedef noktalar arasındaki mesafe ve açılar gibi) dahil
edilecektir, bu seçenek yapay kol mekanik bölümünün programlanmasında yararlıdır,
bu nedenle mekanik kollardaki tüm ötelemelerin göreceli açısal ve mesafeye

xvii
çevrilmesi gerekir

xviii
ölçümler. Ve son olarak bu tezin her adımında tüm çalışmalar örnekler üzerinden
incelenecektir.

xix
ENDÜSTRİYEL ÖLÇEMLERDE KOORDİNAT SİSTEMLERİ VE
JEODEZİK ÖLÇMELER

ÖZET

Teknelerin şasesinin ve değirmenlerin döner şaft tesislerinin montajı, büyük


motorlarda veya uçaklarda deformasyonların ölçülmesi gibi birçok endüstriyel
uygulama ve kurulum faaliyetlerinde, tüm bu tür çalışmalarda, milimetre altı
doğrulukta diğer bir değişle çok yüksek hassasiyette yüzey ölçümleri yapılması
gerekmektedir. Yüksek doğruluk seviyesine ulaşmak için, ölçüm teknikleri ve
matematiksel hesaplamalarda daha yüksek hassasiyet ve hatta farklı yaklaşımlara
sahip cihazlara ihtiyaç duyulmaktadır.

"Endüstriyel makine ve bilimsel aparatların konumlandırılması, aynı zamanda


hizalanması için hassas ölçme tekniklerinin kullanılması" anlamına gelen Endüstriyel
Metroloji terimi, bu bilim alanını tanımlamak için kullanılmaktadır. Yüksek
hassasiyetli ölçümlerde en önemli ihtiyaçlardan biri kullanılan Koordinat
Sistemleri'dir. Her endüstriyel metroloji projesinde, bu sistemler ölçüm cihazları veya
monte edilen parçalarla ve hatta dış sabit bir çerçeveyle ilgili olabilecek birden fazla
koordinat sistemine sahiptir. Bu farklı koordinat sistemleri arasında esnek, kolay ve
doğru bir dönüşüm, Endüstriyel metrolojinin gerektirdiği yüksek doğruluk
standartlarını elde etmek için çok önemlidir.

Bu çalışmada, bilirkişinin endüstriyel metrolojide karşılaştığı bazı temel konular ve


matematiksel çözüm tartışılmaktadır. Bu çözümleri uygulamak için Python
programlama dili kullanılarak bir yazılım geliştirilmiş ve son olarak tüm çalışmalar
bir
örnek uygulama kapsamında incelenmiştir.

Endüstriyel metrolojide kullanılan farklı koordinat sistemleri olması nedeniyle, iki


sistem arasındaki dönüşüm parametrelerini mümkün olan en yüksek serbestlik
derecesinde istenilen durumlarda hesaplayabilmek için rutin çalışan bir dönüşüm
programına ihtiyaç vardır. Bu parametreler herhangi bir koordinat sisteminde belirli
ihtiyaçlar doğrultusunda koordinatların hesaplanmasını sağlar. Bu amaca uygun
olarak
dönüşümde geometrik doğruluğu koruyan 7 parametreli Helmert dönüşümü

xx
kullanılması tercih edilmiştir. Bu nedenle, bu çalışmada Helmert dönüşümünün
matematiksel modeli, dönüşüm matrislerinin nasıl hazırlanacağı ve sonuç olarak elde
edilen dönüşüm parametreleri için doğruluk tahmini konularında bilgiler vererek
başlanmıştır. Bundan sonra, referans ve hedef koordinat sistemleri arasındaki
dönüşümü gerçekleştirmek için bu parametreler referans olarak kullanılacaktır.

Bir sonraki adım, bilinmeyen koordinatlar, sadece açılar olmadan bilinen noktalara
olan mesafeleri ölçerek hesaplamak için kullanılabilecek kenar ölçmeleriyle geriden
kestirme tekniğini tanıtmak biçiminde yapılandırılmıştır. Bu, açı ölçmesinin
yapılamadığı durumlarda, endüstriyel parçaların ölçülmesinde ve montajında çok
önemlidir. Endüstriyel ölçmeler sırasında bazı durumlarda ölçülen parçaların ya da
objelerin boyutları ya da görünürlükleri nedeniyle ölçülmesi mümkün olmayabilir, bu
durumda hassas lazer metreler kullanılarak koordinatları iyi bilinen noktalardan
yararlanarak çözüm üretmek mümkün olabilir. Bu aşmadan sonra, tezin ilerleyen
bölümünde koordinatları hesaplamak için, nispeten kolay bir görev olan ancak
endüstri uygulamaları için çok büyük önem arz eden noktaların işaretlenmesi konusu
tartışılmıştır. Çünkü çoğu durumda nokta koordinatlarının bir dizi çeviri ve açıyla
yorumlanması gerekebilir; yapay kolların kinematik hareketlerinin programlanması
buna bir örnek olarak düşünülebilir.

Nokta koordinatlarını belirlemek, sahada istenilen noktaların fiziksel konumlarını


göstermek için ölçmelerin yapılması gerekebilir. Bu ölçmeler genellikle referans
noktası - istasyon noktası ile hedef nokta arasındaki mesafe ölçmeleri, (yatay veya
eğimli) yatay ve düşey açılardır.

Bu çalışmanın nihai amacı, endüstri ölçmeleri yapan mühendislere bilgisayar


ortamında 3 Boyutlu çalışabilecekleri ve yaptıkları ölçmelerin doğruluklarını
görebilecekleri yardımcı bir yazılım aracı sağlamaktır.

Bu kapsamda geliştirilen ve "BLACK CAT" olarak isimlendirilen yazılım tezin


ilerleyen bölümünde tanıtılmakta ve kullanılan matematiksel altyapı aktarılmaktadır.

Black Cat yazılımı, bu tez için Python dilinde geliştirilen açık kaynaklı bir bilgisayar
programıdır, açık kaynak kodlu bir uygulama olduğundan, istenildiğinde metroloji ve
endüstriyel tesislerle ilgili diğer birçok sorunun çözümü için geliştirilebilir. Bu
yazılım aracılığıyla yapılan ölçmeler sahada yapılan diğer ölçmelerle
ilişkilendirilebilir. Black Cat yazılımının yapısı, bölüm 3.4.5'te verilmiştir. Bu bölüm

xxi
incelendiğinde endüstriyel ölçmenin dört temel problemini çözmek için oluşturulan 4
ana rutin bir arayüz ile birleştirilerek bu rutinlerin etkileşimli olarak kullanımı
sağlanmaya çalışılmıştır. Kara Kedi yazılımını kullanabilmek için, bilgisayarda
Python
3.6 veya daha üstü yüklü olmalı özellikle "numpy", "math", "mpl_toolkits.mplot3d",
"matplotlib.pyplot", " matplotlib", "pyQt5", "subprocess" kütüphaneleri kullanıma
hazır olmalıdır. Bu kütüphaneler Python yazılımının yüklenmesinden sonra CMD

penceresinden (pip install komutu) kullanılarak yüklenebilir.

Balck Cat yazılımı bir zip dosyası kullanılarak bilgisayara yüklenebilir ve doğrudan
kullanılabilir. Yazılmaya ilişkin kodalar tezde ayrıntılı olarak verilmiştir.

Bu tez kapsamında Geomatik Mühendislerinin endüstriyel ölçmeler alanında


karşılaşabileceği bazı temel sorunlara çözüm getirilmiştir. Metroloji'deki farklı
koordinat sistemleri ve sektördeki uygulamalar Geomatik Mühendisliği
faaliyetlerinin
önemli bir parçasıdır. Her zaman doğru koordinat sistemlerini sahada oluştutmak ve
bunları birbiriyle doğru dönüşüm parametreleriyle ilişkilendirebilmek gerekir. Bu
Bu nedenle Black Cat yazılımında bulunan mesafeye dayalı kestirme yeteneği
uygulaması
alanında oldukça yararlı bir araç olarak kullanılabilir. Hassas lazer metre ölçerler dar
alanlarda ve ölçülecek parçaların zor görünürlüğünün zor olduğu durumlarda oldukça
yararlı olabilir. Bu tür ölçmelere gereksinimi endüstriyel ölçme ve makine
kurulumlarında çok yaygın olmakla birlikte gerektiğinde farklı mühendislik

problemlerin çözümünde de kullanılabilir.

Ayrıca belirtmek gerekir ki Black Cat yazılımı açık kaynaklı ve kullanımı ve


geliştirilmesi kolay bir dilde (Python Dili) geliştirilmiş, esnek kullanımının
sağlanabilmesi için ayrı komut dosyaları biçiminde yazılmıştır. Bu yüzden
gerekirse bu komut dosyalarını başka herhangi bir yazılıma entegre etmek kolay
olabilecektir.

Kara Kedi, nesne noktalarını çizme ve bunları birbirine bağlama yeteneğine sahiptir,
aralarındaki topolojik ilişkileri tanımlayarak, bu ilişkilerle, kaynak nokta ile
bağlanacak hedef noktaları seçebilir, bu ilişkilerin CSV giriş dosyaları aracılığıyla
düzenlemesine olanak verir. Tezde detaylı olarak anlatıldığı gibi, nesne koordinatları
birincil ve hedef koordinat sistemlerine olarak ele alınmaktadır.

Tüm Black Cat sonuçları, doğruluk tahmini dosyaları ile birlikte CSV formatında
dosyalara kaydedilir. Doğruluklar ölçümlerin ve hesaplamaların kalitesini

xxii
değerlendirmek için önemlidir. Bu nedenle sonuçlar her zaman ölçme ve
değerlendirme sonrası kontrol edilmelidir.

Black Cat, istendiğinde endüstriyel araştırma ihtiyaçlarının gerektirdiği diğer


görevleri de yerine getirmek için daha da geliştirilebilir. Temel geliştirmelerden biri,
CSV dosyalarına ihtiyaç duymadan noktaları kolayca CAD ortamına aktararak
AutoCAD ve benzeri yazılımlarda kullanılmasını sağlamak olabilir. Daha sonraki
geliştirmelerde doğrudan Total Station, Lazer Tracker vb. ölçme aletlerine
bağlanabilen, bu aletlerle konuşabilen, bu aletlerin standart veri yapıları ile
kullanılabilen versiyonlarının oluşturulması mümkündür. Böylece Black Cat
endüstriyel ölçmelerde gerçek zamanlı uygulamalara olanak veren bir yazılıma
dönüştürülebilir

xxiii
GİRİŞ

Ürün performansının iyileştirilmesi ve bilginin sınırlarının genişletilmesi, endüstriyel


ölçümler bilimi olan koordinat metrolojisinin geliştirilmesiyle bağlantılıdır.
Koordinat metrolojisi, koordinat ölçüm sistemlerinin kullanımıyla ölçümlerin ve üç
boyutlu geometrik nesne görüntülemenin gerçekleştirilmesi için bilimsel bir temel
sağlar (Sladek, 2016).

Endüstriyel ölçme ölçümlerinde kullanılan temel olarak üç tür koordinat sistemi


vardır; bu sistemler ya ölçüm makinelerine bağlıdır, ya monte edilen parçaya bağlıdır
ya da ölçülen cisimlerin dışına sabitlenmiştir.

Bu farklı koordinat sistemleri, total station - lazer takip cihazları veya bilgisayar
kontrollü CMM makineleri gibi insanlar tarafından çalıştırılabilen farklı koordinat
ölçüm makineleri ile bağlantılı olarak kullanılır.

Tüm bu sürecin nihai amacı, endüstrinin çok hassas ölçümler, 3D modelleme ve


Robotik kinematik programlama ihtiyaçlarına hizmet etmektir.

Problem Tanımı

Bu çalışmada, sörveyörün endüstriyel metrolojide karşılaştığı bazı ana sorunları


tartışacağız ve bunun matematiksel çözümünü tartışacağız ve bu çözümleri
uygulamak için Python programlama dilini kullanarak bir yazılım yazacağız ve son
olarak çalışmamızı bir vaka çalışmasıyla inceleyeceğiz.

Öncelikle bu çalışmada ele alacağımız konuları sıralayalım

1.1.1 Koordinat dönüşümleri

Endüstriyel metrolojide kullanılan farklı koordinat sistemleri nedeniyle, her iki


sistem arasında mümkün olan en yüksek serbestlik derecesine sahip dönüşüm
parametrelerini hesaplamak için sürekli bir ihtiyaç vardır, bu parametreler herhangi
bir referans sistemine göre ihtiyaç duyulduğunda koordinatları hesaplamamıza izin
verir, bunu yapmak için 7 serbestlik dereceli Helmert dönüşümünü kullanacağız.

1
1.1.2 Mesafeler aracılığıyla bilinmeyen nokta koordinatlarının hesaplanması

Uzay geri çekme tekniği, açılar olmadan sadece bilinen noktalara olan mesafeleri
ölçerek bilinmeyen koordinatları hesaplamak için kullanılır, bu endüstriyel parçaların
kurulumunda veya montajında çok önemlidir, çünkü açı ölçümü her zaman
yapılamaz ve hatta Total Station ve diğer mesafe ve açı ölçümlerine dayalı cihazlar
boyut veya görünürlük gibi birçok nedenden dolayı kullanılamaz, bu nedenle bu
durumlarda istenen noktayı iyi bilinen noktalar kümesine bağlamak için yüksek
hassasiyetli lazer metre kullanmak koordinatları hesaplamak için yeterlidir.

1.1.3 Noktaları belirleme

Noktaları belirlemek nispeten kolay bir iş olsa da endüstri mühendisliğinde çok


önemli bir görevdir çünkü birçok durumda nokta koordinatlarının listesini ya onları
belirlemek için ya da hatta bu listeyi yapay kol kinematik hareket programlamasında
kullanmak için bir dizi öteleme ve açıya yorumlamamız gerekir.

Çalışmanın Amacı

Çalışmanın amacı, endüstriyel ölçüm mühendislerine söz konusu jeomatik sorunları


çözmelerine yardımcı olabilecek, 3D görüntüleme ve hata tahmini olanaklarına sahip
bir yazılım aracı sağlamaktır.

Bu nedenle, BLACK CAT yazılımını tanıtacağız ve içindeki programlanmış


görevlerin matematiksel temelini tartışacağız ve bu programın endüstriyel metroloji
mühendislerine verilen görevlerde nasıl yardımcı olabileceğini görmek için örnekler
aracılığıyla yeteneklerini inceleyeceğiz.

2
KOORDINAT SISTEMLERI

Koordinat basitçe bir nokta, üç boyutlu uzayda sabit belirlenmiş bir konum olarak
tanımlanabilir. Karmaşık bir şeklin parametrelerini belirlemek için kullanılan bir dizi
nokta.

Bu bölümde Koordinat Ölçüm Makinelerine bir göz atacağız ve ardından endüstriyel


ölçümlerde kullanılan koordinat sistemlerinin türlerini tartışacağız.

Koordinat Ölçüm Makineleri (CMM)

Koordinat ölçüm cihazı (CMM), bir nesneyi kabul edilebilir bir doğruluk ve
tekrarlanabilirlik seviyesiyle belirlemek için bir dizi nokta toplamak için kullanılan
bir cihazdır.

(Sladek, 2016)'ya göre, koordinat ölçüm ve görüntüleme sistemleri şunları içerebilir:

- lazer üçgenleme gerçekleştirme Sistemleri

- Fotogrametrik sistemler .

- Işın geri dönüş süresinin ölçümüne dayalı sistemler

- Manyetik rezonans sistemleri (MRI).

- Bilgisayarlı tomografi sistemleri (BT) .

Bu koordinat makine sistemleri sadece total istasyonlar, lazer takip cihazları ve lazer
tarayıcılardan ibaret olmayıp, geniş bir teknik çözüm ailesine sahiptir.

Şekil 2.1'de söz konusu koordinat ölçüm sistemleri gösterilmektedir. Bu şekil, çeşitli
uygulama alanları için teknik çözümleri göstermekte ve bu sistemlerin çoklu sensör
karakteri olan ortak özelliklerinin yanı sıra ölçülen nesnelerin farklı boyutlarını
göstermektedir (Sladek, 2016).

3
Koordinat ölçüm sistemleri (Sladek, 2016).

Datum

Metrolojide referans noktası, belirli bir köşe, konumlandırılmış yüzeyler veya


yuvalar gibi bir iş parçası üzerindeki bir özelliktir. Belirli özellikler arasındaki
mesafeyi hesaplamak için bir iş parçasını ölçeriz (Introduction to Coordinate
Metrology, 2019).

Datum Nedir (Koordinat metrolojisine giriş, 2019).

4
Makine Koordinat Sistemleri (MCS)

MCS, Ana Konuma göre CMM üzerindeki XYZ konumudur. MCS'nin eksenleri
CMM'in hareketine karşılıklı olarak paraleldir. Çoğu manuel tanımlı CMM'in bir ana
konumu yoktur, bu nedenle ana konumları CMM'in sistemin başlangıç noktasındaki
konumudur. Bazı manuel CMM'ler, operatörün CMM'i her seferinde bir eksen
boyunca referans işaretleri üzerinde manuel olarak hareket ettirmesini gerektiren bir
ana konum sunar. Bilgisayar Kontrollü Koordinat Ölçüm Makineleri DCC sistemi
kullanıldığında, başlatma prosedürü CMM'i "Home" etmenizi gerektirir, bu da ana
konumu atamanıza ve tekrarlanabilir bir XYZ sıfır noktası oluşturmanıza yol açar.
Bu nedenle MCS koordinat sistemleri, denetlenmesi gereken endüstriyel parça için
iyi ve doğru ölçüm değerleri elde etmek için uygun bir koordinat sistemi değildir
(Koordinat Sistemlerine Giriş, 2018).

Parça Koordinat Sistemi (PCS)

PCS, parça Oryantasyonu, Hizalama ve Orijinin üzerine inşa edildiği temeldir.


PCS'ler, parça özellik konumlarının tanımlandığı referans sistemi çerçeveleridir.
normalde 3D çizim nesneleri 2D projeksiyonlarla temsil edilir. Her 2D izdüşümü
aynı hizalama eksenini ve referans noktasını paylaşarak 3D özelliklerin
oluşturulmasını sağlar. Günümüzde birçok popüler CAD aracı tarafından oluşturulan
bir 3D model kullanarak işlenmiş parçalar oluşturmak olağandır. Bu modeller,
makinistin parçayı oluşturması ve denetçinin nihai üretimi doğrulaması için gerekli
tüm bilgileri içerebilir. yine de, PCS hala 2D bir çizimden ölçülüyormuş gibi aynı
prosedürler tarafından ima edilir. Bu fikri daha iyi anlamak için Şekil 2.3'te
gösterilen çok projeksiyonlu parça incelenebilir.

Bu makine parçasını bir koordinat ölçüm makinesi CMM üzerinde ölçebilmek için
her tarafta problarla bir temas gereklidir. Planlama aşamasında, parçanın 3B
koordinat sistemini incelemek yararlı olacaktır. bu, olası bir yönden perspektif bir
çizim yaparak ve ardından 3B PCS'yi üst üste bindirerek yapılacaktır. Aşağıda, 3D
boyutlu PCS için olası bir görünüm olan Şekil 2.4 yer almaktadır (Koordinat
Sistemlerine Giriş, 2018).

5
Çok projeksiyonlu 2D çizim (Koordinat Sistemlerine Giriş,
2018).

3D parça Koordinat Sistemi (Koordinat Sistemlerine Giriş, 2018).

6
Parça Koordinat Sistemi Vs Makine Koordinat Sistemi

Makine parçalarının özellikleri datum referanslarına göre tanımlandığından, özellik


ölçümünden önce bu datumları yansıtan Parça Koordinat Sistemleri gereklidir.
Koordinat ölçüm makinelerinin, Makine Koordinat Sistemi (MCS) olarak
adlandırılan karşılıklı ortogonal hareket eksenleri sistemi olan kendilerine ait bir
koordinat sistemi olduğundan, ilk adım MCS içinde PCS oluşturmak olacaktır. CMM
içinde bir parça koordinat sistemi oluşturmanın bir yolu, nokta koordinat sistemini
Makine Koordinat Sistemi ile çakıştırmaktır. Bu yöntem, parçanın referans
noktasının yüzeylerinin parçanın hareket eksenlerine paralel olarak hizalanmasını ve
X, Y ve Z göstergelerinin değerinin referans noktasının yüzeylerine temas eden bir
kenar bulucu probla veya bir referans noktası deliğine oturtulmuş bir konik probla
sıfıra ayarlanmasını içerir. Makine Koordinat Sistemleri ve Parça Koordinat
Sistemleri çakışacak şekilde ayarlandıktan sonra, CMM'in ekranlarında bulunan tüm
boyutlar aynı zamanda Makine parçası üzerindeki özellik konumlarıdır (Koordinat
Sistemlerine Giriş, 2018).

PCS, MCS ile ilişkili olarak gösterilmiştir (Koordinat Sistemlerine Giriş,


2018).

7
Fikstür Koordinat Sistemi FCS

Bir FCS koordinat sistemi, parça denetim programları sırasında daha sonra yeniden
kullanılmak üzere güvenli bir şekilde kaydedilen ölçülen koordinat sistemi olarak
tanımlanır. Bir Fikstür Koordinat Sisteminin kullanılması, denetimlerin gerçekleştiği
Koordinat Ölçüm Makinelerinde tekrarlanabilir bir konum sağlar (Koordinat
Sistemlerine Giriş, 2018).

8
KOORDINAT DÖNÜŞÜMÜ

Metroloji ve endüstriyel ölçmede kullanılan daha önce bahsedilen farklı koordinat


sistemleri arasında hareket edebilmek için bir dönüşüm sistemi kurmalıyız, farklı
sistemler arasındaki dönüşümlerimizi gerçekleştirmek için yedi dönüşüm parametresi
ile Helmert dönüşümünün kullanımını inceleyeceğiz, Helmert Parametrelerini
hesaplamak için Python kodu geliştireceğiz ve daha sonra bu parametreleri yeni
koordinat sistemine göre koordinatı hesaplamak için kullanacağız, bunun yanında
doğruluğumuzu tahmin etmek için ölçülen ve hesaplanan koordinatlar arasındaki
varyansı ve ortak varyans matrisini hesaplayacağız ve son olarak sonuçlara bir göz
atmak için python içinde grafik kodu geliştireceğiz.

Bu tezin amacı için BLACK CAT yazılımı geliştirilmiştir, bu yazılım bu tezde


üzerinden geçeceğimiz tüm matematiksel görevleri yerine getirmemizi sağlayacaktır,
bu nedenle öncelikle matematiksel modeli, ardından denklemlerin kodlanmasını
inceleyeceğiz ve son olarak çalışmamızı bir örnek üzerinden inceleyeceğiz.

Helmert Dönüşümü - Matematiksel Model

𝑋𝑗 𝛿x 𝑋𝑗
[𝑌𝑗 ] = [𝛿𝑦] + 𝑆𝑅(𝜃𝑥 , 𝜃𝑦 , 𝜃𝑧 ) [𝑌𝑗 ] , 1≤ j ≤ n
𝑗
𝑍𝑎 𝛿𝑧 𝑍𝑗

(3.1)

Burada n, a ve b sistemlerinde koordinatları bilinen nokta sayısı; X, Y ve Z üç


boyutlu koordinatlar; δx, δy ve δz üç eksen boyunca üç öteleme parametresi; θx, θy ve θz,
sırasıyla X, Y ve Z eksenleri etrafında üç dönme parametresi; S ise bu sistemler
arasındaki ölçekleme faktörüdür (Kutoglu vd., 2002; Al Marzooqi vd., 2005; Fan,
2005; Andrei, 2006; Guo, 2007). Eşitlik 1'deki R matrisi şu şekilde yazılabilir,

9
𝑅 = 𝑅(𝜃𝑋). 𝑅(𝜃𝑌). 𝑅(𝜃𝑍)
𝑐𝑜𝑠 𝜃𝑍 𝑠𝑖𝑛 𝜃𝑍 0 𝑐𝑜𝑠 𝜃𝑌 0 - 𝑠𝑖𝑛𝜃𝑌 1 0 0
= [- 𝑠𝑖𝑛 𝜃𝑍 𝑐𝑜𝑠 𝜃𝑍 0] [ 0 1 0 ] [0 𝑐𝑜𝑠 𝜃𝑋 𝑠𝑖𝑛 𝜃
0 0 1 𝑠𝑖𝑛 𝜃𝑌 0 𝑐𝑜𝑠 𝜃𝑌 ]𝑋
0 - 𝑠𝑖𝑛 𝜃𝑋 𝑐𝑜𝑠 𝜃𝑋
𝑐𝑜𝑠 𝜃𝑌 𝑐𝑜𝑠 𝜃𝑍 𝑐𝑜𝑠 𝜃𝑋 𝑠𝑖𝑛 𝜃𝑍 + 𝑠𝑖𝑛 𝜃𝑋 𝑠𝑖𝑛 𝜃𝑌 𝑐𝑜𝑠 𝜃𝑍 𝑠𝑖𝑛 𝜃𝑋 𝑠𝑖𝑛 𝜃𝑍 - 𝑐𝑜𝑠 𝜃𝑋 𝑠𝑖𝑛 𝜃𝑌 𝑐𝑜𝑠 𝜃𝑍
= [- 𝑐𝑜𝑠 𝜃𝑌 𝑠𝑖𝑛 𝜃 𝑍 𝑐𝑜𝑠 𝜃𝑋 𝑐𝑜𝑠 𝜃 𝑍 - 𝑠𝑖𝑛 𝜃𝑋 𝑠𝑖𝑛 𝜃𝑌 𝑠𝑖𝑛 𝜃 𝑠𝑖𝑛 𝜃𝑍 𝑋 𝑐𝑜𝑠 𝜃𝑍 + 𝑐𝑜𝑠 𝜃 𝑠𝑖𝑛 𝜃𝑋𝑌 𝑠𝑖𝑛
𝜃 ]𝑍
𝑠𝑖𝑛 𝜃𝑌 - 𝑠𝑖𝑛 𝜃𝑋 𝑐𝑜𝑠 𝜃𝑌 𝑐𝑜𝑠 𝜃𝑋 𝑐𝑜𝑠 𝜃𝑌

(3.2)

Helmert dönüşümü çok boyutlu nokta verilerini içerdiğinden, hesaplamalar


doğrusallaştırma matris sistemi gerektirir, buna göre (Islam, 2014; Guo
,2007) Eşitlik 1'i doğrusal form olarak şu şekilde yazabiliriz:

𝑎 𝑋= 𝛿𝑋 + 𝑆𝑅𝑋𝑏

(3.3)

3.1.1 Doğrusallaştırma rotasyon matrisi


0
,𝜃 𝜃0 , 𝜃0 = 0 ile başlıyoruz ve başlangıç rotasyon matrisini 𝑅0 uygulayarak hesaplıyoruz
𝑥 𝑦 𝑧

doğrudan yöntem aşağıdaki gibidir (Islam, 2007; Fan, 2005)


𝑟0 𝑟0 𝑟0
11 0 012 13
𝑅0 = [𝑟 𝑟 𝑟 0
]
21 22 23
𝑟0 𝑟0 𝑟0
31 32 33

(3.4)

Burada 𝑟𝑖𝑗 (𝑖, 𝑗 = 1,2,3) 𝑖𝑛 𝑅 𝑚𝑎𝑡𝑟𝑖𝑥 𝑎𝑟𝑒 𝑓𝑢𝑛𝑐𝑡𝑖𝑜𝑛 𝑜𝑓 𝜃𝑥 , 𝜃𝑥 𝑎𝑛𝑑 𝜃𝑥 .

Yaklaşık rotasyonlar şu şekilde düzeltilebilir:

𝜃 = 𝜃𝑥0 + 𝛿𝜃𝑥
𝑥

{𝜃𝑦 = 𝜃𝑦0 + 𝛿𝜃𝑦 }


𝑧𝜃 = 𝜃 + 𝛿𝜃
0
𝑧 𝑧

(3.5)

Burada 𝛿𝜃𝑥 , 𝛿𝜃𝑦 𝑎𝑛𝑑 𝛿𝜃𝑧 karşılık gelen düzeltmelerdir.

𝑟𝑖𝑗 = (𝜃𝑥 , 𝜃 , 𝜃𝑦𝑧 ) = 𝑟𝑖𝑗 (𝜃


𝑥
0
+ 𝛿𝜃 ;𝑦𝜃 + 𝛿𝜃𝑥0𝑧𝑦 ; 𝜃0 + 𝛿𝜃 )𝑧

(3.6)

≈ 𝑟𝑖𝑗 (𝜃 ; 𝜃00 ; 𝜃0 ) + 𝛿𝜃 + 𝛿𝑟𝑖𝑗 𝛿𝜃 + 𝛿𝑟𝑖𝑗 𝛿𝜃


𝛿𝑟𝑖𝑗

𝑥 𝑦 𝑧
𝛿𝜃𝑥 𝑥 𝛿𝜃𝑦 𝑦 𝛿𝜃𝑧 𝑧
10
= 𝑟0𝑖𝑗 + 𝑒𝑖𝑗 𝛿𝜃𝑥 + 𝑓 𝛿𝜃𝑖𝑗𝑦 + 𝑔 𝛿𝜃𝑖𝑗𝑧

Burada 𝑒𝑖𝑗 , 𝑓𝑖𝑗 𝑎𝑛𝑑 𝑔𝑖𝑗 𝑖𝑠 3 × 3 𝑚𝑎𝑡𝑟𝑖𝑥 𝑎𝑛𝑑


0 -𝑟0 𝑟0
𝛿𝑟𝑖𝑗 13 12 𝛿𝑟𝑖𝑗
𝑒𝑖𝑗 = =0 [0 -𝑟0 ] , 𝑓𝑖𝑗 =
𝑟
𝛿𝜃𝑥 23 22 𝛿𝜃𝑦
0 -𝑟0 -𝑟0
33 32
- sin 𝜃0 cos 𝜃0 -𝑟0 𝑐𝑜𝑠 𝜃0 -𝑟0 𝑐𝑜𝑠 𝜃0
𝑦 𝑧 32 𝑦 33 𝑧
= [ sin 𝜃0 sin 𝜃0 𝑟0 𝑠𝑖𝑛 𝜃 𝑟0 0
𝑠𝑖𝑛 𝜃 ]0
𝑦 𝑧 32 𝑦 33 𝑧
𝑐𝑜𝑠 𝜃0 sin 𝜃0 sin 𝜃0 - cos 𝜃0 sin 𝜃0
𝑦 𝑥 𝑦 𝑥 𝑦

𝑟0 𝑟0 𝑟0
12 22 23
Ve 𝑗𝑖𝑗 =
𝛿𝑟𝑖𝑗
= [-𝑟 -𝑟0 0
-𝑟0 ]
𝛿𝜃𝑧 11 12 13
0 0 0
Eşitlik 6 doğrusal form olarak
yazılabilir:

𝑅 = 𝑅 (𝜃𝑥 , 𝜃𝑦 , 𝜃𝑧 ) = 𝑅0 + 𝐸𝛿𝜃𝑥 + 𝐹𝛿𝜃𝑦 +


𝐺𝛿𝜃𝑧
(3.7)

3.1.2 Ölçek matrisini doğrusallaştırma

Tek bir ölçek faktörü için, doğrusallaştırılmış ölçek matrisi olan S'yi aşağıdaki gibi

yazabiliriz S = S0 +δs

(3.8)

Burada S0 1 değeri ile başlatılır ve δs düzeltmedir (Islam, 2007; Andrei, 2006; Fan,
2005). δs genellikle milyonda parça (ppm) olarak yazılır. Ancak bunu milyarda parça
olarak da yazabiliriz (Altamimi ve diğerleri, 2011).

3.1.3 Bursa-Wolfs model matrisinin doğrusallaştırılması

Denklem (3.1), tek ölçek faktörü durumunda 3.3'e 3.7 ve 3.8 eklenerek aşağıdaki gibi
doğrusallaştırılabilir (Islam, 2007)

𝑏 𝑋= 𝛿𝑋 + (𝑆0 + 𝛿𝑠 )(𝑅0 + 𝐸𝛿𝜃𝑥 + 𝐹𝛿𝜃𝑦 + 𝐺𝛿𝜃𝑧 )𝑋𝑏

(3.9)

11
≈ 𝛿𝑋 + (𝑅0 𝑆0 + 𝑅 𝛿0𝑠 + 𝐸𝛿𝜃𝑥 𝑆0 + 𝐹𝛿𝜃 𝑆𝑦0 + 𝐺𝛿𝜃 𝑆𝑧0

3.9 şu şekilde
basitleştirilebilir
Lj (γ×γ) = [l1; l2; l3] = Aj (γ*7) δX(7×γ)

Lj (γ×γ) = Xa - R0 S0 Xb

(3.10)

1 0 0 𝑎14 𝑎15 𝑎16 𝑎17


Aj (γ×γ) = [0 1 0 𝑎24 𝑎25 𝑎26 𝑎27]
0 0 1 𝑎34 𝑎35 𝑎36 𝑎37

δX(7×γ) = [δx; δy; δz; δs; δθx; δθy; δθz]

Gözlem vektörünün ve A matrisinin elemanları aşağıdaki gibi elde edilebilir

1𝑙 = 𝑋𝑎 - 𝑆0 (𝑟0 𝑋𝑏 + 𝑟0 𝑌𝑏 + 𝑟0 𝑍 )𝑏
𝑗 11 𝑗 12 13 𝑗
2𝑙 = 𝑌 - 𝑆 (𝑟 𝑋 + 𝑟 𝑌 + 𝑟 𝑍 )
𝑎 0 0 𝑏 0 𝑏 0 𝑏
𝑗 21 𝑗 22 23 𝑗
3𝑙 = 𝑍 - 𝑆 (𝑟 𝑋 + 𝑟 𝑌 + 𝑟 𝑍 )
𝑎 0 0 𝑏 0 𝑏 0 𝑏
𝑗 31 𝑗 32 33 𝑗
𝑎14 = 𝑟0 𝑋𝑏 + 𝑟0 𝑌𝑏 + 𝑟0 𝑍𝑏
11 𝑗 12 13 𝑗
𝑎24 = 𝑟0 𝑋𝑏 + 𝑟0 𝑌𝑏 + 𝑟0 𝑍𝑏
21 𝑗 22 23 𝑗
𝑎34 = 𝑟0 𝑋𝑏 + 𝑟0 𝑌𝑏 + 𝑟0 𝑍𝑏
31 𝑗 32 33 𝑗
𝑎15 = 𝑆0 (-𝑟0 𝑌𝑏 + 𝑟0 𝑍 )𝑏
13 𝑗 12 𝑗
𝑎25 = 𝑆0 (-𝑟0 𝑌𝑏 + 𝑟0 𝑍 )𝑏
23 𝑗 22 𝑗
𝑎 = -𝑆 𝑐𝑜𝑠𝜃 (𝑠𝑖𝑛𝜃 𝑋 + 𝑟0 𝑌𝑏 + 𝑟0 𝑍 )𝑗
0 0 0 𝑏
16 𝑍 𝑋 32 33 𝑏
𝑎 = 𝑆 𝑠𝑖𝑛𝜃 (𝑠𝑖𝑛𝜃 𝑋 + 𝑟 𝑌 + 𝑟0 𝑍𝑗
0 0 0 𝑏 0 𝑏
26 𝑍 𝑌 32 33 𝑏
𝑎36 = 𝑆 (𝑐𝑜𝑠𝜃 𝑋 + 𝑠𝑖𝑛𝜃 𝑠𝑖𝑛𝜃 𝑌 - 𝑐𝑜𝑠𝜃0 𝑐𝑜𝑠𝜃0 𝑍𝑗
0 0 𝑏 0 0 𝑏
𝑦𝑗 𝑋 𝑌 𝑋 𝑌 𝑏
𝑎 = 𝑆 (𝑟 𝑋 + 𝑟 𝑌 + 𝑟 𝑍 )
0 0 𝑏 0 𝑏 0 𝑗
17 21 22 23 𝑏
𝑎 = - 𝑆 (𝑟 𝑋 + 𝑟 𝑌 + 𝑟0 𝑍 )𝑗
0 0 𝑏 0 𝑏
27 11 12 13 𝑏

𝑎37 = 0

12
3.1.4 Dönüşüm parametrelerinin tahmin edilmesi

Daha önce 3.9 veya 3.10'dan hesaplanan dönüşüm parametreleri hatasız değildir,
ancak en küçük kareler tahmini uygulanarak düzeltilebilirler (Islam, 2007; Fan,
2005)

𝛿𝑋̂ = (𝐴𝑇 𝐶−1 𝐴) 𝐴−1𝑇 𝐶−1 𝐿

(3.11)

Burada 𝛿 𝑋 ̂ , δX vektöründen düzeltilir ve C = I. Eş.10'dan aşağıdaki gibi yedi


dönüşüm parametresi elde ederiz

𝛿 , 𝛿𝑦 , 𝛿𝑧 = 𝛿𝑋̂( 1,2,3)
𝑥

𝑆̂ = 𝑆0 + 𝛿𝑆̂ = 𝛿𝑋̂( 4)
𝜃̂𝑥
= 𝜃0𝑥 +𝛿
𝜃 𝑥 = 𝛿𝑋̂( 5)
𝜃̂𝑦
= 𝜃0𝑦 +𝛿
𝜃 𝑦 = 𝛿𝑋̂( 6)
𝜃̂𝑧 = 𝜃 +𝛿
0
𝜃 = 𝛿𝑋̂( 7)
𝑧 𝑧

(3.12)

3.1.5 Doğruluk tahmini

En küçük kareler tahminine dayalı olarak dönüşüm parametrelerini hesapladık. Bu


işlem sonucunda bir kalıntı oluşacaktır. Bu artık (3.10) veya (3.11) kullanılarak şu
şekilde tahmin edilebilir (Islam, 2007)

𝜺 = 𝑳 - 𝑨𝜹𝑿̂

Burada 𝜹 𝑿 ̂ , δX ile değiştirilir. Dönüşüm parametrelerinin varyans-kovaryans


matrisi (VCm), gözlem sayısı ve parametre sayısı artırılarak minimize edilebilen
varyans faktörlerinin (𝜎)2̂ posteriori hata tahminine dayalı olarak hesaplanabilir. Yani,
0
şu şekilde yazabiliriz

𝒎 𝑽𝑪= 𝜎̂2 ( 𝐴𝑇 𝐶−1 𝐴)−1


0
𝜎̂2
Burada =
(𝗌𝑇𝐶-1𝗌
,O gözlem parametre sayısı, j gözlem sayısıdır.
0 p
𝑂𝑝𝑗-𝑃𝑛

sayısı ve Pn tahmin edilen parametrelerin dönüşüm sayısıdır.

13
Helmert Dönüşümü - Parametrelerin Hesaplanması Kara Kedi Kodu

Black Cat, bu tez için gerekli görevleri yerine getirmek için geliştirilmiş bir
bilgisayar uygulamasıdır, Bu bölümde, dönüşüm parametrelerini doğruluk
tahminleriyle birlikte hesaplamak için hazırlanan kodu tanıtacağız, bu kod python
dilinde yazılmış ve Black Cat uygulamasında kullanılmıştır.

1. import numpy as np
2. matematiği içe aktarın
3. from mpl_toolkits.mplot3d import axes3d
4. import matplotlib.pyplot as plt
5. from matplotlib import style
6.
7. veri = np.loadtxt('helmert.csv', delimiter=',', skiprows=1, usecols=(0, 1, 2,
3, 4, 5, 6))
8. VERİ = np.array(veri)
9. say = (np.size(DATA, 0)) * 3 # nokta sayısı * 3 for x,y,z
10.
11. p = 206265 # radyandan yay saniyesine
12. s1 = 1
13. A1 = 0
14. A2 = 0
15. A3 = 0
16.
17. c1 = np.eye(count, count)
18. c = np.linalg.inv(c1)
19. del_S = 1
20. del_A1 = 1
21. del_A2 = 1
22. del_A3 = 1
23.

# kodun tamamı Ek A'da yer almaktadır

14
Helmert Dönüşümü - Koordinat Hesaplama Kodu

Önceki bölümde dönüşüm parametreleri kodunu hazırladıktan sonra, şimdi bu


parametreler dönüştürülmüş koordinatların hesaplanmasında kullanılabilir. Kara
Kedi uygulamasında kullanılan kod aşağıdaki gibidir

1. import numpy as np
2. import math
3. from mpl_toolkits.mplot3d import axes3d
4. import matplotlib.pyplot as plt
5. from matplotlib import style
6. p = 206265
7.
8. veri = np.loadtxt('using helmert.csv', delimiter=',', usecols=(1,2,3),skipr
ows=1)
9. id = np.loadtxt('using helmert.csv', delimiter=',', usecols=(0),skiprows=1)

10. parameters = np.loadtxt('parameters.csv', delimiter=',', skiprows=1)


11. VERİ = np.array(veri)
12. ID = np.array(id,ndmin=2) # 2 boyutlu matris
13. PARAMETRELER = np.array(parametreler)
14. count = np.size(DATA,0)
15. print(count)
16.
17.
18. X0 = PARAMETRELER[0]
19. Y0 = PARAMETRELER[1]
20. Z0 = PARAMETRELER[2]
21. s1 = 1+PARAMETRELER[3]*10**-6
22. A1 = PARAMETRELER[4] # Radyan cinsinden açılar
23. A2 = PARAMETRELER[5]
24. A3 = PARAMETRELER[6]
25.
26. R = np.matrix([[np.cos(A2) * np.cos(A3), np.cos(A1) * np.sin(A3) + np.sin(A
1) * np.sin(A2) * n p . c o s ( A3),
27. np.sin(A1) * np.sin(A3) - np.cos(A1) * np.sin(A2) * np.cos(A
3)],
28. [-
np.cos(A2) * np.sin(A3), np.cos(A1) * np.cos(A3) - np.sin(A1) * np.sin(A2)
* np.sin(A3),
29. np.sin(A1) * np.cos(A3) + np.cos(A1) * np.sin(A2) * np.sin(A
3)],
30. [np.sin(A2), -
np.sin(A1) * n p . c o s ( A2), n p . c o s ( A1) * n p . c o s ( A2)])
31.
32.
33. XYZi = s1*R.dot(np.transpose(DATA))
34. #print(np.transpose(DATA))
35. XYZi = np.transpose(XYZi)
36.
37. #print(np.shape(XYZi))
38. for i in range (0,count):
39. XYZi[i,0] = XYZi [i,0] + X0
40. XYZi[i, 1] = XYZi[i, 1] + Y0
41. XYZi[i, 2] = XYZi[i, 2] + Z0

# kodun tamamı Ek B'de yer almaktadır

15
Helmert Dönüşümü - Örnek Üzerinden Kodun Test Edilmesi

BA ve BB olmak üzere 2 nesnemiz var, ilk nesnenin koordinatları (BA) 2 koordinat


sistemine (SYS1, SYS2) göre bilinirken, ikinci nesne (BB) sadece (SYS1)'e göre
ölçülüyor.

BA nesnesinin bilinen koordinatlarına bağlı olarak SYS1 ve SYS2 arasındaki


koordinat dönüşüm parametrelerini hesaplamak için Helmert dönüşüm yöntemini
uygulayacağız ve daha sonra bu parametreleri SYS2'ye göre BB'nin koordinatlarını
hesaplamak için kullanacağız.

Şekil 3.1 : BA ve BB nesneleri

16
3.4.1 Black Cat kullanarak Helmert parametrelerini hesaplama

Öncelikle BAsys1 & BAsys2 koordinatlarını csv virgülle ayrılmış şekil dosyasında hazırlayacağız, dosya şu şekilde görünüyor:

Tablo 3.1 : BAsys1 & BAsys2 koordinatları

Nokta Kimliği X(sistem1) Y(sistem1) Z(sistem1) X(sistem2) Y(sistem2) Z(sistem2) Topolojik İlişki 1 Topolojik İlişki 2
1 82.6178 12.6907 132.3142 97.151 156.953 129.518 2 5
2 84.812 12.6907 141.4928 102.168 155.818 137.368 3 6
3 84.812 38.9911 141.4928 111.139 180.45 135.365 4 7
4 82.6178 38.9911 132.3142 105.946 181.59 127.393 1 8
5 57.4595 12.6907 138.3284 77.256 165.381 143.795 6 5
6 59.6537 12.6907 147.507 82.368 164.193 151.676 7 6
7 59.6537 38.9911 147.507 91.234 188.877 149.593 8 7
8 57.4595 38.9911 138.3284 86.009 190.018 141.714 5 8

Son 2 sütundaki topolojik ilişkiler, ID noktası ile istenen noktalar arasında çizgiler çizmek için kullanılır (yeni çizgiler eklenirse kod
otomatik olarak yeni topolojik ilişkileri tanır).

Bu dosya Kara Kedi dosyalarıyla aynı dizinde "helmert" adı altında kaydedilmelidir.

17
3.4.2 Black Cat kullanarak Helmert parametrelerini hesaplama

Şekil 3.2 : Kara Kedi arayüzü - Parametrelerin Hesaplanması

CSV dosyasını doğru bir şekilde hazırladığımızdan emin olduktan sonra, Black Cat
uygulamasında "Parametreleri hesapla düğmesine" basmamız yeterlidir ve
program nesneleri koordinat sistemi1 ve koordinat sistemi2'ye göre otomatik olarak
çizecektir.

Şekil 3.3 : SYS1 ve SYS2'ye göre BA nesnesi 1

18
Bunun yanında aynı dizinde otomatik olarak oluşturulan 2 dosyamız olacak, bu
dosyalar "parameters" ve "Helmert Parameters Variance_Covariance" bu
dosyalar şöyle görünecek:

Tablo 3.2 : "parametreler" dosya içeriği


S1(Ölçek =
# dx(m) dy(m) dz(m) A1(rad) A2(rad) A3(rad)
1+ S1*10^-6)

-5.6491 179.5806 35.0929 143.707 0.0852115 -0.350424 0.374867

Tablo 3.3 : "Helmert Parameters Variance_Covariance" dosya içeriği


#m m m ppm arsec arsec arsec
0.1663 0.1892 0.1734 0.0008827 0.0011949 0.0012188 0.0009919

19
3.4.3 Yeni koordinatları hesaplamak için Helmert parametrelerini kullanma

Bu noktaya kadar yaptığımız şey dönüşüm parametrelerini ve bunların doğruluk


tahminlerini hesaplamaktı, şimdi BBsys1 koordinatlarına ve bir önceki adımda
hesaplanan dönüşüm parametrelerine bağlı olarak BBsys2 koordinatlarını
hesaplayacağız.

Bunu yapmak için bir önceki adımda otomatik olarak oluşturulan parametreler
dosyasına ihtiyacımız var, bunun yanında "Helmert Kullanımı" adlı bir dosya
oluşturmamız gerekiyor, bu dosyanın içeriği aşağıdaki gibi düzenlenmelidir:

Tablo 3.4 : "Helmert Kullanımı" dosya içeriği.


Nokta X Y Z Topolojik ilişki Topolojik ilişki
KIMLIK (Sistem1) (Sistem1) (Sistem1) 1 2
1 34.4758 16.9073 137.7183 4 2
2 10.2452 10.5994 144.5921 3 2
3 13.2046 11.3698 132.2655 1 3
4 27.3396 44.3195 137.7183 6 4
5 3.109 38.0116 144.5921 2 4
6 6.0684 38.782 132.2655 3 5

Bu dosya CSV virgülle ayrılmış dosya olarak kaydedilmelidir, yine buradaki


topolojik ilişki nokta ID ile istenen nokta arasında çizgi çizmek için kullanılır. şimdi
Black Cat üzerindeki yeni koordinatları hesaplama düğmesine basmaya hazırız,
böylece program nesneyi eski ve yeni koordinat sistemlerine göre çizecektir:

Şekil 3.4 : BB (sys1) ve BB (sys2) Kara Kedi Çizimi

20
Ve sonuç "after helmert" dosyası Black Cat dizininde otomatik olarak oluşturulacaktır;
dosyanın içeriği aşağıdaki gibi görünecektir:

Tablo 3.5 : "Helmert'ten sonra" dosya içeriği

# KIMLIK X-sistemi2(m) Y-sistemi2(m) Z-sistemi2(m)

1 58.3304 177.2402 150.8021

2 37.4221 179.3408 166.0595

3 35.9609 179.6132 153.4446

4 61.3490 205.4076 151.0608

5 40.4407 207.5082 166.3181

6 38.9795 207.7806 153.7033

Bu dosya, gerekli BBsys2 koordinatlarımızı içeren CSV virgülle ayrılmış bir dosyadır.

Şekil 3.5 : Kara Kedi arayüzü - Yeni koordinatların hesaplanması

21
MESAFEYE DAYALI REZEKSIYON (ALAN RETRAKSIYONU)

Endüstriyel ölçüm uygulamalarında, belirli noktaların koordinatlarının belirlenmesi


arazi koşulları (görüş mesafesi, konum ....) nedeniyle zor olabilir, örneğin yedek
parçaların bazı iç noktaları total station ve reflektörlerle ölçülemez veya bazı
durumlarda bazı noktalara olan mesafeleri ölçmek için sadece lazer metre
kullanabiliriz. Bu nedenle, bu gibi durumlarda koordinatları hesaplamak için farklı
rezeksiyon teknikleri gereklidir, bu nedenle uzay geri çekme tekniği, yalnızca
mesafelere bağlı olarak koordinatları hesaplamak için yararlı bir araç olarak Black
Cat uygulamasına dahil edilmiştir, bu teknik esas olarak GPS ölçümlerinde,
fotogrametride ve 3D rezeksiyon sistemlerinde kullanılır.

Giriş

Uzaklık tabanlı rezeksiyon yönteminde, bir P noktası ile A(ya,xa,za), B(yb,xb,zb) ve


C(yc,xc,zc) gibi en az üç nokta arasındaki üç boyutlu koordinatlar hesaplanacaktır. P
(yp,xp,zp) noktasının 3B koordinatları da, db, dc eğim mesafesi ölçüsü ile
hesaplanabilir. Problemin geometrik çözümü a merkezi ve da yarıçapı, B merkezi db
yarıçapı ve C merkezi dc yarıçapı olmak üzere 3 kürenin kesişiminin bulunmasıdır
(Bektas vd., 2018).

Şekil 4.1 : Üç kürenin kesişimi (Bektas et la, 2018)

22
Üç kürenin kesişiminden 2 nokta elde edeceğiz. Çünkü iki kürenin kesişimi bir
çemberdir. Ancak bu kesişim çemberi ile üçüncü küre bize 2 nokta verecektir.
Dolayısıyla, iki çözüm olacaktır, nokta tahmini için seçilecek yaklaşık koordinat,
mevcut iki çözüm arasında doğru çözümü belirleyecektir. Bu yüzden doğru yaklaşık
koordinatların seçilmesi önemlidir. Yaklaşık koordinatlar uygun yakınlıkta
belirlenmezse, iteratif çözüm yakınsamama olasılığını doğurur (Bktas, yildirim,
karaahmetoglu, uyar,2018).

Matematiksel Model

Problemi çözmek için, her bir ölçü için yazılacak olan iki nokta arasındaki eğim
uzunluğu denklemine ihtiyacımız var (Bektas vd., 2018).

𝑑𝑖 = √(𝑥𝑖 - 𝑥 )𝑝2 + (𝑦𝑖 - 𝑦 )𝑝2 + (𝑧𝑖 - 𝑧 )𝑝2 (i = a, b, c)

(4,1)

Üç denklemin bilinmeyen parametreleri kolayca çözülemez çünkü denklemler


doğrusal değildir. Dolayısıyla, bu bilinmeyenler (P noktasının koordinatları) için yo,
xo, zo değerlerinin yaklaşık olarak belirlenmesine ihtiyacımız var.

xp= xo + Δxyp= yo + Δyzp= zo + Δz

(4,2)

Taylor serisine göre sadece birinci derece terimleri alarak doğrusallaştırma


yapacağız, böylece aşağıdaki doğrusal denklem sistemi elde edilir. Yaklaşık
koordinatları kabaca sabit noktalardan veya GPS'den seçebiliriz.

(𝑥𝑎 - 𝑥0 )/𝑑𝑎 (𝑦 - 𝑦𝑎0 )/𝑑𝑎 (𝑧𝑎 - 𝑧0 ∆𝑥 𝑑0𝑎 - 𝑑𝑎


)/𝑑𝑎
[(𝑥𝑏 - 𝑥0 )/𝑑𝑏 (𝑦𝑏 - 𝑦0 )/𝑑𝑏 (𝑧𝑏 - 𝑧0 )/𝑑𝑏 ] [∆𝑦] = [𝑑0𝑏 - 𝑑 ]𝑏
(𝑥𝑐 - 𝑥0 )/𝑑𝑐 (𝑦 - 𝑦𝑐0 )/𝑑𝑐 (𝑧𝑐 - 𝑧0 ∆𝑧 𝑑0𝑐 -𝑑
𝑐

)/𝑑𝑐
(4,3)

23
Olarak yazılabilir:

AX = b

(4,4)

X = A-1 b

(4,5)

Δx, Δy, Δz bilinmeyenleri başlangıçta seçilen yaklaşıkdeğerlerineeklenir

xp= xo + Δx yo + Δy zo

(4,6)

istenen P noktasının koordinatı bulunur. Doğrusallaştırma işlemi yapıldığında ikinci


ve daha yüksek mertebeden terimlerin etkisi dahil edilmediği için ilk iterasyondan
kesin sonuca ulaşılamaz. Bunun için ilk adımda bulunan değerler yaklaşık değerler
olarak kabul edilecek ve hesaplamalar tekrar yapılacaktır

x0 = xp , y0 = yp , z0 = zp

(4,7)

Böylece, denklem yeniden kurulur ve çözülür, üç eğim kenarı ölçüsü, cebirsel


çözümün alan rezeksiyonu olmadan gerçekleştirilmesine izin vermek için yeterlidir.
Doğruluğu daha da artırmak için üçten fazla ölçü kullanılabilir. Bu durumda,
denklem sayısı yukarıdaki gibi A x = b şeklinde kurulan doğrusal denklemlerdeki
denklem sayısından fazla olduğundan, En Küçük Kareler Prensibine göre denklem
sistemi

AT Ax = AT b

(4,8)

X = (AT A)-1 AT b

(4,9)

Doğrulama ve doğruluk tahmini için 3.1.5'te olduğu gibi aynı denklemleri


uygulayacağız

24
Mesafe Tabanlı Rezeksiyon - Python Kodu

Şimdi uzay geri çekilmesi için kullanılan Black Cat python betiği incelenecek, kod
4.2'deki matematiksel modellere bağlı olarak oluşturulacak ve sonuçlar csv
dosyalarına kaydedilecektir.

1. import numpy as np
2. import math
3. from mpl_toolkits.mplot3d import axes3d
4. import matplotlib.pyplot as plt
5. from matplotlib import style
6.
7. distance = np.loadtxt('space retraction.csv', delimiter=',', skiprows=1, us
ecols=(1))
8. MESAFE = np.array(mesafe)
9. koordinatlar = np.loadtxt('space retraction.csv', delimiter=',', skiprows=1,
usecols=(2, 3, 4))
10. KOORDİNATLAR =
np.array(koordinatlar) 11.
12. with open("space retraction.csv", "rb") as f: # rb : ikili modda okumak ve
belirli bir ham dosyadan okumak için
13. from itertools import islice
14.
15. XYZ0 = np.genfromtxt(islice(f, 1, 2), delimiter=",", usecols=(5, 6, 7))

16. XYZ0 = n p .transpose(XYZ0) # + np.array([20 , -3 , 10])


17.
18.
19.
20.
21.
22.
23. # 1000 iterasyon :
24. for k in range(0,1000 ):
25. for i in range(0, np.size(COORDINATES, 0)):
26.
27. a00 = (KOORDİNATLAR[i, 0] - XYZ0[0]) / MESAFE[i]
28. a01 = (KOORDİNATLAR[i, 1] - XYZ0[1]) / MESAFE[i]
29. a02 = (KOORDİNATLAR[i, 2] - XYZ0[2]) / MESAFE[i]
30. Ai = np.array([[a00, a01, a02]])
31.
32. doi = math.sqrt((KOORDİNATLAR[i, 0] - XYZ0[0]) ** 2 + (KOORDİNATLAR[i
, 1] - XYZ0[1]) ** 2 + (
33. KOORDİNATLAR[i, 2] - XYZ0[2]) ** 2)
34. bi = doi - MESAFE[i]
35.
36. Bi = np.array([[bi]])
37.
38. eğer i == 0 ise:
39. A = Ai
40. B = Bi
41.
42. Başka:
43. A = np.concatenate((A, Ai), axis=0)
44. B = np.concatenate((B, Bi), axis=0)
45.

# kodun tamamı Ek C'de yer almaktadır

25
Mesafeye Dayalı Rezeksiyon - Örnek Üzerinden Kodun Test Edilmesi

Koordinatları bilinen 5 noktadan oluşan bir grubumuz var, bilinen noktalar ile CC
arasındaki mesafelere bağlı olarak Black Cat programını kullanarak CC noktasının
koordinatlarını hesaplamak istiyoruz, bunu yapmak için giriş dosyamızı
düzenlemeliyiz, bu dosya CSV virgülle ayrılmış olmalı ve veriler aşağıdaki gibi
olmalıdır

Tablo 4.1 : "alan geri çekme" dosya içeriği

HAYIR D X Y Z X0(yaklaşık) Y0(yaklaşık) Z0(yaklaşık)


1 10.342 18.197 4.328 1.492 15 -4.5 1.5
2 9.527 19.276 2.621 1.644
3 8.459 19.861 -10.003 1.655
4 6.442 6.918 -5.995 1.33
5 6.868 6.765 -2.502 0.948

No nokta numarası, D bilinen nokta ile istenen (CC) nokta arasındaki mesafe, X Y Z
bilinen noktaların koordinatları, X0 Y0 Z0 bilinmeyen noktanın yaklaşık
koordinatlarıdır, bunu navigasyonel GPS kullanarak veya bilinen noktalar arasındaki
göreceli konumu ile hesaplayabiliriz. Yaklaşık koordinatların doğru sonuçlar elde
etmek için önemli olduğu unutulmamalıdır, bu nedenle sadece rastgele sayılar
olmamalı, gerçek nokta konumuna nispeten yakın olacak şekilde hesaplanmalıdır.
Dosyanın adı "space retraction" olmalı ve "Black Cat" klasörünün aynı dizinine
kaydedilmelidir. Giriş dosyası hazır olduğunda, hesaplamaları yapmak için Black Cat
uygulamasında sadece "distances-based resection" tuşuna basmak yeterlidir.

İlk olarak, hesaplanan ve bilinen nokta koordinatlarını göstermek için otomatik


olarak bir şekil görüntülenecektir.

26
Şekil 4.2 : Kara Kedi arayüzü / mesafelere dayalı rezeksiyon

Şekil 4.3 : Kara Kedi / bilinen ve hesaplanan nokta konumları

27
Ve 2 dosya "rezeksiyon sonucu" ve "rezeksiyon Varyans Kovaryansı" otomatik
olarak oluşturulacaktır, bu dosyalar koordinatlara ve istenen CC noktamıza doğruluk
tahminine sahiptir.

Tablo 4.2 : "Rezeksiyon sonucu" dosya içeriği

X0(m) Y0(m) Z0(m)

13.2368 - 4.7460 1.4514

Tablo 4.3 : "Rezeksiyon Varyans Kovaryansı" dosya içeriği

dx(m) dy(m) dz(m)

0.0010192 0.0007155 0.021907

"Resection Variance Covariance" dosyasını incelemek, çalışmamızı değerlendirmek


için çok önemlidir; büyük hata değerleri, (X0 Y0 Z0) değerleri için daha iyi
tahminlere ihtiyacımız olduğu anlamına gelir.

28
ÇIKIŞ NOKTALARI POZISYONLARI

Noktaların ve konumların belirlenmesi arazi ölçümünde temel görevlerden biri


olmasına rağmen, endüstriyel metrolojide büyük önem taşımaktadır, çoğu durumda
noktaların konumlarını belirlemek için saha ölçümlerinde çok yüksek doğruluğa
ihtiyacımız vardır, bunun yanı sıra robotik ve yapay kollar için kinematik
hareketlerin tasarlanması ve programlanmasında ham veri (açılar, mesafeler ve
konum) ölçümlerinin belirlenmesine ihtiyacımız vardır (Toussaint, 2014), bu bölümde
belirleme matematiğini tartışacağız ve belirleme öğelerini (mesafeler ve açılar)
listelemek için Black Cat'i inceleyeceğiz.

Kutupsal Koordinatlardan Yola Çıkma

İstasyon noktası (A) ve yönlendirme noktasının (B) koordinatlarına ve hedef


noktasına (P) bağlı olarak, aşağıdaki unsurları hesaplayarak yola çıkma görevini
uygulayabiliriz:

• Azimut (AB ve AP için) ve böylece αp'yi (yatay açı) hesaplayabiliriz,

• AP için yatay veya eğimli mesafe

• Dikey açı VAP

Verilen: A, B ve P
δAB, δAP, tAP
α = δAB - δAP

Şekil 5.1 : kutupsal koordinatlardan yola çıkma ( Rozsa, 2010)

29
Kutupsal Koordinatlardan Yola Çıkma - Python Kodu

Sırada, belirli bir istasyon noktasına (X0, Y0, Z0) göre verilen herhangi bir nokta
listesi için ayar öğelerini listelemek için Black Cat kodu var, kod azimut, yatay
mesafe, eğim mesafesi ve dikey açı değerlerini listeleyen CSV dosyasını
döndürecektir.

1. import numpy as np
2. matematiği içe aktarın
3. from mpl_toolkits.mplot3d import axes3d
4. import matplotlib.pyplot as plt
5. from matplotlib import style
6.
7.
8.
9. sınıf gözetimi :
10. def init (self):
11. geçmek
12.
13.
14. def hesaplamalar(self , x1, y1, z1, x2, y2, z2):
15. # x1 = float(input('x1'))
16. # y1 = float(input('y1'))
17. # z1 = float(input('z1'))
18. # x2 = float(input('x2'))
19. # y2 = float(input('y2'))
20. # z2 = float(input('z2'))
21.
22. dx = x2 - x1
23. dy = y2 - y1
24. dz = z2 - z1
25.
26. dx == 0 ve dy == 0 ise:
27. azimut = 0
28. elif dx < 0.0 ve dy >= 0 . 0:
29. azimut = 450 - math.atan2(dy, dx) * 180 / math.pi
30. başka:
31. azimut = 90 - math.atan2(dy, dx) * 180 / math.pi
32. D3d = math.sqrt((x2 - x1) ** 2 + ( y2 - y1) ** 2 + (z2 - z1) ** 2)
33. D2d = math.sqrt((x2 - x1) ** 2 + (y2 - y1) ** 2)
34. VA = math.atan(dz / D2d) * 180 / math.pi
35.
36.
37. dönüş azimut,D2d,D3d,VA
38.
39.
40. stakeoutpoints = np.loadtxt('stakeoutpoints.csv', delimiter= ',' , skiprows
=1 , usecols=(1,2,3))
41.
42.
43. STAKEOUTPOINTS = np.array(stakeoutpoints)
44.
45.
46. with open("stakeoutpoints.csv", "rb") as f: # rb : ikili olarak oku
modundan ve belirli ham verilerden okumak için
47. from itertools import islice
48. XYZ0 = np.genfromtxt(islice(f, 1, 2), delimiter=",", usecols=(4,5,6))
49. XYZ0 = n p .transpose(XYZ0) #+ np.array([20 , -3 , 10])
50.

# kodun tamamı Ek D'de yer almaktadır

30
Kutupsal Koordinatlardan Yola Çıkma - Kara Kedi Örneği

Tablo 5.1 : "stakeoutpoints" CSV dosya içeriği


Hayır x y z x0 y0 z0
1 10 -3 2 2 5 8
2 11 -1 3
3 12 1 4
4 13 3 5
5 14 5 6
6 15 7 7
7 16 9 8
8 17 11 9
9 18 13 10
10 19 15 11

Tablo 5.1, Black Cat kurulum giriş dosyasının içeriğidir, x0,y0,z0 istasyon noktası
koordinatlarıdır, x,y,z ise hedef noktaların alanlarıdır (onları ayarlamamız gereken
noktalar), bu dosya "stakeoutpoints" adı altında virgülle ayrılmış CSV olarak
kaydedilmelidir.

Dosyayı hazırladıktan sonra Kara Kedi ile aynı dizine kaydetmemiz gerekir, son
adım Kara Kedi uygulamasını açmak ve "noktaları belirle" düğmesine basmaktır ve
uygulamadan "Sonuçlar 'Stakeoutresult.csv' dosyasına kaydedildi" şeklinde kısa bir
mesaj alacağız.

'Stakeoutresult.csv' dosyası Black Cat dizini içinde otomatik olarak oluşturulacaktır,


bu dosya giriş noktalarını sıraya göre belirlemek için gerekli tüm verileri, azimut
yatay mesafe, eğim mesafesi ve dikey açı dosyada listelenmiştir, şimdi verilerimiz
ölçme cihazları ile manuel olarak kazık çakmaya hazırdır veya bu ham verileri bu
noktaları uygun şekilde seçmek ve bırakmak için yapay kol programlamasında
kullanabiliriz.

31
Şekil 5.2 : Kara Kedi komutayı ele geçiriyor

Tablo 5.2 : "Stakeoutresult" dosya içeriği

# Azimut (Derece) Yatay Mesafe(m) Eğim Mesafesi(m) Dikey Açı (Derece)


135.000000 11.3137 12.8062 -27.938353
123.690068 10.8167 11.9164 -24.808748
111.801409 10.7703 11.4891 -20.374527
100.304846 11.1803 11.5758 -15.020257
90.000000 12.0000 12.1655 -9.462322
81.253838 13.1529 13.1909 -4.347753
74.054604 14.5602 14.5602 0.000000
68.198591 16.1555 16.1864 3.542001
63.434949 17.8885 18.0000 6.379370
59.534455 19.7231 19.9499 8.648741

32
KARA KEDİ UYGULAMASI

Kara Kedi Nedir

Black Cat uygulaması, bu tezin amacı için Python dilinde geliştirilmiş açık kaynaklı
bir programdır, açık kaynaklı bir uygulama olduğu için metroloji ve endüstriyel
tesislerle ilgili diğer birçok sorunu çözmek için geliştirilebilir, gelecek vaat eden
alanlardan biri, boyama gibi görevleri gerçekleştirmek için ölçüm cihazlarından gelen
jeomatik verileri sahadaki yapay kollarla birleştirmektir.
, kaynak, vb. Programın yapısı, bu tezin 3,4,5. bölümlerinde tartışılan matematiksel
problemleri çözmek için 4 farklı komut dosyası ve arayüz için bir ekstra komut
dosyasıdır, bu programı kullanabilmek için bilgisayara python 3 yüklenmelidir.6
veya daha yüksek bir sürümünün yüklenmiş olması ve aşağıdaki python
kütüphanelerinin CMD penceresinden (windows komut istemi) (pip install komutu)
kullanılarak yüklenmesi gerekmektedir: (numpy, math, mpl_toolkits.mplot3d,
matplotlib.pyplot, matplotlib, pyQt5, subprocess).

Program zip dosyası içine sıkıştırılmıştır ve masaüstüne çıkarılabilir ve doğrudan


kullanılabilir.

Ana Pencerenin Kodu

Aşağıda yer alacak olan "mainwindow" betiği hariç tüm program betikleri daha önce
tartışılmıştı, arayüzü oluşturmak için pyQt5 ve QT designer kullanıldı, kod aşağıdaki
gibidir:

1. # -*- coding: utf-8 -*-


2.
3. # 'mainwindow.ui' kullanıcı arayüzü dosyası okunarak oluşturulan form
uygulaması
4. #
5. # Tarafından oluşturuldu: PyQt5 UI kod oluşturucu 5.11.3
6. #
7. # UYARI! Bu dosyada yapılan tüm değişiklikler kaybolacaktır!
8.
9. from PyQt5 import QtCore, QtGui, QtWidgets
10. from PyQt5.QtWidgets import (QMessageBox)
11. alt süreci içe aktarın
12.

33
13.
14. class Ui_MainWindow(object):
15. def setupUi(self, MainWindow):
16. MainWindow.setObjectName("MainWindow")

# kodun tamamı Ek E'de yer almaktadır

Kara Kedi Klasör İçeriği

Kara Kedi dosyası 5 (.py) betik dosyasından oluşur 4 tanesi gizli dosyalardır isimleri
("helmert", "using helmert" , "space retraction" , "stakeOut" ) ve ön dosya adı
"mainwindow", bu uygulamayı açmak için kullanılan dosyadır, bunun yanında 4 giriş
CSV dosyası vardır ("helmert", "using helmert", "space retraction", "stakeoutpoints" )
. Kullanıcı verileri daha önce tartışıldığı gibi bu dosyaların içinde düzenlenmelidir
(tüm dosyaların veri sütunlarını göstermek için başlıkları vardır ve kullanıcıya girdi
dosyalarının düzenlenmesi hakkında bir fikir vermek için her dosyanın içinde sayısal
varsayılan değerler vardır), kullanıcı gerektiğinde satırları (nokta numaraları)
ekleyebilir, çünkü program bunları otomatik olarak tanıyacak ve hesaplamaları buna
göre uyduracaktır, sonuç dosyaları CSV dosyaları ile aynı klasör içinde aşağıdaki
adlar altında otomatik olarak oluşturulur ("parameters", "Helmert Parameters
Variance_Covariance", " after helmert", "after helmert", "Resection result" ,
"Resection Variance Covariance", "Stakeoutresult")

34
SONUÇ

Bu tezin ana hedefi, harita mühendislerinin endüstriyel ölçümler alanında


karşılaşabilecekleri bazı temel sorunları çözebilecek bir yazılım geliştirmektir,
Metrolojideki farklı koordinat sistemleri ve bunların endüstrideki uygulamaları
jeomatik faaliyetlerin çok önemli bir parçasıdır ve her zaman sahada doğru koordinat
sistemlerini oluşturmak ve bunları iyi ve doğru bir dönüşüm sistemi ile
bağlayabilmek gerekir, bu nedenle Black Cat uygulama alanında çok yararlı olabilir,
Black Cat'e dahil edilen mesafe bazlı rezeksiyon yeteneğinin, lazer metre cihazlarını
küçük ve gizli yerlerde kullanırken çok yararlı olabileceği ve bu durumun endüstriyel
ve yedek parça kurulumlarında çok yaygın olduğu ve bu yeteneğin karasal
araştırmada nadiren kullanıldığı.

Bunun yanı sıra, Kara Kedi programı açık kaynak kodlu ve kullanımı kolay bir dilde
(Python Dili) geliştirilmiştir ve ayrı betikler olarak yazılmıştır, bu nedenle
gerektiğinde bu betikleri başka herhangi bir yazılıma bağlamak kolay olmalıdır.

Black Cat, endüstriyel araştırma ihtiyaçlarının gerektirdiği diğer görevleri yerine


getirmek için daha da geliştirilebilir, ana gelişmelerden biri, CSV dosyalarına ihtiyaç
duymadan noktaları Black Cat'e kolayca içe ve dışa aktarmak için AutoCAD
programına bağlamak ve format dosyalarını otomatik olarak tanımak ve gerçek
zamanlı hesaplamalar yapabilmek için bu cihazlardan nokta aktarmak için total
station veya Lazer Takip cihazlarına bağlamak olabilir. son olarak Helmert dönüşüm
bölümlerinde açıklanan dönüşüm kodları, robotik kol hareketlerini tanımlamak için
kullanılan kinematik dönüşüm denklemlerine çok yakındır, bu nedenle kodun bazı
kısımları bu tür görevlerde kullanılabilir.

# Koordinat metrolojisi endüstrinin gelişimiyle oldukça ilişkilidir, endüstriyel


projeler daha karmaşık hale geldikçe daha yüksek hassasiyetli ölçüm kullanımı daha
büyük önem kazanmaktadır, 2014'ün başlarında tanımlanan ana sorun, koordinat
sistemlerinin doğruluğuna ilişkin mevcut sınırlarla ilgilidir.

35
REFERANSLAR

Al Marzooqi, Y., Fashir, H. ve Ahmed, S.I. (2005). Dubai Emirliği için Datum
Dönüşüm Parametrelerinin Türetilmesi. Firavunlardan
Jeoinformatiğe, FIG Çalışma Haftası 2005 ve GSDI-8,
1-17.

Altamimi, Z., Collilieux, X. ve Metivier, L. (2011). ITRF2008: uluslararası


karasal referans çerçevesinin geliştirilmiş bir çözümü.
J. Geod, 85, 457-473.
Andrei, C.O. (2006). 3B afin koordinat dönüşümleri. TRITA Yüksek Lisans Tezi,
Jeodezi Bölümü, Kraliyet Teknoloji Enstitüsü (KTH),
Stockholm, İsveç, 06-004(GIT), 1-50.

Bektas Sebahattin, Karaahmetoglu Nihat, Yildirim Ridvan, Uyar Azize, Kirici,


Ulku, Pakel E (2018). Üç Boyutlu Mesafede Üç Nokta
Rezeksiyonu, Uluslararası Araştırma Dergisi -
GRANTHAALAYAH. 6. 10.5281/zenodo.1194735.

Fan, H. (2005). Teorik Jeodezi. Jeodezi Bölümü, Rapor no. 2016, KTH, Stockholm,
İsveç.

Guo, R. (2007). Baden-Württemberg'deki dönüşüm prosedürlerinin En Küçük


Kareler ve Toplam En Küçük Sincap yöntemleri ile sistematik
analizi. Jeodezi Enstitüsü, Stuttgart Üniversitesi, Stuttgart,
Almanya.

Koordinat Sistemlerine Giriş (2019) E r i ş i m tarihi: 06 Kasım 2019,


http://www.geomet-cmm-software.com/KB/Chapter5/KB10010.htm

Koordinat Metrolojisine Giriş. Retrieved: 06 Kasım 2019,


https://www.hexagonmi.com/en-us/solutions/technical-
resources/metrology-101/intro-to-coordinate-metrology
İslam, Md. Tariqul. (2014). 3B Koordinat Dönüşüm Parametrelerini Tahmin Etmek
için En Küçük Kare Yaklaşımı: İsveç'te Üç Referans Sistemi
Örneği. 3. 30-38.
Kutoğlu, H.S., Mekik, C. ve Akcin, H. (2002). 7-Parametreli Dönüşüm için İyi
Bilinen İki Modelin Karşılaştırılması. The Australian
Surveyor, 1(47), 24-30.
Ogundare, J. O. (2016). HASSAS ÖLÇME: İlkeler ve Geomatik
uygulaması.
Sladek, J. A. (2016). Koordinat Metrolojisi: Sistemlerin Doğruluğu ve
Ölçüler.

Toussaint, M. (2016). Robotiğe Giriş

36
EKLER

EK A: Helmert dönüşüm parametrelerini hesaplamak için python betiği

EK B: Helmert parametrelerini kullanmak için python betiği

EK C: Uzay geri çekilmesini programlamak için Python kodu

EK D: Kara Kedi'de kullanılan kodun düzenlenmesi EK E:

Kara Kedi ana penceresinin kodu

37
EK A: Helmert dönüşüm parametrelerini hesaplamak için python betiği

1. import numpy as np
2. import math
3. from mpl_toolkits.mplot3d import axes3d
4. import matplotlib.pyplot as plt
5. from matplotlib import style
6.
7. veri = np.loadtxt('helmert.csv', delimiter=',', skiprows=1, usecols=(0, 1,
2, 3, 4, 5, 6))
8. VERİ = np.array(veri)
9. count = (np.size(DATA, 0)) * 3 # nokta sayısı * 3 for x,y,z 10.
11. p = 206265 # radyandan yay saniyesine
12. s1 = 1
13. A1 = 0
14. A2 = 0
15. A3 = 0
16.
17. c1 = np.eye(count, count)
18. c = np.linalg.inv(c1)
19. del_S = 1
20. del_A1 = 1
21. del_A2 = 1
22. del_A3 = 1
23.
24. while (np.abs(del_S) > 10 ** -20 ve np.abs(del_A1) > 10 ** -
20 ve np.abs(del_A2) > 10 ** -20 ve np.abs(
25. del_A3) > 10 ** -20):
26.
27. R = np.array([[np.cos(A2) * n p . c o s ( A3), n p . c o s ( A1) * np.sin(A3) +
np.si n(A1) * np.sin(A2) * n p . c o s ( A3),
28. np.sin(A1) * np.sin(A3) - np.cos(A1) * np.sin(A2) *
n p . c os(A3)],
29. [-
np.cos(A2) * np.sin(A3), np.cos(A1) * np.cos(A3) - np.sin(A1) * np.sin(A2)
* np.sin(A3),
30. np.sin(A1) * np.cos(A3) + np.cos(A1) * np.sin(A2) * np.s
in(A3)],
31. [np.sin(A2), -
np.sin(A1) * n p . c o s ( A2), n p . c o s ( A1) * n p . c o s ( A2)])
32. r00o = R[0, 0]
33. r01o = R[0, 1]
34. r02o = R[0, 2]
35. r10o = R[1, 0]
36. r11o = R[1, 1]
37. r12o = R[1, 2]
38. r20o = R[2, 0]
39. r21o = R[2, 1]
40. r22o = R[2, 2]
41. for i in range(0, np.size(DATA, 0)):
42. a03 = (r00o * V E R İ [ i, 1] + r01o * VERİ[i, 2] + r02o * VERİ[i, 3 ])
43. a13 = (r10o * V E R İ [ i, 1] + r11o * VERİ[i, 2] + r12o * VERİ[i, 3 ])
44. a23 = (r20o * V E R İ [ i, 1] + r21o * VERİ[i, 2] + r22o * VERİ[i, 3 ])
45. a04 = (s1 * (-r02o * VERİ[i, 2] + r01o * VERİ[i, 3]))
46. a14 = (s1 * (-r12o * VERİ[i, 2] + r11o * VERİ[i, 3]))
47. a24 = (s1 * (-r22o * VERİ[i, 2] + r21o * VERİ[i, 3]))
48. a05 = -
s1 * np.cos(A3) * (np.sin(A2) * DATA[i, 1] + r21o * DATA[i, 2] + r22o * DAT
A[i, 3])
49. a15 = s1 * n p .sin(A3) * (np.sin(A2) * V E R İ [ i, 1] + r21o * VERİ[i, 2
] + r22o * VERİ[i, 3])
50. a25 = s1 * (np.cos(A2) * VERİ[i, 1] + np.sin(A1) * np.sin(A2) * DAT
A[i, 2] - n p . c os(A1) * n p . s i n ( A 2) * VERİ[
51. i, 3])

38
52. a06 = (s1 * ( r10o * V E R İ [ i, 1] + r11o * V E R İ [ i , 2] + r12o * V E R İ [ i,
3]))
53. a16 = (-
s1 * (r00o * VERİ[i, 1] + r01o * VERİ[i, 2] + r02o * VERİ[i, 3]))
54. a26 = 0
55. Ai = np.array([[1, 0, 0, a03, a04, a05, a06], [0, 1, 0, a13, a14, a
15, a16], [0, 0, 1, a23, a24, a25, a26]])
56.
57. eğer i == 0 ise:
58. A = Ai
59. başka:
60. A = np.concatenate((A, Ai), axis=0)
61.
62. L1 = V E R İ [ i, 4] - s1 * (r00o * VERİ[i, 1] + r01o * V E R İ [ i , 2] + r02
o * VERİ[i, 3])
63. L2 = V E R İ [ i, 5] - s1 * (r10o * VERİ[i, 1] + r11o * V E R İ [ i , 2] + r12
o * VERİ[i, 3])
64. L3 = V E R İ [ i, 6] - s1 * (r20o * VERİ[i, 1] + r21o * V E R İ [ i , 2] + r22
o * VERİ[i, 3])
65. Li = np.array([L1, L2, L3])
66.
67. eğer i == 0 ise:
68. L = Li
69. başka:
70. L = np.concatenate((L, Li), axis=0)
71.
72. del_XX3 = np.dot(c, A)
73. del_XX4 = np.dot(np.transpose(A), del_XX3)
74. del_XX = np.linalg.inv(del_XX4)
75. del_XX1 = np.dot(c, L)
76. del_XX2 = np.dot(np.transpose(A), del_XX1)
77. del_X = np.dot(del_XX, del_XX2)
78. # del_X = np.dot(del_XX,np.dot(np.transpose(A),np.dot(c,L))
79. del_S = del_X[3]
80. del_A1 = del_X[4]
81. del_A2 = del_X[5]
82. del_A3 = del_X[6]
83.
84. S1 = s1 + del_S
85. A1 = A1 + del_A1
86. A2 = A2 + del_A2
87. A3 = A3 + del_A3
88.
89. dx = del_X[0]
90. dy = del_X[1]
91. dz = del_X[2]
92. S1 = (S1 - 1) * 1000000
93. '''''
94. A1 = A1*p # radyandan yay saniyesine dönüştürme
95. A2 = A2*p
96. A3 = A3*p
97. '''
98. # doğrulama tahmini
99. ep_cap = L - A.dot(del_X)
100. CO_v1 = np.dot(c, ep_cap)
101. CO_v = np.dot(np.transpose(ep_cap), CO_v1) / (count - 7)
102. CXX = CO_v * (del_XX)
103. CX = [CXX[0, 0], CXX[1, 1], CXX[2, 2], CXX[3, 3], CXX[4, 4], CXX[5,
5], CXX[6, 6]]
104. CX = np.sqrt(CX) # varyans kovaryans matrisi
105.
106. print("A1= ", A1 * p, " \n", " A2= ", A2 * p, " \n", " A3= ", A3 * p, " \
n", "S1= ", S1)
107. print("dx= ", dx, " \n", 'dy= ', dy, "\n", 'dz= ', dz)
108. print(CX)
109.

39
110. print("m,m,m,ppm,arsec,arsec,arsec")
111.
112. parametreler = [dx, dy, dz, S1, A1, A2, A3]
113. np.savetxt('parameters.csv', np.column_stack(parameters), fmt='%10.2
0f', delimiter=',', header="dx(m), dy(m), dz(m), S1(Scale = 1+ S1*10^-
6), A1(rad), A2(rad), A3(rad)")
114.
115. METİN = ["m", " m " , " m " , " p pm", " a rsec", "arsec", " a rsec"]
116. np.savetxt('Helmert Parametreleri Varyans_Kovaryans.csv', np.column_s
tack(CX), fmt='%10.20f',
117. header="m,m,m,ppm,arsec,arsec,arsec", delimiter=',')
118. # print(CO_v)
119.
120. # print(VERİ[2,1])
121. # print (S1)
122.
123.
124. # Çizim kodu
125. style.use('ggplot')
126. fig = plt.figure()
127. ax1 = fig.add_subplot(111, projection='3d')
128.
129. TDATA = DATA.transpose()
130.
131. ax1.scatter(TDATA[1], T D A T A [ 2], T D A T A [ 3], c='g', marker='X')
132. ax1.scatter(TDATA[4], T D A T A [ 5], T D A T A [ 6], c='r', marker='o')
133. ax1.set_xlabel('x ekseni')
134. ax1.set_ylabel('y ekseni')
135. ax1.set_zlabel('z ekseni')
136.
137. x1 = TDATA[1]
138. x2 = TDATA[2]
139. x3 = TDATA[3]
140.
141. # Numaralandırma
142.
143. n = np.loadtxt('helmert.csv', delimiter=',', usecols=(0),skiprows=1)

144. N = np.array(n)
145.
146. for i, txt in enumerate(n):
147. ax1.text(TDATA[1, i], TDATA[2, i ], TDATA[3, i], '%s' % (str(txt)
), size=8, zorder=1, color='k')
148. ax1.text(TDATA[4, i], TDATA[5, i ], TDATA[6, i], '%s' % (str(txt)
), size=8, zorder=1, color='k')
149. print(i, txt)
150.
151. # ax1.xticks(x, my_xticks)
152. # plt.xticks(np.arange(TDATA[[0,3],:].min(),TDATA[[0,3],:].max(), 50
))
153. # ax1.yticks(np.arange(TDATA[0].min(), TDATA[0].max(), 0 . 5))
154.
155.
156. # print (n)
157. # print (x1)
158.
159.
160. # Çizgiler çizin
161.
162.
163. from matplotlib.patches import FancyArrowPatch
164. from mpl_toolkits.mplot3d import proj3d
165.
166.
167. class Arrow3D(FancyArrowPatch):
168. def init (self, xs, ys, zs, *args, **kwargs):

40
169. FancyArrowPatch. init (self, (0, 0 ), (0, 0), *args, **kwar
gs)
170. self._verts3d = xs, ys, zs
171.
172. def draw(self, renderer):
173. xs3d, ys3d, zs3d = self._verts3d
174. xs, ys, zs = proj3d.proj_transform(xs3d, ys3d, zs3d, rendere
r.M)
175. self.set_positions((xs[0], ys[0]), (xs[1], ys[1]))
176. FancyArrowPatch.draw(self, renderer)
177.
178.
179. from mpl_toolkits.mplot3d import Axes3D
180. import matplotlib.pyplot as plt
181.
182. line_Topology = np.loadtxt('helmert.csv', delimiter=',',skiprows=1)

183. Çizgi_Topoloji = np.array(çizgi_Topoloji)


184. Line_Topology_count = np.size(Line_Topology, 1) - 7
185.
186. for i in range(Line_Topology_count):
187. n = np.loadtxt('helmert.csv', delimiter=',', usecols=(7 + i),ski
prows=1)
188. N = np.array(n)
189.
190. for i, txt in enumerate(N - 1):
191. a = Arrow3D([TDATA[1, i], T D A T A [ 1, int(txt)], [TDATA[2, i],
TDATA[2, int(txt)],
192. [TDATA[3, i], TDATA[3, int(txt)]], mutation_scal
e=1, lw=1, arrowstyle="-|>", color="k")
193. b = Arrow3D([TDATA[4, i], TDATA[4, int(txt)], [TDATA[5, i],
TDATA[5, int(txt)],
194. [TDATA[6, i], TDATA[6, int(txt)]], mutation_scal
e=1, lw=1, arrowstyle="-|>", color="k")
195. ax1.add_artist(a)
196. ax1.add_artist(b)
197.
198. # ax = fig.gca(projection='3d')
199. # ax.set_aspect("equal")
200.
201. # a = Arrow3D([0,1],[0,1],[0,1], mutation_scale=1, lw=1, arrowstyle=
"-|>", color="k")
202.
203.
204. plt.show()

41
42
EK B: Helmert parametrelerini kullanmak için python betiği

1. import numpy as np
2. matematiği içe aktarın
3. from mpl_toolkits.mplot3d import axes3d
4. import matplotlib.pyplot as plt
5. from matplotlib import style
6. p = 206265
7.
8. veri = np.loadtxt('using helmert.csv', delimiter=',', usecols=(1,2,3),skipr
ows=1)
9. id = np.loadtxt('using helmert.csv', delimiter=',', usecols=(0),skiprows=1)

10. parametreler = np.loadtxt('parametreler.csv', delimiter=',', skiprows=1)


11. VERİ = np.array(veri)
12. ID = np.array(id,ndmin=2) # 2 boyutlu matris
13. PARAMETRELER = np.array(parametreler)
14. count = np.size(DATA,0)
15. print(count)
16.
17.
18. X0 = PARAMETRELER[0]
19. Y0 = PARAMETRELER[1]
20. Z0 = PARAMETRELER[2]
21. s1 = 1+PARAMETRELER[3]*10**-6
22. A1 = PARAMETRELER[4] # Radyan cinsinden açılar
23. A2 = PARAMETRELER[5]
24. A3 = PARAMETRELER[6]
25.
26. R = np.matrix([[np.cos(A2) * np.cos(A3), np.cos(A1) * np.sin(A3) +
np.sin(A
1) * np.sin(A2) * np.cos(A3),
27. np.sin(A1) * np.sin(A3) - np.cos(A1) * np.sin(A2) *
n p . cos(A
3)],
28. [-
np.cos(A2) * np.sin(A3), np.cos(A1) * np.cos(A3) - np.sin(A1) *
np.sin(A2)
* np.sin(A3),
29. np.sin(A1) * n p . cos(A3) + n p . cos(A1) * np.sin(A2) * n p . sin(A
3)],
30. [np.sin(A2), -
np.sin(A1) * n p . c o s ( A2), n p . c o s ( A1) * n p . c o s ( A2)])
31.
32.
33. XYZi = s1*R.dot(np.transpose(DATA))
34. #print(np.transpose(DATA))
35. XYZi = np.transpose(XYZi)
36.
37. #print(np.shape(XYZi))
38. for i in range (0,count):
39. XYZi[i,0] = XYZi [i,0] + X0
40. XYZi[i, 1] = XYZi[i, 1] + Y0
41. XYZi[i, 2] = XYZi[i, 2] + Z0
42.
43.
44.
45. ID=np.transpose(ID)
46. print(np.shape(XYZi))
47. print(ID)
48. XXYZ = np.hstack((ID,XYZi))
49.
50. np.savetxt("after helmert.csv",XXYZ,delimiter=',',header=" ID,X-
system2(m),Y-system2(m),Z-
system2(m)", fmt=','.join(['%i'] + ['%1.4f']*3))
51.
52. style.use('ggplot')
43
53. fig = plt.figure()
54. ax1 = fig.add_subplot(111, projection='3d')
55.
56. TXYZi = XYZi.transpose()
57. TDATA = DATA.transpose()
58.
59. ax1.scatter(TDATA[0], T D A T A [ 1], T D A T A [ 2], c='g', marker='X')
60. ax1.scatter(TXYZi[0], TXYZi[1], TXYZi[2], c ='r', marker='o')
61. ax1.set_xlabel('x ekseni')
62. ax1.set_ylabel('y ekseni')
63. ax1.set_zlabel('z ekseni')
64.
65.
66. #Numaralandırma
67. n = np.loadtxt('using helmert.csv', delimiter= ',' , usecols=(0),skiprows=1
)
68. N = np.array(n)
69.
70. for i, txt in enumerate(n):
71.
72. ax1.text(TDATA[0,i], T D A T A [ 1,i], T D A T A [ 2,i], '%s' % (str(txt)), size=8,
zorder=1, color='k')
73. ax1.text(TXYZi[0,i], T X Y Z i [ 1,i], T X Y Z i [ 2,i], '%s' % (str(txt)),
size=8,
zorder=1, color='k')
74. print (i,txt)
75.
76.
77.
78.
79. # Çizgiler çizin
80.
81.
82.
83.
84. from matplotlib.patches import FancyArrowPatch
85. from mpl_toolkits.mplot3d import proj3d
86.
87. class Arrow3D(FancyArrowPatch):
88. def init (self, xs, ys, zs, *args, **kwargs):
89. FancyArrowPatch. init (self, (0,0), (0,0), *args, **kwargs)
90. self._verts3d = xs, ys, zs
91.
92. def draw(self, renderer):
93. xs3d, ys3d, zs3d = self._verts3d
94. xs, ys, zs = proj3d.proj_transform(xs3d, ys3d, zs3d, renderer.M
)
95. self.set_positions((xs[0],ys[0]),(xs[1],ys[1]))
96. FancyArrowPatch.draw(self, renderer)
97.
98.
99.
100. from mpl_toolkits.mplot3d import Axes3D
101. import matplotlib.pyplot as plt
102.
103.
104.
105. line_Topology = np.loadtxt('using helmert.csv', delimiter= ',',skipr
ows=1 )
106. Çizgi_Topoloji = np.array(çizgi_Topoloji)
107. Line_Topology_count = np.size(Line_Topology,1)-4
108.
109. for i in range(Line_Topology_count) :
110. n = np.loadtxt('using helmert.csv', delimiter=',', usecols=(4+i)
,skiprows=1)
111. N = np.array(n)
112. print(N)

44
113. for i, txt in enumerate(N-1):
114.
115.
116.
117. a= Arrow3D([TDATA[0,i],TDATA[0,int(txt)], [TDATA[1,i], TDAT
A[1,int(txt)]], [TDATA[2,i], TDATA[2,int(txt)]], mutation_scale=1, lw=1, ar
rowstyle="-|>", color="k")
118. b= Arrow3D([TXYZi[0, i], T X Y Z i [ 0, int(txt)]], [TXYZi[1, i],
TXYZi[1, int(txt)]], [TXYZi[2, i], T X Y Z i [ 2, int(txt)]], mutation_scale=1, l
w=1, arrowstyle="-|>", color="k")
119. ax1.add_artist(a)
120. ax1.add_artist(b)
121.
122.
123. #ax = fig.gca(projection='3d')
124. #ax.set_aspect("equal")
125.
126. # a = Arrow3D([0,1],[0,1],[0,1], mutation_scale=1, lw=1, arro
wstyle="-|>", color="k")
127.
128.
129.
130.
131.
132.
133.
134. plt.show()

45
46
EK C: Alan geri çekmeyi programlamak için Python kodu

1. import numpy as np
2. import math
3. from mpl_toolkits.mplot3d import axes3d
4. import matplotlib.pyplot as plt
5. from matplotlib import style
6.
7. distance = np.loadtxt('space retraction.csv', delimiter=',', skiprows=1, us
ecols=(1))
8. MESAFE = np.array(mesafe)
9. koordinatlar = np.loadtxt('space retraction.csv', delimiter=',', skiprows=1,
usecols=(2, 3, 4))
10. KOORDİNATLAR =
np.array(koordinatlar) 11.
12. with open("space retraction.csv", "rb") as f: # rb : ikili modda okumak ve
belirli bir ham dosyadan okumak için
13. from itertools import islice
14.
15. XYZ0 = np.genfromtxt(islice(f, 1, 2), delimiter=",", usecols=(5, 6, 7))

16. XYZ0 = n p .transpose(XYZ0) # + np.array([20 , -3 , 10])


17.
18.
19.
20.
21.
22.
23. # 1000 iterasyon :
24. for k in range(0,1000 ):
25. for i in range(0, np.size(COORDINATES, 0)):
26.
27. a00 = (KOORDİNATLAR[i, 0] - XYZ0[0]) / MESAFE[i]
28. a01 = (KOORDİNATLAR[i, 1] - XYZ0[1]) / MESAFE[i]
29. a02 = (KOORDİNATLAR[i, 2] - XYZ0[2]) / MESAFE[i]
30. Ai = np.array([[a00, a01, a02]])
31.
32. doi = math.sqrt((KOORDİNATLAR[i, 0] - XYZ0[0]) ** 2 + (KOORDİNATLAR[i
, 1] - XYZ0[1]) ** 2 + (
33. KOORDİNATLAR[i, 2] - XYZ0[2]) ** 2)
34. bi = doi - MESAFE[i]
35.
36. Bi = np.array([[bi]])
37.
38. eğer i == 0 ise:
39. A = Ai
40. B = Bi
41.
42. Başka:
43. A = np.concatenate((A, Ai), axis=0)
44. B = np.concatenate((B, Bi), axis=0)
45.
46. AT = np.transpose(A)
47. ATA = np.dot(AT, A)
48. ATAIN = np.linalg.pinv(ATA)
49. X = np.dot(ATAIN, np.dot(AT, B))
50. XYZ0[0,] = XYZ0[0,] + X[0, 0]
51. XYZ0[1,] = XYZ0[1,] + X[1, 0]
52. XYZ0[2,] = XYZ0[2,] + X[2, 0]
53. # XX = np.linalg.lstsq(A,B,rcond = None)
54.
55.

47
56.
57. # doğrulama (varyans kovaryans matrisi hesaplaması)
58. # Helmert.py'de kullanılan denklemlerin aynısı, sadece değiştirerek: A=A; L=B;
DATA = DIS
TANCE
59. count = (np.size(DISTANCE,0)) #denklem sayısı
60. c1 = np.eye(count,count)
61. c = np.linalg.inv (c1)
62.
63. del_XX3 = np.dot(c,A)
64. del_XX4 = np.dot(np.transpose(A),del_XX3)
65. del_XX = np.linalg.inv(del_XX4)
66. del_XX1 = np.dot(c,B)
67. del_XX2 = np.dot(np.transpose(A),del_XX1)
68. del_X = np.dot(del_XX,del_XX2)
69.
70. ep_cap = B - A.dot(del_X)
71. CO_v1= np.dot(c,ep_cap)
72. CO_v = np.dot(np.transpose(ep_cap),CO_v1)/(count-3)
73. CXX =CO_v*(del_XX)
74. CX = [CXX[0,0],CXX[1,1],CXX[2,2]]
75. CX = np.sqrt(CX) # varyans kovaryans matrisi
76.
77.
78. print(CX)
79.
80.
81. # print (XYZ0)
82. # print (X)
83. # print(B)
84.
85. np.savetxt('Rezeksiyon sonucu.csv', [XYZ0], fmt='%1.4f',
delimiter=',',heade
r= "X0(m),Y0(m),Z0(m)")
86. np.savetxt('Resection Variance Covariance.csv', [CX], fmt='%1.20f', delimit
er=',',header='dx(m),dy(m),dz(m)')
87. # Çizim kodu
88. style.use('ggplot')
89. fig = plt.figure()
90. ax1 = fig.add_subplot(111, projection='3d')
91.
92. TCOORDINATES = COORDINATES.transpose()
93.
94. ax1.scatter(TCOORDINATES[0], T C O O R D I N A T E S [ 1], T C O O R D I N A T E S [ 2],
c='g', marke
r='X')
95. ax1.scatter(XYZ0[0,], X Y Z 0 [ 1,], X Y Z 0 [ 2,], c='r', marker='o')
96. ax1.set_xlabel('x ekseni')
97. ax1.set_ylabel('y ekseni')
98. ax1.set_zlabel('z ekseni')
99.
100.
101. # Numaralandırma
102.
103. n = np.loadtxt('space retraction.csv', delimiter=',', skiprows=1, us
ecols=(0))
104. N = np.array(n)
105.
106. ax1.text(XYZ0[0,], X Y Z 0 [ 1,], X Y Z 0 [ 2,], '%s' % (str("CC")), size=8, z
order=1, color='k')
107. for i, txt in enumerate(n):
108. ax1.text(TCOORDINATES[0, i], T C O O R D I N A T E S [ 1, i],
T C O O R D I N A T E S [ 2,
i], '%s' % (str(txt)), size=8, zorder=1, color='k')
109. print (i,txt)
110.
111.
112.
113.
48
114. plt.show()

49
EK D: Kara Kedi'de kullanılan Kodun belirlenmesi

1. import numpy as np
2. import math
3. from mpl_toolkits.mplot3d import axes3d
4. import matplotlib.pyplot as plt
5. from matplotlib import style
6.
7.
8.
9. sinif gözeti̇mi̇ :
10. def init (self):
11. geçmek
12.
13.
14. def hesaplamalar(self , x1, y1, z1, x2, y2, z2):
15. # x1 = float(input('x1'))
16. # y1 = float(input('y1'))
17. # z1 = float(input('z1'))
18. # x2 = float(input('x2'))
19. # y2 = float(input('y2'))
20. # z2 = float(input('z2'))
21.
22. dx = x2 - x1
23. dy = y2 - y1
24. dz = z2 - z1
25.
26. dx == 0 ve dy == 0 ise:
27. azimut = 0
28. elif dx < 0.0 ve dy >= 0 . 0:
29. azimut = 450 - math.atan2(dy, dx) * 180 / math.pi
30. Başka:
31. azimut = 90 - math.atan2(dy, dx) * 180 / math.pi
32. D3d = math.sqrt((x2 - x1) ** 2 + ( y2 - y1) ** 2 + (z2 - z1) ** 2)
33. D2d = math.sqrt((x2 - x1) ** 2 + (y2 - y1) ** 2)
34. VA = math.atan(dz / D2d) * 180 / math.pi
35.
36.
37. dönüş azimut,D2d,D3d,VA
38.
39.
40. stakeoutpoints = np.loadtxt('stakeoutpoints.csv', delimiter= ',' , skiprows
=1 , usecols=(1,2,3))
41.
42.
43. STAKEOUTPOINTS = np.array(stakeoutpoints)
44.
45.
46. with open("stakeoutpoints.csv", "rb") as f: # rb : ikili modda
okumak ve belirli bir ham dosyadan okumak için
47. from itertools import islice
48. XYZ0 = np.genfromtxt(islice(f, 1, 2), delimiter=",", usecols=(4,5,6))
49. XYZ0 = n p .transpose(XYZ0) #+ np.array([20 , -3 , 10])
50.
51. i= 0
52. x= stakeOut()
53.
54.
55. STAKEOUTPOINTS içindeki satır için:
56.
57. vi = x.calculations(XYZ0[0],XYZ0[1],XYZ0[2],row[0],row[1],row[2])
58. v = np.array([vi])
59. eğer i == 0 :
60. V=v
61. Başka:

50
62. V = np.concatenate((V,v), axis=0)
63. i=i+1
64.
65.
66.
67.
68. np.savetxt('Sakeoutresult.csv', V ,fmt='%1.6f,%1.4f,%1.4f,%1.6f',delimiter=
',',header="Azimuth(Degree),Horizental Distance(m),Slope
D i s t a n c e ( m),Vertic
al Açı (Derece)")
69. print(np.shape(V))
70. print(V)

51
EK E: Kara Kedi ana penceresinin kodu

1. # -*- coding: utf-8 -*- 2.


3. # 'mainwindow.ui' kullanıcı arayüzü dosyası okunarak oluşturulan form uygulaması
4. #
5. # Tarafından oluşturuldu: PyQt5 UI kod oluşturucu 5.11.3
6. #
7. # UYARI! Bu dosyada yapılan tüm değişiklikler
kaybolacaktır! 8.
9. from PyQt5 import QtCore, QtGui, QtWidgets
10. from PyQt5.QtWidgets import (QMessageBox)
11. import alt süreç
12.
13.
14. class Ui_MainWindow(object):
15. def setupUi(self, MainWindow):
16. MainWindow.setObjectName("MainWindow")
17. MainWindow.setEnabled(True)
18. MainWindow.resize(1121, 790)
19. self.centralwidget = QtWidgets.QWidget(MainWindow)
20. self.centralwidget.setObjectName("centralwidget")
21. self.calculatingParameters = QtWidgets.QPushButton(self.centralwidg
et)
22. self.calculatingParameters.setGeometry(QtCore.QRect(100, 50, 171, 6
1) )
23. self.calculatingParameters.setAutoFillBackground(False)
24. self.calculatingParameters.setObjectName("calculatingParameters")
25. self.calculatingNewCoordinates = QtWidgets.QPushButton(self.central
widget)
26. self.calculatingNewCoordinates.setGeometry(QtCore.QRect(100, 220, 1
71, 61))
27. self.calculatingNewCoordinates.setObjectName("calculatingNewCoordin
ates")
28. self.distancesBasedResection = QtWidgets.QPushButton(self.centralwi
dget)
29. self.distancesBasedResection.setGeometry(QtCore.QRect(100, 390, 171
, 61))
30. self.distancesBasedResection.setObjectName("distancesBasedResection
")
31. self.textEdit = QtWidgets.QTextEdit(self.centralwidget)
32. self.textEdit.setEnabled(False)
33. self.textEdit.setGeometry(QtCore.QRect(480, 40, 441, 101))
34. self.textEdit.setObjectName("textEdit")
35. self.textEdit_2 = QtWidgets.QTextEdit(self.centralwidget)
36. self.textEdit_2.setEnabled(False)
37. self.textEdit_2.setGeometry(QtCore.QRect(480, 360, 441, 141))
38. self.textEdit_2.setObjectName("textEdit_2")
39. self.textEdit_3 = QtWidgets.QTextEdit(self.centralwidget)
40. self.textEdit_3.setEnabled(False)
41. self.textEdit_3.setGeometry(QtCore.QRect(480, 180, 441, 161))
42. self.textEdit_3.setObjectName("textEdit_3")
43. self.stakingOutPoint = QtWidgets.QPushButton(self.centralwidget)
44. self.stakingOutPoint.setGeometry(QtCore.QRect(100, 550, 171, 61))
45. self.stakingOutPoint.setObjectName("stakingOutPoint")
46. self.textEdit_4 = QtWidgets.QTextEdit(self.centralwidget)
47. self.textEdit_4.setEnabled(False)
48. self.textEdit_4.setGeometry(QtCore.QRect(480, 530, 441, 121))
49. self.textEdit_4.setObjectName("textEdit_4")

52
1. self.line = QtWidgets.QFrame(self.centralwidget)
2. self.line.setGeometry(QtCore.QRect(290, 70, 171, 16))
3. self.line.setFrameShape(QtWidgets.QFrame.HLine)
4. self.line.setFrameShadow(QtWidgets.QFrame.Sunken)
5. self.line.setObjectName("line")
6. self.line_2 = QtWidgets.QFrame(self.centralwidget)
7. self.line_2.setGeometry(QtCore.QRect(280, 240, 181, 16))
8. self.line_2.setFrameShape(QtWidgets.QFrame.HLine)
9. self.line_2.setFrameShadow(QtWidgets.QFrame.Sunken)
10. self.line_2.setObjectName("line_2")
11. self.line_3 = QtWidgets.QFrame(self.centralwidget)
12. self.line_3.setGeometry(QtCore.QRect(280, 410, 181, 16))
13. self.line_3.setFrameShape(QtWidgets.QFrame.HLine)
14. self.line_3.setFrameShadow(QtWidgets.QFrame.Sunken)
15. self.line_3.setObjectName("line_3")
16. self.line_4 = QtWidgets.QFrame(self.centralwidget)
17. self.line_4.setGeometry(QtCore.QRect(280, 570, 181, 16))
18. self.line_4.setFrameShape(QtWidgets.QFrame.HLine)
19. self.line_4.setFrameShadow(QtWidgets.QFrame.Sunken)
20. self.line_4.setObjectName("line_4")
21. MainWindow.setCentralWidget(self.centralwidget)
22. self.menubar = QtWidgets.QMenuBar(MainWindow)
23. self.menubar.setGeometry(QtCore.QRect(0, 0, 1121, 26))
24. self.menubar.setObjectName("menubar")
25. MainWindow.setMenuBar(self.menubar)
26. self.statusbar = QtWidgets.QStatusBar(MainWindow)
27. self.statusbar.setObjectName("statusbar")
28. MainWindow.setStatusBar(self.statusbar)
29.
30. self.retranslateUi(MainWindow)
31. QtCore.QMetaObject.connectSlotsByName(MainWindow)
32.
33.
34. self.calculatingParameters.clicked.connect(self.helmert)
35. self.calculatingNewCoordinates.clicked.connect(self.using_helmert)

36. self.distancesBasedResection.clicked.connect(self.space_retraction)

37. self.stakingOutPoint.clicked.connect(self.stakeOut)
38.
39. def helmert (self):
40. subprocess.call(['python','helmert.py'])
41. def using_helmert (self):
42. subprocess.call(['python','using helmert.py'])
43. def space_retraction (self):
44. subprocess.call(['python','space retraction.py'])
45. def stakeOut (self):
46. subprocess.call(['python','stakeOut.py'])
47. msg = QMessageBox()
48.
49. msg.setIcon(QMessageBox.Information)
50. msg.setText("Sonuçlar 'Stakeoutresult.csv' dosyasına kaydedildi")
51. msg.setWindowTitle("Done")
52. msg.exec()
53.
54.
55. def retranslateUi(self, MainWindow):
56. _translate = QtCore.QCoreApplication.translate
57. MainWindow.setWindowTitle(_translate("MainWindow", "Black Cat"))
58. self.calculatingParameters.setText(_translate("MainWindow", "Calcul
ating Parameters "))

53
1. self.calculatingNewCoordinates.setText(_translate("MainWindow", " ca
Yeni koordinatlar hesaplanıyor"))
2. self.distancesBasedResection.setText(_translate("MainWindow", "dist
ances-based resection "))
3. self.textEdit.setHtml(_translate("MainWindow", " <!DOCTYPE HTML PUBL
IC \"-//W3C//DTD HTML 4.0//EN\" \"http://www.w3.org/TR/REC-
html40/strict.dtd\">\n"
4. "<html><head><meta name=\"qrichtext\" content=\"1\" /><style type=\"text/cs
s\">\n"
5. "p, li { white-space: pre-wrap; }\n"
6. "</style></head><body style=\" font-family:\'MS Shell Dlg 2\'; font-
size:7.8pt; font-weight:400; font-style:normal;\">\n"
7. "<p style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-
right:0px; -qt-block-indent:0; text-
indent:0px;\">nokta dosyasını "helmert.csv" olarak adlandırın (şablon
dosyası mevcuttur) </p>\n"
8. "<p style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-
right:0px; -qt-block-indent:0; text-
indent:0px;\">1. sütun nokta no </p>\n"
9. "<p style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-
right:0px; -qt-block-indent:0; text-
indent:0px;\">sonraki 3 sütun eski SYS koordinatlarıdır </p>\n"
10. "<p style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-
right:0px; -qt-block-indent:0; text-
indent:0px;\">son 3 sütun yeni SYS koordinatlarıdır</p>\n"
11. "<p style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-
right:0px; -qt-block-indent:0; text-indent:0px;\">varyans-
kovaryans matrisi : </p>\n" altında kaydedilecektir.
12. "<p style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-
right:0px; -qt-block-indent:0; text-
indent:0px;\">'Helmert Parameters Variance_Covariance.csv' </p>\n"
13. "<p style=\"-qt-paragraph-type:empty; margin-top:0px; margin- bottom:0px;
margin-left:0px; margin-right:0px; -qt-block-indent:0; text-
indent:0px;\"><br /></p></body></html>"))
14. self.textEdit_2.setHtml(_translate("MainWindow", "<!DOCTYPE HTML PU
BLIC \"-//W3C//DTD HTML 4.0//EN\" \"http://www.w3.org/TR/REC-
html40/strict.dtd\">\n"
15. "<html><head><meta name=\"qrichtext\" content=\"1\" /><style type=\"text/cs
s\">\n"
16. "p, li { white-space: pre-wrap; }\n"
17. "</style></head><body style=\" font-family:\'MS Shell Dlg 2\'; font-
size:7.8pt; font-weight:400; font-style:normal;\">\n"
18. "<p style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-
right:0px; -qt-block-indent:0; text-indent:0px;\">-
Verileri "space retraction.csv" adlı dosya olarak kaydedin (şablon dosyası
mevcuttur)
p>\n"
19. "<p style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-
right:0px; -qt-block-indent:0; text-indent:0px;\">-
Dosya 7 sütuna sahip olmalıdır </p>\n"
20. "<p style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-
right:0px; -qt-block-indent:0; text-indent:0px;\">-
İsimler için ilk ham aşağıdaki gibidir: ( NO ,D , X , Y , Z , X0 ,Y0 , Z0 )</p>\n"
21. "<p style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-
right:0px; -qt-block-indent:0; text-indent:0px;\">-
Nokta numaraları için "No"; Mesafeler için "D" </p>\n"
22. "<p style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-
right:0px; -qt-block-indent:0; text-
indent:0px;\">- "XYZ" : nokta koordinatlarıdır </p>\n"
23. "<p style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-
right:0px; -qt-block-indent:0; text-
indent:0px;\">- "X0Y0Z0" : istenen po int'in yaklaşık koordinatıdır</p>\n"

24. "<p style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-


right:0px; -qt-block-indent:0; text-
indent:0px;\"><span style=\" color:#000000;\">- Sonuçlar 2 dosyaya
kaydedilir: "Rezeksiyon Sonucu ve Rezeksiyon Varyans Kovaryansı </span><span
style="color: #000000;\">

54
1. style=\" font-family:\'Courier New\'; font-
size:8pt; color:#000000;\">" </span></p></body></html>"))
2. self.textEdit_3.setHtml(_translate("MainWindow", " <!DOCTYPE HTML PU
BLIC \"-//W3C//DTD HTML 4.0//EN\" \"http://www.w3.org/TR/REC-
html40/strict.dtd\">\n"
3. "<html><head><meta name=\"qrichtext\" content=\"1\" /><style type=\"text/cs
s\">\n"
4. "p, li { white-space: pre-wrap; }\n"
5. "</style></head><body style=\" font-family:\'MS Shell Dlg 2\'; font-
size:7.8pt; font-weight:400; font-style:normal;\">\n"
6. "<p style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-
right:0px; -qt-block-indent:0; text-
indent:0px;\">- Parametreleri hesapladıktan sonra 2. sistemdeki koordinatları
hesaplamak için bu kodu kullanın </p>\n"
7. "<p style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-
right:0px; -qt-block-indent:0; text-
indent:0px;\">- 1. adımdaki parametreler dosyası otomatik olarak
"parametre.csv" altına kaydedilir </p>\n"
8. "<p style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-
right:0px; -qt-block-indent:0; text-
indent:0px;\">- 1. koordinat sisteminin koordinatlarını "us ing helmert.csv"
dosyası altına kaydedin (şablon dosyası mevcuttur) </p>\n"
9. "<p style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-
right:0px; -qt-block-indent:0; text-
indent:0px;\">- Dosya, XYZ koordinatları için herhangi bir isim veya nokta No
olmadan 3 sütuna sahip olmalıdır </p>\n"
10. "<p style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-
right:0px; -qt-block-indent:0; text-
indent:0px;\">- Sonuç Dosyalarının adı "after helmer.csv"</p>\n"
11. "<p style=\"-qt-paragraph-type:empty; margin-top:0px; margin-
bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-
indent:0px;\"><br /></p></body></html>"))
12. self.stakingOutPoint.setText(_translate("MainWindow", "staking out
points"))
13. self.textEdit_4.setHtml(_translate("MainWindow", " <!DOCTYPE HTML PU
BLIC \"-//W3C//DTD HTML 4.0//EN\" \"http://www.w3.org/TR/REC-
html40/strict.dtd\">\n"
14. "<html><head><meta name=\"qrichtext\" content=\"1\" /><style type=\"text/cs
s\">\n"
15. "p, li { white-space: pre-wrap; }\n"
16. "</style></head><body style=\" font-family:\'MS Shell Dlg 2\'; font-
size:7.8pt; font-weight:400; font-style:normal;\">\n"
17. "<p style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-
right:0px; -qt-block-indent:0; text-indent:0px;\">-
staking out elemanları şunlardır: Azimut - Dikey Açı - Yatay Mesafe - Eğim
Mesafesi </p>\n"
18. "<p style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-
right:0px; -qt-block-indent:0; text-
indent:0px;\">- Nokta verileri şu şekilde kaydedilmelidir: <span style=\"
font- family:\'Courier New\'; font-
size:8pt; color:#6a8759;\">\'stakeoutpoints.csv\'(şablon dosyası
mevcuttur)</span></p>\n"
19. "<p style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -
qt-block-indent:0; text-indent:0px;\"><span style=\" font-
family:\'Courier New\'; font-size:8pt; color:#000000;\">-
Sonuç dosyası </span><span style=\" font-family:\'Courier New\'; font- size:8pt;
color:#6a8759;\">\'Sakeoutresult.csv\'</span></p></body></html>") içine
kaydedilecektir.)
20. if name == " main ":
21. import sys
22. app = QtWidgets.QApplication(sys.argv)
23. MainWindow = QtWidgets.QMainWindow()
24. ui = Ui_MainWindow()
25. ui.setupUi(MainWindow)
26. MainWindow.show()
27. sys.exit(app.exec_())

55
ÖZGEÇMİŞ

Adı Soyadı WAELALNAGAR

Doğum Yeri ve Tarihi : Halep - 1983

E-Mail : waelnajj@gmail.com

EĞİTİM

• Lisans : 2007, Halep Üniversitesi, İnşaat Mühendisliği, Harita Bölümü

MESLEKI DENEYIM VE ÖDÜLLER:

• 2007-2009 Protech Enerji ve İnşaat Şirketi


• 2009-2016 LafargeHolcim Çimento
• 2017-2019 Kanat dış ticaret ve imalat

56

You might also like