Komputasi Teknik
Benarido Amri [2506669226]
I. Abstrak
Laporan ini menyajikan metode perhitungan posisi dan orientasi kendaraan berdasarkan konsep pergerakan kinematika lateral kendaraan. Metode perhitungan ini dikerjakan menggunakan 5 prinsip DAI5 yaitu Deep Awareness of (I), Intention, Initial Thinking, Idealization, dan Instruction Set, dengan di dalamnya terdapat konsep computational thinking. Dalam melakukan perhitungan posisi dan orientasi kendaraan ini, digunakan penyederhanaan utama yaitu konsep โbicycle modelโ yaitu sebuah idealisasi dimana kedua roda depan dan belakang kendaraan dijadikan hanya satu roda depan dan belakang saja.
II. Deklarasi Penulis
A. Deep Awareness of (I)
Sebelum melakukan seluruh kegiatan, penting untuk menyadari peran kita sebagai manusia, yaitu sebagai manusia, kita tidak dapat melakukan suatu hal dengan sempurna karena kesempurnaan adalah hanya milik Tuhan. Oleh sebab itu, jika dalam laporan ini terdapat kesalahan ataupun kekeliruan dalam bentuk tulisan, bias, asumsi ataupun hal lainnya, mohon untuk dimaklumi, dengan kritik dan saran yang membantu akan sangat diapresiasi.
Dalam penyelesaian tugas besar ini, relevansi topik terhadap kehidupan sehari-hari sangat erat, karena topik ini sering menjadi basis dari sistem kontrol yang kerap diterapkan pada kendaraan sebagai sistem keamanan kendaraan, yang akan memiliki dampak terhadap baik pengendara maupun lingkungan sekitarnya.
B. Intention
Dari tugas perhitungan posisi dan orientasi kendaraan ini, diharapkan dapat mempelajari berbagai metode penyelesaian numeris, dan juga mengetahui berbagai elemen yang berhubungan dengan pergerakan suatu kendaraan. Dengannya, dapat menambah wawasan mengenai kompleksitas yang ada pada pergerakan tersebut, termasuk dari hukum-hukum fisikanya, yang akhirannya dapat menyadari kompleksitas yang ada pada alam semesta dan Tuhan.
Tugas perhitungan posisi dan orientasi kendaraan ini juga memiliki implikasi yang nyata seperti halnya dituliskan dalam sub-bab sebelumnya, yaitu berkaitan dengan kontrol kendaraan, dimana kendaraan tersebut sering kita berinteraksi dalam kehidupan sehari-hari.
III. Pendahuluan
Dalam kehidupan sehari-hari, sering kita berinteraksi dengan kendaraan, yaitu untuk berpindah dari suatu tempat ke tempat lainnya. Terdapat beberapa jenis kendaraan yang mungkin sering digunakan seperti sepeda, sepeda motor, mobil, bis, ataupun kereta. Dalam kendaraan-kendaraan ini, terdapat sistem kontrol yang kompleks untuk dapat menjaga stabilitas ketika berkendara agar keamanan baik untuk pengendara maupun lingkungan sekitarnya dapat terjaga.
Selain dari itu, saat ini terdapat kenaikan kepopuleran terkait dengan autonomous vehicle, yaitu suatu kendaraan yang di desain untuk dapat bergerak secara otomatis, sehingga tidak memerlukan pengemudi.
Kontrol dari kendaraan tersebut memerlukan berbagai elemen, dengan salah satunya adalah elemen pergerakan dari kendaraan, untuk itu, laporan ini membahas mengenai pergerakan dasar tersebut yang didasari oleh konsep kinematika pergerakan lateral kendaraan berdasarkan metode โbicycle modelโ.
A. Initial Thinking
Kendaraan masa kini memiliki berbagai fitur advanced driver-assistance systems (ADAS) dimana fungsi-fungsi seperti lane keep assists dan automated parking mengandalkan permodelan pergerakan kendaraan yang didasarkan model kinematika. Selain dari itu, komponen path-tracking dalam self-driving car juga dimana kinematika kendaraan ini dikombinasi dengan sistem kontrol seperti model predictive control (MPC) untuk membantu memprediksi gerakan kendaraan kedepannya.
Dalam kendaraan, terdapat berbagai macam faktor yang dapat memengaruhi pergerakan dari kendaraan tersebut, baik faktor di dalam kendaraan seperti tenaga yang diberikan, bentuk kendaraan, kondisi ban, distribusi tenaga, distribusi berat kendaraan, dan sebagainya, maupun faktor di luar kendaraan seperti kondisi jalan, kemiringan jalan, kondisi cuaca, dan yang lainnya. Karena kompleksitas tersebut, maka jika didesain sebuah kontrol yang mempertimbangkan semua faktor-faktor tersebut, perhitungan akan menjadi sangat demanding baik dari segi hardware maupun waktu komputasinya. Sehingga, agar dapat diaplikasikan suatu sistem kontrol pada kendaraan, maka diperlukan suatu penyederhanaan yang relatif akurat dan juga sederhana. Kinematika kendaraan menggunakan โbicycle modelโ merupakan penyederhanaan tersebut, yang dapat diaplikasikan pada perhitungan komputer, tanpa memerlukan perangkat yang canggih dan waktu komputasinya relatif singkat. Dengan ini, maka posisi dan orientasi kendaraan dapat diprediksi hanya berdasarkan beberapa input saja seperti kecepatan kendaraan dan sudut kemudi untuk input dinamisnya dan jarak antara roda depan dan belakang terhadap center of gravity (CoG) untuk input tetap.
IV. Metode dan Langkah Solusi

