Dokumen ini memberikan tutorial membuat crane sederhana menggunakan CoppeliaSim dengan melakukan langkah-langkah sebagai berikut: (1) menambahkan objek-objek dasar seperti kubus dan silinder untuk membentuk bagian-bagian crane, (2) mengatur ukuran dan posisi objek, (3) menambahkan sendi-sendi untuk menghubungkan bagian-bagian, (4) mengatur dinamika dan motorisasi sendi, dan (5) membuat
Tutorial Membuat Simple Crane Menggunakan Coppeliasim
1. PRAKTIKUM ALAT PENGEMBANGAN PERANGKAT LUNAK
TUTORIAL MEMBUAT CRANE SEDERHANA MENGGUNAKAN COPPELIASIM
LUSIANA DIYAN NINGRUM (2210181051)
2 D4 TEKNIK KOMPUTER B
POLITEKNIK ELEKTRONIKA NEGERI SURABAYA
SURABAYA
2020
2. TUTORIAL MEMBUAT CRANE SEDERHANA MENGGUNAKAN COPPELIASIM
A. Peralatan dan Bahan
1. PC/Laptop yang sudah terinstall software Simulator VREP/CoppeliaSim
B. Percobaan
1. Buka Software CoppeliaSim
2. Sebelum mulai membuat simulasi, Anda bisa mengatur ukuran dari lantai pada area kerja dengan
cara klik RezisableFlor, dan nanti akan muncul dialog box untuk memasukkan ukuran yang
diperlukan
3. Buat body Crane berbentuk kubus dengan cara klkik kanan pada area kerja. Add > Primitive shape
> Cuboid.
3. 4. Masukkan ukuran cuboid untuk X-coord = 1.2; Y-coord = 1.2; Z-coord = 0.3 > Tekan OK
5. Ganti nama Cuboid menjadi Base, dengan cara double klik untuk rename, setelah selesai tekan
Enter.
6. Sorot Base.Pilih Object/Item Translation/Porsition. Isikan pada tab position X-coord = -2 Lalu
close.
7. Beri warna pada Base dengan cara. Double Klik icon kubus pada nama Base. Maka akan muncul
dialog box seperti berikut
4. Pilih Adjust Color > Ambient/diffuse component. Ubah Saturation =0 dan Luminosity =0.36.
Maka Base akan berubah warna sebagai berikut
8. Buat tiang Crane dengan cara yang sama seperti membuat Base. Bedanya ukuran pada X-coord =
0.4, Y-coord = 0.4, dan Z-coord = 7.7
5. 9. Sorot Base.Pilih Object/Item Translation/Porsition. Isikan pada tab position X-coord = -2 Lalu
close.
Maka Base akan tampak seperti berikut.
10. Ubah nama Cuboid menjadi Tower
6. 11. Untuk menambahkan warna pada Tower. Dengan cara Double klik pada icon kubus. Lalu akan
muncul dialog box seperti berikut
12. Lakukan langkah yang sama seperti nomor 3. Masukkan ukuran X-coord = 11, Y-coord = 0.3, dan
Z-coord = 0.3
13. Ubah nama Cuboid menjadi Arm
hasil perubahan >
14. Untuk mengubah posisi Arm, sorot nama Arm kemudian pilih Object/Item Translation/Position >
Mouse Translation > Check along x dan along z.
Drag Arm menuju ke posisi yang sesuai, seperti berikut kemudian close dialog box Object/Item
Translation/Position
7. 15. Untuk menambahkan warna pada Arm. Dilakukan dengan cara. Double klik icon kubus pada Arm
maka akan mucul dialog box seperti berikut.
Pilih adjust Color > Ambient/diffuse component > Atur Blue = 0.
Maka tampilan Arm akan seperti gambar di bawah ini
8. 16. Lakukan langkah yang sama seperti no 3 untuk menambahkan beban. Ubah ukuran Cuboid menjadi
x=0.4m; y=0.4m; z=0.6m.
17. Ganti nama Cuboid menjadi CounterWeight
hasil perubahan >
18. Sorot CounterWeight. Pilih Object/Item Translation/Position > Mouse Translation. Check along x
dan along z.
9. Drag CounterWeight menuju ke posisi yang diperlukan, jika sudah sesuai lalu tekan close
19. Untuk memberi warna pada CounterWeight, lakukan Double klik icon kubus pada CounterWeight
maka akan mucul dialog box seperti berikut.
Pilih adjust Color->Ambient/diffuse component. Atur nilai RGB dan HSL untuk mendapatkan
warna yang anda inginkan. maka akan seperti berikut
10. Warna yang dihasilkan pada CounterWeight
20. Lakukan langkah yang sama dengan nomor 3 untuk membuat Crab. Masukkan ukuran X-coord =
0.55; Y-coord = 0.35; Z-coord = 0.35.
21. Ganti nama Cuboid menjadi Crab
hasil perubahan >
22. Sorot Crab. Pilih Object/Item Translation/Mouse Translation. Check along z.
11. Drag Crab menuju ke titik yang dikehendaki kemudian tekan close
23. Untuk memberi warna pada Crab. Dilakukan dengan cara. Double klik icon kubus pada Crab maka
akan mucul dialog box seperti berikut.
Pilih adjust Color->Ambient/diffuse component. Atur nilai RGB dan HSL untuk mendapatkan
warna yang anda inginkan. maka akan seperti berikut
Warna yang dihasilkan pada Crab
24. Klik Kanan pada area kerja. Pilih Add > Primitive Shape > Cylinder
12. 25. Masukkan ukuran cylinder. Pada X-coord = 0.1 dan Z-coord = 0.1
26. Ganti nama Cylinder menjadi UpperGuide
perubahan yang dihasilkan >
27. Sorot UpperGuide. Pilih Object/Item Translation/Position > Mouse Translation > Check along z.
13. Lalu drag UpperGuide sesuai dengan posisi yang dikehendaki
28. Klik kanan pada area kerja. Pilih Add > Primitive Shape > Cylinder
29. Masukkan ukuran untuk cylinder. X-coord = 0.6 dan Z-coord = 0.6
30. Ganti nama Cylinder0 menjadi Mess
hasil perubahan >
31. Sorot Mess. Pilih Object/Item Translation/Mouse Translation. Check along y dan along z.
14. Lalu drag Mess menuju posisi yang dikehendaki, kemudian tekan close
32. Untuk memberi warna pada Mess, lakukan Double klik icon kubus pada Mess maka akan mucul
dialog box seperti berikut.
15. Pilih adjust Color > Ambient/diffuse component. Atur nilai RGB dan HSL untuk mendapatkan
warna yang anda inginkan. maka akan seperti berikut
Perubahan warna yang dihasilkan :
33. Kelompokkan bagian – bagian penyusun Crane
hasil pengelompokan >
34. Untuk membuat Base menjadi non dinamic. Digunakan langkah seperti berikut. Double klik icon
kubus. Pilih show Dinamic Property Dialog. Maka akan muncul seperti berikut.
16. Un-check pada checkbox “Body is dynamic”
35. Untuk membuat Tower menjadi non dinamic. Digunakan langkah seperti berikut. Double klik icon
kubus. Pilih show Dinamic Property Dialog. Maka akan muncul seperti berikut.
17. Un-check pada checkbox “Body is dynamic”
36. Berikutnya kita menghubungkan Tower dengan Arm, dengan cara klik kanan pada area kerja > add
> Joint > Revolute
18. 37. Ganti nama Revolute_joint menjadi Arm_actuator
hasil perubahan nama >
38. Sorot nama Arm_actuator, kemudian klik icon scene properties dan ubah lenght =0.3, dan
Diameter=0.6
39. Pindah posisi dari objek tersebut dengan cara Pilih Object/Item Translation/Position > Mouse
Translation. Check along x dan along z.
Drag objek menuju posisi yang dikehendaki
19. 40. Sorot Revolute_joint dan Tower. Pilih Object/Item Translation/Position. Klik Apply to Selection.
41. Sorot Revolute_joint. Pilih Object/Item Translation/Mouse Translation. Check along Z.
Drag Revolute_joint ke posisi yang dikehendaki
42. Drag arm_actuator ke dalam Tower kemudian letakkan Arm pada Arm_actuator seperti pada
gambar di bawah ini
hasil pengelompokan >
20. 43. Double klik icon sehingga akan mucul dialog box. Klik Show Dinamic Property Dialog. Check
Motor Enable. Atur Target= 10, Maksimum = 5e3.
44. Tambahkan force sensor dengan cara klik kanan pada area kerja > Add > Force Sensor
45. Sorot Force_sensor. Klik icon Object/Item Translation/Position > Mouse Translation > centang
checkbox along X dan along Z. Kemudian letakkan sensor tepat dibawah CounterWeight
21. 46. Lakukan pengelompokan dengan cara drag Force_sensor ke dalam Arm. Sehingga susunannya
menjadi seperti gambar di bawah ini.
> >
47. Tambahkan Object baru kembali, yaitu Primastic joint, dengan cara Klik kanan pada area kerja >
Add > Joint > Prismatic
48. Sorot Prismatic_joint. Pilih Object item shift/ Mouse Translation. Check alng x dan z. Sejajarkan
pada Crab.
49. Double Klik icon . Atur Length = 0.3 dan Diameters= 0.05
22. 50. Klik Show Dynamic Property. Check Motor Enable. Atur Target =1 dan Maksimum = 1e3. Check
Lock Motor When.
51. Sorot Prismatic_Joint. Pilih Object Rotate/Rotation. Check Own Frame. Atur Y=90.
hasil >
23. 52. Ubah nama Prismatic_joint menjadi Crab_actuator
hasil rename >
53. Drag Crab_actuator ke dalam Arm, kemudian drag Crab ke dalam Crab actuator
hasil pengelompokan >
54. Sorot Crab kemudian klik icon Scene Object Properties > Show dynamic properties dialog >
centang “Motor Enable” dan “Lock motor…” > masukkan nilai target velocity = 1 dan Maximum
force = 1e3
55. Ubah susunan object menjadi seperti di bawah ini
hasilnya menjadi >
24. 56. Sorot Crab kemudian pilih icon Object/Item Translation/Position > centang along X kemudian drag
posisi Crab sesuai dengan yang dibutuhkan
57. Sorot Crab. Klik icon Scene Object Properties. Isikan nilai Pos range = 6.5
58. Atur ulang susunan object menjadi seperti pada gambar di bawah ini
25. 59. Tambahkan object baru yakni Prismatic dengan cara klik kanan pada area kerja > Add > Joint >
Prismatic
60. Ganti nama Prismatic_joint menjadi Hoist_actuator
hasil penamaan >
61. Double klik icon . Atur Pos.min=-5.3 , Position=-5.3 dan Pos. Range= 5.3. atur lenght=0.5 ,
Diameter=0.05
26. 62. Sorot Hoist_actuator. Klik Object/Item Translation/Position > Mouse Translation. Check along x
dan along z.
Drag Hoist_actuator ke posisi yang dikehendaki
63. Sorot Hoist_actuator. Klik Object/Item Translation/Position > Mouse Translation. Check along x
dan along z dan drag object menuju posisi yang dikehendaki kemudian klik close
64. Lakukan pengelompokan object kembali sehingga susunan object menjadi seperti gambar di bawah
ini
27. 65. Tambahkan object baru yakni spherical dengan cara klik kanan pada area kerja > Add > joint >
spherical
66. Sorot Spherical. Klik Object Position/Mouse Translation. Check along x dan along z.
Drag object ke posisi seperti pada gambar berikut
28. 67. Satukan object dengan cara tekan Shift + sorot Spherical_joint, Crab, Hoist_actuator kemudian
tekan Object/Item Translation/Position > Klik Apply X to sel. dan Klik Apply Y to sel. > close
68. Susun kembali pengelompokan object sehingga terbentuk seperti pada gambar di bawah ini
69. Edit dynamic properties dari Hoist akuator, menjadi seperti berikut, isi Maximum force = 6e3
29. 70. Selanjutnya kita akan membuat GUI pada Crane. Dilakukan dengan cara Double klik script pada
Rezible_floor. Maka akan mncul kedua window untuk menuliskan script
Tuliskan script di bawah ini
function sysCall_init()
model=sim.getObjectAssociatedWithScript(sim.handle_self)
e1=sim.getObjectHandle('ResizableFloor_5_25_element')
e2=sim.getObjectHandle('ResizableFloor_5_25_visibleElement')
end
function sysCall_cleanup()
hideDlg()
end
function sysCall_nonSimulation()
local s=sim.getObjectSelection()
if s and #s>=1 and s[1]==model then
showDlg()
else
hideDlg()
end
end
function sysCall_beforeSimulation()
30. hideDlg()
end
function sysCall_beforeSimulation()
hideDlg()
end
function updateFloor()
local c=readInfo()
local sx=c['sizes'][1]/5
local sy=c['sizes'][2]/5
local sizeFact=sim.getObjectSizeFactor(model)
sim.setObjectParent(e1,-1,true)
local child=sim.getObjectChild(model,0)
while child~=-1 do
sim.removeObject(child)
child=sim.getObjectChild(model,0)
end
local xPosInit=(sx-1)*-2.5*sizeFact
local yPosInit=(sy-1)*-2.5*sizeFact
local f1,f2
for x=1,sx,1 do
for y=1,sy,1 do
if (x==1)and(y==1) then
sim.setObjectParent(e1,model,true)
f1=e1
else
f1=sim.copyPasteObjects({e1},0)[1]
f2=sim.copyPasteObjects({e2},0)[1]
sim.setObjectParent(f1,model,true)
sim.setObjectParent(f2,f1,true)
end
local p=sim.getObjectPosition(f1,sim.handle_parent)
p[1]=xPosInit+(x-1)*5*sizeFact
p[2]=yPosInit+(y-1)*5*sizeFact
sim.setObjectPosition(f1,sim.handle_parent,p)
end
end
end
function getDefaultInfoForNonExistingFields(info)
if not info['version'] then
info['version']=0
end
if not info['sizes'] then
info['sizes']={1,1}
end
end
function readInfo()
local data=sim.readCustomDataBlock(model,'XYZ_FLOOR_INFO')
if data then
data=sim.unpackTable(data)
else
31. data={}
end
getDefaultInfoForNonExistingFields(data)
return data
end
function writeInfo(data)
if data then
sim.writeCustomDataBlock(model,'XYZ_FLOOR_INFO',sim.packTable(data))
else
sim.writeCustomDataBlock(model,'XYZ_FLOOR_INFO','')
end
end
function updateUi()
local c=readInfo()
local sizeFact=sim.getObjectSizeFactor(model)
simUI.setLabelText(ui,1,'X-size (m):
'..string.format("%.2f",c['sizes'][1]*sizeFact),true)
simUI.setSliderValue(ui,2,c['sizes'][1]/5,true)
simUI.setLabelText(ui,3,'Y-size (m):
'..string.format("%.2f",c['sizes'][2]*sizeFact),true)
simUI.setSliderValue(ui,4,c['sizes'][2]/5,true)
end
function sliderXChange(ui,id,newVal)
local c=readInfo()
c['sizes'][1]=newVal*5
writeInfo(c)
updateUi()
updateFloor()
end
function sliderYChange(ui,id,newVal)
local c=readInfo()
c['sizes'][2]=newVal*5
writeInfo(c)
updateUi()
updateFloor()
end
function closeEventHandler(h)
sim.removeScript(sim.handle_self)
end
function showDlg()
if not ui then
xml = [[
<ui title="Speed Control" closeable="true" resizable="false"
activate="false">
<group layout="form" flat="true">
<label text="X-size (m): 1" id="1"/>
<hslider tick-position="above" tick-interval="1" minimum="1"
maximum="5" on-change="sliderXChange" id="2"/>
<label text="Y-size (m): 1" id="3"/>
32. <hslider tick-position="above" tick-interval="1" minimum="1"
maximum="5" on-change="sliderYChange" id="4"/>
</group>
<label text="" style="* {margin-left: 400px;}"/>
</ui>
]]
ui=simUI.create(xml)
if 2==sim.getInt32Parameter(sim.intparam_platform) then
-- To fix a Qt bug on Linux
sim.auxFunc('activateMainWindow')
end
updateUi()
end
end
function hideDlg()
if ui then
simUI.destroy(ui)
ui=nil
end
end
71. Tambahkan GUI pada Base dengan cara klik kanan pada Base. Pilih add=>associated child script=>non
Thearts. Maka akan muncul icon script seperti berikut.
72. Double klik pada icon script di samping Base yang akan menampilkan halaman untuk menuliskan script
33. Tuliskan script di bawah ini :
function sysCall_init()
arm=sim.getObjectHandle('Arm_Actuator')
crab=sim.getObjectHandle('Crab_Aktuator')
hoist=sim.getObjectHandle('Hoist_aktuator')
suction=sim.getScriptHandle('suctionPad')
xml = [[
<ui title="Speed Control" closeable="true" resizable="false"
activate="false">
<group layout="form" flat="true">
<label text="Arm speed (rad/s): 0.00" id="1"/>
<hslider tick-position="above" tick-interval="1" minimum="-10"
maximum="10" on-change="actuateArm" id="2"/>
<label text="Crab speed (m/s): 0.00" id="3"/>
<hslider tick-position="above" tick-interval="1" minimum="-10"
maximum="10" on-change="actuateCrab" id="4"/>
<label text="Hoist speed (m/s): 0.00" id="5"/>
<hslider tick-position="above" tick-interval="1" minimum="-10"
maximum="10" on-change="actuateHoist" id="6"/>
<label text="Magnet" id="7"/>
<button text="deactivated" on-click="actuateMagnet"
checkable="true" id="8"/>
</group>
<label text="" style="* {margin-left: 400px;}"/>
</ui>
]]
ui=simUI.create(xml)
end
function actuateArm(ui,id,newVal)
local val = 0.02*newVal
34. sim.setJointTargetVelocity(arm,val)
simUI.setLabelText(ui,1,string.format("Arm speed (rad/s): %.2f",val))
end
function actuateCrab(ui,id,newVal)
local val = 0.15*newVal
sim.setJointTargetVelocity(crab,val)
simUI.setLabelText(ui,3,string.format("Crab speed (m/s): %.2f",val))
end
function actuateHoist(ui,id,newVal)
local val = 0.25*newVal
sim.setJointTargetVelocity(hoist,val)
simUI.setLabelText(ui,5,string.format("Hoist speed (m/s): %.2f",val))
end
function actuateMagnet(ui)
local state = sim.getScriptSimulationParameter(suction,'active')
if state then
sim.setScriptSimulationParameter(suction,'active','false')
simUI.setButtonText(ui,8,"deactivated")
else
sim.setScriptSimulationParameter(suction,'active','true')
simUI.setButtonText(ui,8,"activated")
end
end
73. Tambahkan Magnet pada area kerja. Klik model Browser.
Component=>Grippers=>Suction pad. Maka akan muncul gambar seperti berikut. Pada dialog
box information klik OK > klik icon
74. Klik kanan pada area kerja. Pilih add > Primitive Shape >Cylinder. Biarkan ukuran pada
setting default nya. Lalu OK.
35. Kemudian akan tampil gambar cylinder seperti berikut
75. Sorot Cylinder > Klik Object/Item Translation/Position > Centang along Z > drag cylinder
pada posisi yang dikehendaki
76. Tambahkan object baru yakni force sensor dengan cara Klik kanan pda area kerja > Add >
Force Sensor
36. Kemudian akan tampil gambar seperti berikut
77. Sorot Force sensor > Klik Object/Item Translation/Position > Centang along Z > drag force
sensor pada posisi yang dikehendaki
78. Sorot Force Sensor dengan suction Pad. Pilih Object Item Translation/Position > Position >
Apply X to sel. Maka akan tampak seperti berikut.
79. Lakukan pengelompokan object seperti berikut
37. 80. Double klik Hoist aktuator. Ubah Pos.Range=6 dan Pos. Min =6.
81. Lakukan kembali pengelompokan pada object
82. Sorot Cylinder dan Hoist aktuator. Pilih Object Time shift/Position/ Apply X to sel dan Apply
Y to sel. Maka akan tampak seperti berikut.
38. 83. Sorot Cylinder. Pilih Object Time Shift/ Mouse Position. Check along z. Atur pada posisi
berikut.
84. Double klik icon pada suction pad. Ganti kondisi “active” dari True menjadi False > klik
Close
Hasil perubahan value :