BAB I : PENDAHULUAN
1.1 Latar Belakang
Memprogram Robot humanoid memerlukan waktu yang lama dan banyak percobaan.
Salah satu masalah adalah terbatasnya robot yang siap diprogram. Robot tidak siap
diprogram dapat disebabkan karena masalah mekanik atau jumlah robot yang dapat
diprogram sedikit. Dari masalah tersebut programer harus bergantian ketika ingin
mencoba source code untuk motion pada robot mereka. Untuk mengatasi masalah
tersebut programer dapat menggunakan simulasi. Untuk mempermudah programmer
dalam memprogram robot maka digunakan software Robot Operating System (ROS).
Dengan menggunakan ROS maka hasil source code program yang dibuat tidak perlu
diubah melainkan bisa langsung di upload ke Robot. Untuk simulasi dapat digunakan
Gazebo yang merupakan bagian dari ROS. Dengan menggunakan Gazebo programer
tidak perlu memerlukan robot asli untuk mengimplementasikan programnya.
1.3 Tujuan
- Mengetahui apa itu robot humanoid
- Mengetahui apa itu ROS Gazebo
- Dapat menggunakan program simulasi (ROS)?
- Dapat merancang gerakan robot humanoid?
1.4 Manfaat
- Mempermudah dalam proses development robot
- Menambah pengalaman dalam memprogram robot humanoid
Pada tahun 2009 dipilih Ketua Program Studi yang pertama dimana saat itu
Program Studi masih berada di bawah Fakultas Teknik. Pada tahun 2009 ijin
perpanjangan penyelenggaraan dari Dikti nomor 3355/D/T/K-N/2009 turun dengan
perubahan nama Informatika dengan masa berlaku sampai tanggal 31 Agustus 2013. Pada
tahun tersebut Program Studi Informatika / Ilmu Komputer terbagi menjadi 2 konsentrasi
yaitu konsentrasi Teknik Informatika dan Sistem Komputer. Namun pada tahun 2011
konsentrasi Sistem Komputer memisahkan diri dari Program Studi Informatika/Ilmu
Komputer menjadi Program Studi Sistem Komputer sampai sekarang dengan berbagai
perubahan menjadi Program Studi Teknik Komputer. Sehingga Program Studi Teknik
Informatika leluasa untuk berkembang dengan berbagai konsentrasi atau disebut juga
keminatan.
Malang, Indonesia-65145
Email : filkom@ub.ac.id
2.3.1 Visi
Menjadi program studi bereputasi internasional dalam pengkajian dan
pengembangan Teknologi Sistem Pintar (Smart Systems Technology) untuk menghasilkan
solusi Informatika dalam rangka mendukung pembangunan bangsa melalui integrasi Tri
Dharma Perguruan Tinggi pada tahun 2020.
2.3.2 Misi
1. Menyelenggarakan pendidikan sarjana yang berkualitas di bidang Informatika
yang berorientasi pada pengkajian ilmu pengetahuan dan kewirausahaan.
2. Mengembangkan penelitian yang inovatif, berkualitas dan kontributif dalam
pengkajian dan pengembangan Teknologi Sistem Pintar (Smart Systems
Technology).
3. Melaksanakan pengabdian pada masyarakat secara berkelanjutan untuk
menerapkan hasil-hasil pengkajian dan pengembangan Teknologi Sistem Pintar
(Smart Systems Technology) dalam rangka mendukung pembangunan bangsa.
4. Membangun kerjasama yang konstruktif dan dinamis dengan seluruh pemangku
kepentingan di tingkat nasional maupun internasional.
2.3.3 Tujuan
1. Menghasilkan lulusan sarjana yang memiliki kompetensi yang sesuai dengan
standar nasional dan internasional di bidang Informatika.
2. Menghasilkan produk-produk penelitian yang inovatif dan berkualitas sehingga
mampu memberikan kontribusi dalam pengembangan Teknologi Sistem Pintar
(Smart Systems Technology).
3. Menghasilkan produk-produk terapan Teknologi Sistem Pintar (Smart Systems
Technology) sebagai solusi di masyarakat dalam rangka mendukung
pembangunan bangsa.
4. Meningkatkan kuantitas dan efektivitas kerjasama dengan para pemangku
kepentingan dalam rangka menunjang tercapainya visi misi program studi.
2.3.4 Moto
Engineering our wise future through informatics Dengan moto ini, kami bertekad
untuk selalu melakukan perbaikan kualitas (continuous improvement) dalam berbagai
aspek, khususnya dalam pengembangan sumber daya manusia.
Sumber: (www.jtif.filkom.ub.ac.id)
1. Dekan
● Wakil Dekan Bidang Akademik
● Wakil Dekan Bidang Umum dan Keuangan
● Wakil Dekan Bidang Kemahasiswaan
2. Senat Fakultas
3. Bagian Pembantu Dekan
● Sub bagian BPPM
● Sub bagian PSK
● Sub bagian BPJ
● Sub bagian GJM
4. Laboratorium
5. Jurusan Teknik Informatika
● Sub bagian UJM
● Prodi Sarjana Teknik Informatika
● Prodi Sarjana Teknik Komputer
● Prodi Magister Ilmu Komputer
● Kelompok Jabatan Fungsional Dosen
6. Jurusan Sistem Informasi
● Sub bagian UJM
● Prodi Sarjana Sistem Informasi
● Prodi Sarjana Teknologi Informasi
● Prodi Sarjana Pendidikan Teknologi Informasi
● Kelompok Jabatan Fungsional Dosen
7. Bagian Tata Usaha
● Sub bagian Akademik dan Kemahasiswaan
● Sub bagian Umum dan Keuangan
3.2.2 Simulasi
Simulasi adalah proses mendesain sebuah model dari sebuah lingkungan fisikal
yang teoritis ataupun aktual. Simulasi memungkinkan investigasi, desain, visualisasi,
bahkan pengujian sebuah objek yang tidak ada (virtual). Hasil dari sistem yang belum
dibuat dapat dilihat. Sebuah sistem mungkin dapat menghasilkan ledakan dan bahaya
bagi manusia, tetapi dengan simulasi mereka dapat ditampung dalam lingkungan yang
terpisah dari dunia nyata.
Robot Operating System (ROS), adalah sebuah framework software open source
yang mendukung pengembangan sistem yang kompleks dan modular di sebuah
lingkungan komputasi terdistribusi. Walaupun komponen inti dari ROS dapat dibilang
umum, tugas dan fungsi utama dari ROS dan ekosistemnya adalah untuk pengembangan
dan riset terhadap robot. Bagian yang kinerjanya penting ditulis dalam bahasa C++, tetapi
aplikasi yang bekerja diatas framework dapat ditulis di C++, Python ataupun Lisp.
BAB IV : METODOLOGI
4.1 Diagram alir metode
ROS Melodic merupakan versi dari ROS yang dikembangkan untuk umumnya
digunakan di Ubuntu 18.04 . Alasan digunakannya ROS versi ini adalah karena ada
beberapa paket yang tidak bisa dieksekusi secara langsung oleh versi ROS yang terbaru
(Noetic). Adapun beberapa fitur yang digunakan untuk PKL ini adalah:
4.2.3 Gazebo
Python merupakan salah satu bahasa pemrograman yang bersifat multi platform.
Alasan digunakan Python karena python lebih mudah digunakan sehingga cocok
digunakan untuk mendevelop robot yang dicoding oleh beberapa orang. Versi yang
digunakan yaitu versi Python 3.8 Merupakan versi python terbaru sehingga lebih stabil
dan masih terus diupdate.
4.2.5 PLEN2
Gerakan dibagi menjadi empat posisi utama, keempat posisi ini akan dicerminkan untuk
membuat gerakan simetris yang membuat PLEN untuk bergerak sebanyak 2 langkah.
Selanjutnya adalah melakukan Clone projek PLEN dari repository github Mori dan
diletakan pada folder diluar catkin_ws, di dalamnya kita akan mengcopy isi dari folder
plen_ros ke folder src di catkin_ws
~/$ cd catkin_ws/
Untuk projek dari PLEN ini hanya mengambil dari packet PLEN_ROS untuk
diimplentasikan pada Gazeboo jadi packet selain PLEN_ROS pada src bisa dihapus atau
dipindahkan. Langkah selanjuttnya melakukan build pada packet ini dengan perintah.
~/catkin_ws/$ catkin_make
Untuk mendesain Gerakan robot peneliti mengunakan phyton script untuk membuat
program yang otomatis melakukan Publish dan Suscribe pada topic
trajectory_msgs.msg dan source code untuk melakukan publish ada pada table
dibawah.
re_walk.py
1 #! /usr/bin/env python
2
3 from __future__ import print_function
4
5 import rospy
6 from trajectory_msgs.msg import JointTrajectory,
JointTrajectoryPoint
7
8 import numpy as np
9
10
11 class AllJoints:
12 def __init__(self, joint_name_lst):
13 rospy.loginfo('Waiting for joint trajectory Publisher')
14 self.jtp =
rospy.Publisher('/plen/joint_trajectory_controller/command',
15 JointTrajectory,
16 queue_size=1)
17 rospy.loginfo('Found joint trajectory Publisher!')
18 self.joint_name_lst = joint_name_lst
19 self.jtp_zeros = np.zeros(len(joint_name_lst))
20
21 def move_jtp(self, pos, duration):
22 jtp_msg = JointTrajectory()
23 jtp_msg.joint_names = self.joint_name_lst
24 point = JointTrajectoryPoint()
25 point.positions = pos
26 point.velocities = self.jtp_zeros
27 point.accelerations = self.jtp_zeros
28 point.effort = self.jtp_zeros
29 point.time_from_start = rospy.Duration(duration) #
rospy.Duration(1.0 / 60.0)
30 jtp_msg.points.append(point)
31 self.jtp.publish(jtp_msg)
32
33 def reset_move_jtp(self, pos):
34 jtp_msg = JointTrajectory()
35 self.jtp.publish(jtp_msg)
36 jtp_msg = JointTrajectory()
37 jtp_msg.joint_names = self.joint_name_lst
38 point = JointTrajectoryPoint()
39 point.positions = pos
40 point.velocities = self.jtp_zeros
41 point.accelerations = self.jtp_zeros
42 point.effort = self.jtp_zeros
43 point.time_from_start = rospy.Duration(0.1)
44 jtp_msg.points.append(point)
45 self.jtp.publish(jtp_msg)
46
47
48 class PlenEnvironment:
49 def __init__(self):
50 rospy.init_node('joint_position_node')
51 self.link_name_lst = [
52 'plen::base_footprint', 'plen::l_shoulder',
'plen::ls_servo',
53 'plen::l_elbow', 'plen::l_hip', 'plen::l_thigh',
'plen::l_knee',
54 'plen::l_shin', 'plen::l_ankle', 'plen::l_foot',
55 'plen::r_shoulder', 'plen::rs_servo',
'plen::r_elbow',
56 'plen::r_hip', 'plen::r_thigh', 'plen::r_knee',
'plen::r_shin',
57 'plen::r_ankle', 'plen::r_foot'
58 ]
59
60 self.joint_name_lst = [
61 'rb_servo_r_hip', 'r_hip_r_thigh', 'r_thigh_r_knee',
62 'r_knee_r_shin', 'r_shin_r_ankle', 'r_ankle_r_foot',
63 'lb_servo_l_hip', 'l_hip_l_thigh', 'l_thigh_l_knee',
64 'l_knee_l_shin', 'l_shin_l_ankle', 'l_ankle_l_foot',
65 'torso_r_shoulder', 'r_shoulder_rs_servo',
're_servo_r_elbow',
66 'torso_l_shoulder', 'l_shoulder_ls_servo',
'le_servo_l_elbow'
67 ]
68 self.all_joints = AllJoints(self.joint_name_lst)
69 self.starting_pos = self.all_joints.jtp_zeros
70
71 def reset(self):
72 self.joint_pos = self.starting_pos
73 print('RESET:', self.joint_pos)
74 self.all_joints.reset_move_jtp(self.starting_pos)
75
76 def step(self, action, duration):
77 print('STEP:', action)
78 self.joint_pos = action
79 self.all_joints.move_jtp(self.joint_pos, duration)
80
81
82 if __name__ == '__main__':
83 plen = PlenEnvironment()
84
85 plen.reset()
86
87 joint_val=np.zeros(18)
88 plen.step(joint_val,0.1)
89 rospy.sleep(1)
90 #=====Movement
Below=================================================
91 print("Hinge on Right")
92 joint_val[1] = 0.2 #hinge
93 joint_val[5] = 0.2 #hinge
94 joint_val[7] = 0.2 #hinge
95 joint_val[11]= 0.2 #hinge
96 joint_val[13]= 0.2 #arms
97 joint_val[16]= -0.2 #arms
98 plen.step(joint_val,0.5)
99 rospy.sleep(0.5)
100 #raw_input("Press Enter to continue...")
101
102 print("Hinge on Right 2")
103 #joint_val[1]= 0.3
104 #joint_val[5]= 0.3 #hinge don't change
105 #joint_val[6]= 0.2
106 #joint_val[7]= 0.3
107 #joint_val[11]= 0.3
108 joint_val[1] = 0.19
109 joint_val[8] = -0.6
110 joint_val[9] = 0.6
111 joint_val[10]= 0.3
112 plen.step(joint_val,0.5)
113 rospy.sleep(0.5)
114 #raw_input("Press Enter to continue...")
115
116 print("l")
117 joint_val[10]= -0.3
118 joint_val[8]= -0.6
119 joint_val[9]= 0.3
120 plen.step(joint_val,0.5)
121 rospy.sleep(0.5)
122 #raw_input("Press Enter to continue...")
123
124 print("Left Touchdown + Right Angle")
125 joint_val[1] = -0.2 #hinge
126 joint_val[5] = -0.2 #hinge
127 joint_val[7] = -0.2 #hinge
128 joint_val[11]= -0.2 #hinge
129 joint_val[2]= 0
130 joint_val[3]= 0 #paha
131 joint_val[4]= -0.3 #mata_kaki depan (pitch)
132 joint_val[10]= -0.3 #mata_kaki depan (pitch)
133 joint_val[12]= 0.6 #arms
134 joint_val[13]= 0.6 #arms opposing force
135 plen.step(joint_val,1)
136 rospy.sleep(1)
137 raw_input("Press Enter to continue...")
138 for i in range(3):
139 print("step 1")
140 joint_val=np.zeros(18)
141 joint_val[1] = 0.2 #hinge
142 joint_val[5] = 0.2 #hinge
143 joint_val[7] = 0.2 #hinge
144 joint_val[11]= 0.2 #hinge
145 joint_val[13]= 0.2 #arms
146 joint_val[16]= -0.2 #arms
147 plen.step(joint_val,0.5)
148 rospy.sleep(0.5)
149
150 print("step 2")#==============
151 joint_val[1] = 0.19
152 joint_val[8] = -0.6
153 joint_val[9] = 0.6
154 joint_val[10]= 0.3
155 plen.step(joint_val,0.5)
156 rospy.sleep(0.5)
157
158 print("step 3")
159 joint_val[10]= -0.3
160 joint_val[8]= -0.6
161 joint_val[9]= 0.3
162 plen.step(joint_val,0.5)
163 rospy.sleep(0.5)
164
165 print("step 4")#=========
166 joint_val[1] = -0.2 #hinge
167 joint_val[5] = -0.2 #hinge
168 joint_val[7] = -0.2 #hinge
169 joint_val[11]= -0.2 #hinge
170 joint_val[2] = 0
171 joint_val[3] = 0 #paha
172 joint_val[4] = -0.3 #mata_kaki depan (pitch)
173 joint_val[10]= -0.3 #mata_kaki depan (pitch)
174 joint_val[12]= 0.6 #arms
175 joint_val[13]= 0.6 #arms opposing force
176 plen.step(joint_val,1)
177 rospy.sleep(1)
178 print("step 1 reverse")
179 joint_val=np.zeros(18)
180 joint_val[1] = -0.2 #hinge
181 joint_val[5] = -0.2 #hinge
182 joint_val[7] = -0.2 #hinge
183 joint_val[11]= -0.2 #hinge
184 joint_val[13]= 0.2 #arms
185 joint_val[16]= -0.2 #arms
186 plen.step(joint_val,1)
187 rospy.sleep(2)
188
189 print("step 2 reverse")#==============
190 joint_val[7] = -0.19
191 joint_val[2] = 0.6
192 joint_val[3] = -0.6
193 joint_val[4]= -0.3
194 plen.step(joint_val,0.7)
195 rospy.sleep(1)
196 #raw_input("Press Enter to continue...")
197
198 print("step 3 reverse")
199 joint_val[4]= 0.3
200 joint_val[2]= 0.6
201 joint_val[3]= -0.3
202 plen.step(joint_val,1)
203 rospy.sleep(1)
204
205 print("step 4")#=========
206 joint_val[1] = 0.2 #hinge
207 joint_val[5] = 0.2 #hinge
208 joint_val[7] = 0.2 #hinge
209 joint_val[11]= 0.2 #hinge
210 joint_val[8] = 0
211 joint_val[9] = 0 #paha
212 joint_val[4] = 0.3 #mata_kaki depan (pitch)
213 joint_val[10]= 0.3 #mata_kaki depan (pitch)
214 joint_val[15]= -0.7 #arms
215 joint_val[16]= -0.9 #arms opposing force
216 plen.step(joint_val,1)
217 rospy.sleep(1)
Langkah selanjutnya setelah program Phyton script sudah dibuat maka harus dilakukan
build kembali dengan perintah catkin_make setelah packet dari PLEN sudah terisntal
maka projek moribots sudah bisa dijalankan.
5.1 Hasil
5.2 Pembahasan
BAB VI : Penutup
REFERENSI
Quigley, M.. “ROS: an open-source Robot Operating System.” ICRA 2009 (2009).