Gambar 1. Langkah kerja tugas besar.
Gambar 1 menunjukkan proses kerja yang digunakan dalam penyelesaian tugas besar โPerhitungan Posisi dan Orientasi Kendaraanโ ini. Yaitu dimulai dari pembacaan literatur terkait, mengumpulkan informasi-informasi yang relevan, membuat kode, melakukan iterasi/perbaikan kode agar sesuai yang diinginkan, pembuatan overview tugas besar untuk dijadikan sebagai knowledge, dan melakukan pengecekan hasil AIDAI5 yang dibuat.
Berikut merupakan penjelasan terkait dengan penggunaan โbicycle modelโ kinematika kendaraan:
Tugas besar ini menggunakan teori โbicycle modelโ kinematika kendaraan untuk menghitung posisi dan orientasi kendaraannya. Salah satu simplifikasi yang digunakan adalah dimana kedua roda depan dan belakang direpresentasikan menjadi satu roda depan dan satu roda belakang. Hal ini bertujuan untuk menghindari perhitungan kompleks antara relasi roda kiri dan kanan yang pada nyatanya memiliki perbedaan. Namun, perbedaan ini minimal sehingga dapat dijadikan sebagai satu roda saja.
Berikut merupakan sebuah deskripsi mengenai sistem kendaraan:

Gambar 2. Ilustrasi kinematika gerakan lateral kendaraan.
Gambar 2 menunjukkan ilustrasi kinematika kendaraan, dimana (V) adalah kecepatan kendaraan yang memiliki arah dengan sudut (beta) terhadap kendaraan. Dengan parameter (delta_f, delta_r) adalah sudut kemudi roda depan dan belakang, namun karena roda belakang umumnya tidak dapat dikendalikan, maka (delta_r) dapat dijadikan 0. (l_f, l_r) merupakan jarak antara roda terhadap center of gravity (CoG) kendaraan. (psi) adalah sudut kendaraan relatif terhadap garis horizontal (aksis x).
Dari Gambar 2, dapat dibuatkan sebuah persamaan yang mendeskripsikan pergerakan kendaraan tersebut:

Persamaan-persamaan di atas merupakan basis dari kinematika kendaraan โbicycle modelโ. Persamaan-persamaan ini akan nantinya diselesaikan untuk mendapat posisi dan orientasi kendaraan. Namun, terdapat beberapa asumsi yang digunakan dalam permodelan ini, yaitu disebutkan dalam sub-bab (Idealization).
Terdapat beberapa metode yang dapat diterapkan untuk menyelesaikan persamaan-persamaan di atas, namun, dalam tugas besar ini, digunakan penyelesaian numeris berupa explicit euler methods. Metode ini dipilih karena kesederhanaan metode ini, dan juga persamaan-persamaannya tidak perlu tingkat akurasi yang tinggi.
Secara singkat, explicit method ini adalah suatu cara untuk menghitung nilai dari step selanjutnya, berdasarkan step saat ini. Hal ini dapat dilakukan dengan cara menggunakan nilai step saat ini, sebuah fungsi, dan time step. Berikut merupakan persamaan bentuk umum dari explicit euler method:

Atau:

Sebagai contoh aplikasi dari metode ini pada persamaan kendaraan adalah seperti berikut (digunakan fungsi x sebagai contoh):

Sehingga persamaan explicit euler menjadi:

Dengan (dt) merupakan time step, penggunaan (dt) yang semakin kecil akan menghasilkan hasil yang lebih akurat, namun akan memperlambat waktu perhitungan karena komputer harus melakukan lebih banyak perhitungan setiap iterasinya (lebih banyak step).

Gambar 3. Representasi dari metode explicit euler.
A. Idealization
Untuk mendapatkan persamaan yang sederhana, digunakan beberapa asumsi-asumsi yang penting untuk diperhatikan, yaitu:
- Seperti yang telah disebutkan dalam sub-bab sebelumnya, tidak terdapat perbedaan antara sudut kemudi pada roda kiri dan kanan, dan
- Kedua roda depan dan belakang diasumsikan menjadi satu roda depan dan satu roda belakang.
- Karena ini merupakan perhitungan dalam planar, maka diasumsikan tidak ada kemiringan jalan.
- Kecepatan kendaraan bersifat konstan.
- Vektor kecepatan pada titik A dan B (Gambar 2) searah dengan arah roda.
- Tidak ada slip angle pada ban, sehingga model ini berlaku hanya untuk kecepatan rendah, yaitu kurang dari 5.
- Karena kinematika, maka tidak mempertimbangkan gaya-gaya seperti aerodinamis, gaya gesek roda, rolling resistance, dan sebagainya.
B. Instruction Set
Setelah metode pengerjaan dan juga asumsi didefinisikan secara jelas, maka langkah selanjutnya adalah mencoba untuk mengimplementasi bahasan-bahasan yang telah dipelajari pada suatu sistem agar dapat lebih mudah divisualisasi. Untuk mempermudah perhitungan dan visualisasi, digunakan kode Python, selain dari penggunaan kode untuk menyelesaikan perhitungan numerisnya, digunakan pula AIDAI5 yang diharapkan dapat membantu memahami, mempelajari, dan menghitung bagi pengguna.
- Pembuatan kode Python = Pembuatan kode dilakukan menggunakan bantuan ChatGPT, dengan prompting dan testing iteratif agar hasil kode tersebut akurat, output mudah dipahami, dan menggunakan metode yang tepat. Untuk melakukan testing, kode yang dibuat melalui ChatGPT dijalankan menggunakan aplikasi Pycharm yang sudah dilengkapi dengan library sesuai. Terdapat beberapa elemen yang diterapkan dalam kode:
- Kode menghasilkan grafik animasi yang menggambarkan perubahan posisi dan orientasi kendaraan.
- Kode menampilkan output hasil akhir dalam bentuk koordinat (x, y) serta orientasi (psi). Serta menulis ulang parameter input yang digunakan, termasuk kecepatan kendaraan dalam satuan (km/h).
- Agar lebih mudah dipahami, sudut kendaraan (orientasi) hanya dapat memiliki nilai dari 0 hingga 360, merepresentasikan sudut dalam derajat.
- Parameter input dapat langsung diubah di dalam script kode.
- Pembuatan AIDAI5 = Untuk memudahkan pengertian dan juga perhitungan, maka dibuatkan suatu AI khusus topik โPerhitungan Posisi dan Orientasi Kendaraanโ menggunakan AIDAI5. Untuk melakukan hal tersebut, berikut merupakan langkah-langkah yang digunakan:
- Pembuatan beberapa knowledge yang akan dijadikan sebagai dasar pengetahuan AIDAI5.
- Knowledge yang sudah dibuat kemudian di-upload ke AIDAI5.
- Dilakukan validasi folder AI untuk memastikan jawaban sesuai dengan yang tujuan tugas.

Gambar 4. Flowchart langkah kerja AI.
V. Hasil dan Diskusi
A. Kode Python
Kode yang dibuat dapat melakukan perhitungan numeris dengan hasil yang akurat, dan juga dapat menunjukkan hasil output animasi dengan baik. Hanya saja kode dapat diperbaiki lebih lanjut dengan menambah fitur pergantian skala aksis x dan y secara otomatis, serta animasi dapat dijalankan dengan waktu yang sama, sehingga tidak bergantung pada simulasi.
Kode juga dapat berjalan untuk nilai input yang berbeda-beda, dengan contoh hasil sebagai berikut:


Gambar 5. Grafik hasil animasi kode dengan kecepatan 5 m/s untuk sudut kemudi 3 derajat (atas) dan 5 derajat (bawah).
B. AIDAI5
Untuk memvalidasi hasil dari AI, maka dilakukan beberapa prompting yang terkait dengan topik pembahasan. Berikut merupakan beberapa contoh jawaban yang diberikan oleh AIDAI5 terhadap beberapa pertanyaan:
- Pertanyaan 1
- โSebuah kendaraan melaju dengan kecepatan 2 m/s, dimana posisi kendaraan?โ
- Ketika di-prompting pertanyaan di atas, AI seharusnya menjawab dengan menjelaskan bahwa informasi yang diberikan belum dapat digunakan untuk melakukan perhitungan, namun, AI langsung menjawab dengan menentukan asumsi parameter input sendiri dan melakukan perhitungan, meskipun perhitungan tersebut benar.
- Pertanyaan 2
- โIf a vehicle were to have a turning radius of 4m, what will it looked like?โ
- AIDAI5 menjawab dengan benar, yaitu pertanyaan tersebut merupakan sedikit di luar kemampuan menghitung AIDAI5, karena perhitungan cukup kompleks, sehingga AI memberikan informasi mengenai cakupannya, dan memberi saran untuk agar disebutkan parameter input kecepatan, sudut kemudi, dan waktu simulasi.
- Namun, setelah diberikan parameter-parameter tersebut, jawaban perhitungan yang diberikan AI tidak sesuai dengan perhitungan kode.
- Pertanyaan 3
- โA vehicle starts from rest and accelerates at 3 m/sยฒ for 8 seconds. Find its final velocity and total distance traveled.โ
- Ketika ditanyakan pertanyaan ini, AIDAI5 menjawab dengan akurat, menggunakan rumus akselerasi konstan. Dengan mencari kecepatan kemudian mencari jarak tempuh kendaraan. Dengan konteks yang relatif akurat.

Gambar 6. Jawaban AIDAI5 atas pertanyaan 1.



Gambar 7. Jawaban AIDAI5 untuk pertanyaan 2.

Gambar 8. Jawaban AI untuk pertanyaan 3.
VI. Kesimpulan
Telah berhasil dilakukan implementasi kinematika kendaraan berdasarkan โbicycle modelโ dengan menggunakan metode perhitungan numeris explicit euler. Selain dari itu, kedua elemen tersebut dapat diterapkan pada kode Python untuk memudahkan perhitungan dan visualisasi.
Untuk AIDAI5, jawab dari AIDAI5 belum konsisten seusai dengan yang diinginkan meskipun telah dicoba beberapa cara. Dimana yang menjadi permasalahan utama adalah AIDAI5 belum dapat menjawab persoalan perhitungan dengan akurat, yaitu angka hasil perhitungan AIDAI5 tidak sama dengan hasil kode dan validasi analitis. Dengan hasil yang sudah ada, sepertinya AI masih kesulitan dalam melakukan perhitungan secara iteratif berdasarkan explicit euler, namun, AI masih dapat melakukan perhitungan-perhitungan sederhana.
VII. Acknowledgement
Dengan ini penulis mengucapkan terima kasih kepada Prof. Ahmad Indra, karena telah membimbing dan memberikan platform untuk mempelajari berbagai aspek komputasi teknik, yaitu dari konsep pemikiran DAI5, computational thinking, penerapan ilmu, metode-metode numeris, kode, hingga AI. Penulis juga ingin mengucapkan terima kasih kepada Janter Edward, Adamsyah Haryo, dan Abraham Thiong karena telah memberikan bantuan dalam menyusun pertanyaan untuk percobaan prompting, juga kepada teman-teman kelas Komputasi Teknik atas bantuan dan masukannya selama proses pembuatan tugas besar ini.
VIII. Referensi
J. Kong, M. Pfeiffer, G. Schildbach, and F. Borrelli, Kinematic and dynamic vehicle models for autonomous driving control design. 2015, pp. 1094-1099.
R. Rajamani, Vehicle Dynamics and Control, 2nd ed. Springer, 2012.
M. Schรคfer, Computational Engineering โ Introduction to Numerical Methods. Springer, 2006.
IX. Lampiran
Kode Python:
import numpy as np
import matplotlib.pyplot as plt
import matplotlib.animation as animation
# --- Parameters ---
L_f = 1.0 # distance from CG to front axle (m)
L_r = 1.0 # distance from CG to rear axle (m)
L = L_f + L_r
v = 5 # velocity (m/s)
steer_angle = 35 # steering angle (deg)
delta = np.deg2rad(steer_angle) # steering angle (radians)
dt = 0.05 # time step (s)
t_end = 10 # total simulation time (s)
# --- Initialization ---
t = np.arange(0, t_end + dt, dt)
x, y, psi = [0], [0], [0] # initial states
# --- Simulation loop (Forward Euler with sideslip) ---
for i in range(1, len(t)):
# Compute sideslip angle ฮฒ
beta = np.arctan((L_r * np.tan(delta)) / L)
# Kinematic equations
x_dot = v * np.cos(psi[-1] + beta)
y_dot = v * np.sin(psi[-1] + beta)
psi_dot = ((v / L) * np.cos(beta)) * np.tan(delta)
# Euler integration
x_new = x[-1] + x_dot * dt
y_new = y[-1] + y_dot * dt
psi_new = psi[-1] + psi_dot * dt
x.append(x_new)
y.append(y_new)
psi.append(psi_new)
# --- Print final results ---
phi_deg = np.degrees(psi[-1]) % 360
print(f"Input parameter: v = {v} (m), v_kmh = {v * (3600/1000)} (kmh), Steering angle = {steer_angle} (deg)")
print(f"Final position: x = {x[-1]:.3f} m, y = {y[-1]:.3f} m")
print(f"Final orientation (psi): {phi_deg:.3f} degrees")
# --- Animation setup ---
fig, ax = plt.subplots()
ax.set_aspect('equal', adjustable='box')
ax.grid(True)
ax.set_xlabel("X Position (m)")
ax.set_ylabel("Y Position (m)")
ax.set_title("Bicycle Model Motion with Sideslip Angle ฮฒ")
line, = ax.plot([], [], 'b-', lw=2)
body, = ax.plot([], [], 'ro-', lw=3)
# Fix view limits
ax.set_xlim(-10, 40)
ax.set_ylim(-10, 40)
cg_point, = ax.plot([], [], 'go', markersize=6, label='CG')
def init():
line.set_data([], [])
body.set_data([], [])
cg_point.set_data([], [])
return line, body, cg_point
def update(frame):
line.set_data(x[:frame], y[:frame])
x_rear = x[frame] - L_r * np.cos(psi[frame])
y_rear = y[frame] - L_r * np.sin(psi[frame])
x_front = x[frame] + L_f * np.cos(psi[frame])
y_front = y[frame] + L_f * np.sin(psi[frame])
body.set_data([x_rear, x_front], [y_rear, y_front])
cg_point.set_data([x[frame]], [y[frame]]) # plot CG marker
return line, body, cg_point
ani = animation.FuncAnimation(fig, update, frames=len(t), init_func=init, blit=True, interval=50, repeat=False)
plt.show()
List video penjelasan:
Link Google Drive
Link: https://drive.google.com/drive/u/1/folders/1ke-CscGbgzJ9C-4wgWMYWP_i0KJlX38o