add few worlds

This commit is contained in:
Brian Delhaisse
2019-07-14 01:33:47 +02:00
parent 3b4fcf1614
commit 53eec5b466
54 changed files with 219070 additions and 5 deletions
-5
View File
@@ -136,9 +136,6 @@ implemented_robots = list(implemented_robots)
# TODO: fix problem with icub
implemented_robots.remove('icub')
print(len(implemented_robots), implemented_robots)
# create dictionary that maps robot names to robot classes
robot_names_to_classes = {}
for robot_name in implemented_robots:
@@ -162,5 +159,3 @@ for robot_name in implemented_robots:
robot_names_to_classes[name] = cls
implemented_robots = set(list(robot_names_to_classes.keys()))
print(len(implemented_robots), implemented_robots)
@@ -0,0 +1,4 @@
Brian Delhaisse:
- For the bottles, I split them into different OBJ files, and centered them.
- For the ikea glass, I rescaled it and converted it into an OBJ file.
@@ -0,0 +1,17 @@
This file is under the Creative Commons Attribution 4.0 International license:
http://creativecommons.org/licenses/by/4.0/
Your are free to:
Share - copy and redistribute the material in any medium or format
Adapt - remix, transform, and build upon the material for any purpose, even commercially.
The licensor cannot revoke these freedoms as long as you follow the license terms.
Under the following terms:
Attribution: If you want distribute this work, or derivates, you must attribute it to
zacko <https://sketchfab.com/zacko> (for the bottles)
jiri kuba <https://sketchfab.com/kuba.jirka>
@@ -0,0 +1,12 @@
# Blender MTL File: 'None'
# Material Count: 1
newmtl glass.001
Ns 96.078431
Ka 1.000000 1.000000 1.000000
Kd 0.640000 0.640000 0.640000
Ks 0.500000 0.500000 0.500000
Ke 0.000000 0.000000 0.000000
Ni 1.000000
d 1.000000
illum 2
File diff suppressed because it is too large Load Diff
@@ -0,0 +1,12 @@
# Blender MTL File: 'None'
# Material Count: 1
newmtl glass
Ns 96.078431
Ka 1.000000 1.000000 1.000000
Kd 0.640000 0.640000 0.640000
Ks 0.500000 0.500000 0.500000
Ke 0.000000 0.000000 0.000000
Ni 1.000000
d 1.000000
illum 2
File diff suppressed because it is too large Load Diff
@@ -0,0 +1,12 @@
# Blender MTL File: 'None'
# Material Count: 1
newmtl glass.002
Ns 96.078431
Ka 1.000000 1.000000 1.000000
Kd 0.640000 0.640000 0.640000
Ks 0.500000 0.500000 0.500000
Ke 0.000000 0.000000 0.000000
Ni 1.000000
d 1.000000
illum 2
File diff suppressed because it is too large Load Diff
@@ -0,0 +1,10 @@
# Blender MTL File: 'None'
# Material Count: 1
newmtl None
Ns 0
Ka 0.000000 0.000000 0.000000
Kd 0.8 0.8 0.8
Ks 0.8 0.8 0.8
d 1
illum 2
File diff suppressed because it is too large Load Diff
@@ -0,0 +1,12 @@
# Blender MTL File: 'None'
# Material Count: 1
newmtl IkeaGlassMaterial
Ns 92.156863
Ka 1.000000 1.000000 1.000000
Kd 0.366454 0.568019 0.640002
Ks 0.500000 0.500000 0.500000
Ke 0.000000 0.000000 0.000000
Ni 1.000000
d 1.000000
illum 2
@@ -0,0 +1,349 @@
# Blender v2.76 (sub 0) OBJ File: ''
# www.blender.org
mtllib ikea_glass.mtl
o IkeaGlass_Cylinder.001
v -0.014142 0.014142 0.012480
v 0.000000 0.020000 0.012480
v 0.000000 0.020000 0.005280
v -0.014142 0.014142 0.005280
v -0.014142 -0.014142 0.012480
v -0.016122 -0.016122 0.063420
v -0.019460 -0.008062 0.063420
v -0.022800 0.000000 0.063420
v -0.020000 0.000000 0.012480
v 0.000000 -0.020000 0.012480
v 0.000000 -0.022800 0.063420
v -0.008062 -0.019462 0.063420
v 0.014142 -0.014142 0.012480
v 0.016122 -0.016122 0.063420
v 0.008062 -0.019462 0.063420
v 0.020000 0.000000 0.012480
v 0.022800 0.000000 0.063420
v 0.019460 -0.008062 0.063420
v 0.014142 0.014142 0.012480
v 0.016122 0.016122 0.063420
v 0.019460 0.008062 0.063420
v 0.000000 0.022800 0.063420
v 0.008062 0.019460 0.063420
v -0.016122 0.016122 0.063420
v -0.008062 0.019460 0.063420
v -0.019460 0.008062 0.063420
v -0.016970 -0.016970 0.066030
v -0.017734 -0.017734 0.088680
v -0.023548 -0.009754 0.088680
v -0.022534 -0.009334 0.066030
v -0.009334 -0.022534 0.066030
v -0.009754 -0.023548 0.088680
v 0.000000 -0.024000 0.066030
v 0.000000 -0.025080 0.088680
v 0.009334 -0.022534 0.066030
v 0.009754 -0.023548 0.088680
v 0.016970 -0.016970 0.066030
v 0.017734 -0.017734 0.088680
v 0.022534 -0.009334 0.066030
v 0.023548 -0.009754 0.088680
v 0.024000 0.000000 0.066030
v 0.025080 0.000000 0.088680
v 0.022534 0.009334 0.066030
v 0.023548 0.009754 0.088680
v 0.016970 0.016970 0.066030
v 0.017734 0.017734 0.088680
v 0.009334 0.022534 0.066030
v 0.009754 0.023548 0.088680
v 0.000000 0.024000 0.066030
v 0.000000 0.025080 0.088680
v -0.009334 0.022534 0.066030
v -0.009754 0.023548 0.088680
v -0.016970 0.016970 0.066030
v -0.017734 0.017734 0.088680
v -0.022534 0.009334 0.066030
v -0.023548 0.009754 0.088680
v -0.024000 0.000000 0.066030
v -0.025080 0.000000 0.088680
v -0.020000 0.000000 0.005280
v 0.014142 0.014142 0.005280
v 0.020000 0.000000 0.005280
v 0.014142 -0.014142 0.005280
v 0.000000 -0.020000 0.005280
v -0.014142 -0.014142 0.005280
v -0.012728 0.012728 0.012524
v -0.012392 0.012392 0.012394
v 0.000000 0.017524 0.012394
v 0.000000 0.018000 0.012524
v -0.012728 -0.012728 0.012524
v -0.018000 0.000000 0.012524
v -0.020948 0.000000 0.064098
v -0.017726 -0.007342 0.064040
v -0.014812 -0.014812 0.064098
v 0.000000 -0.018000 0.012524
v -0.007342 -0.017726 0.064040
v 0.000000 -0.020948 0.064098
v 0.012728 -0.012728 0.012524
v 0.007342 -0.017726 0.064040
v 0.014812 -0.014812 0.064098
v 0.018000 0.000000 0.012524
v 0.017726 -0.007342 0.064040
v 0.020948 0.000000 0.064098
v 0.012728 0.012728 0.012524
v 0.017726 0.007342 0.064040
v 0.014812 0.014812 0.064098
v 0.007342 0.017726 0.064040
v 0.000000 0.020948 0.064098
v -0.007342 0.017726 0.064040
v -0.014812 0.014812 0.064098
v -0.017726 0.007342 0.064040
v -0.015632 -0.015632 0.066610
v -0.020776 -0.008606 0.066584
v -0.021616 -0.008954 0.088680
v -0.016256 -0.016256 0.088680
v -0.008606 -0.020776 0.066584
v -0.008954 -0.021616 0.088680
v 0.000000 -0.022106 0.066610
v 0.000000 -0.022990 0.088680
v 0.008606 -0.020776 0.066584
v 0.008954 -0.021616 0.088680
v 0.015632 -0.015632 0.066610
v 0.016256 -0.016256 0.088680
v 0.020776 -0.008606 0.066584
v 0.021616 -0.008954 0.088680
v 0.022106 0.000000 0.066610
v 0.022990 0.000000 0.088680
v 0.020776 0.008606 0.066584
v 0.021616 0.008954 0.088680
v 0.015632 0.015632 0.066610
v 0.016256 0.016256 0.088680
v 0.008606 0.020776 0.066584
v 0.008954 0.021616 0.088680
v 0.000000 0.022106 0.066610
v 0.000000 0.022990 0.088680
v -0.008606 0.020776 0.066584
v -0.008954 0.021616 0.088680
v -0.015632 0.015632 0.066610
v -0.016256 0.016256 0.088680
v -0.020776 0.008606 0.066584
v -0.021616 0.008954 0.088680
v -0.022106 0.000000 0.066610
v -0.022990 0.000000 0.088680
v -0.017524 0.000000 0.012394
v -0.012392 -0.012392 0.012394
v 0.000000 -0.017524 0.012394
v 0.012392 -0.012392 0.012394
v 0.017524 0.000000 0.012394
v 0.012392 0.012392 0.012394
vn -0.382700 0.923900 0.000000
vn -0.922700 -0.382200 -0.050700
vn -0.382200 -0.922700 -0.050700
vn 0.382200 -0.922700 -0.050700
vn 0.922700 -0.382200 -0.050700
vn 0.922700 0.382200 -0.050700
vn 0.382200 0.922700 -0.050700
vn -0.382200 0.922700 -0.050700
vn -0.922700 0.382200 -0.050700
vn -0.807300 -0.588200 -0.047100
vn -0.588200 -0.807300 -0.047100
vn -0.155000 -0.986800 -0.047100
vn 0.155000 -0.986800 -0.047100
vn 0.588200 -0.807300 -0.047100
vn 0.807300 -0.588200 -0.047100
vn 0.986800 -0.155000 -0.047100
vn 0.986800 0.155000 -0.047100
vn 0.807300 0.588200 -0.047100
vn 0.588200 0.807300 -0.047100
vn 0.155000 0.986800 -0.047100
vn -0.155000 0.986800 -0.047100
vn -0.588200 0.807300 -0.047100
vn -0.807300 0.588200 -0.047100
vn -0.732900 0.202500 -0.649500
vn -0.986800 -0.155000 -0.047100
vn -0.732900 -0.202500 -0.649500
vn -0.986800 0.155000 -0.047100
vn -0.661500 0.375200 -0.649400
vn -0.375200 0.661500 -0.649400
vn -0.202500 0.732900 -0.649500
vn 0.202500 0.732900 -0.649500
vn 0.375200 0.661500 -0.649400
vn 0.661500 0.375200 -0.649400
vn 0.732900 0.202500 -0.649500
vn 0.732900 -0.202500 -0.649500
vn 0.661500 -0.375200 -0.649400
vn 0.374800 -0.661400 -0.649700
vn 0.202400 -0.733100 -0.649300
vn -0.202400 -0.733100 -0.649300
vn -0.374800 -0.661400 -0.649600
vn -0.374900 -0.661500 -0.649500
vn -0.374800 -0.661400 -0.649700
vn -0.374900 -0.661400 -0.649600
vn -0.661500 -0.375200 -0.649400
vn 0.000000 0.000000 -1.000000
vn 0.923900 -0.382700 0.000000
vn -0.923900 -0.382700 0.000000
vn 0.382700 0.923900 0.000000
vn 0.382700 -0.923900 0.000000
vn -0.923900 0.382700 0.000000
vn 0.923900 0.382700 0.000000
vn -0.382700 -0.923900 0.000000
vn 0.108900 -0.262900 0.958700
vn 0.922700 0.382200 0.051000
vn 0.382200 0.922700 0.051000
vn -0.382200 0.922700 0.051000
vn -0.922700 0.382200 0.051000
vn -0.922700 -0.382200 0.051000
vn -0.382200 -0.922700 0.051000
vn 0.382200 -0.922700 0.051000
vn 0.922700 -0.382200 0.051000
vn 0.805800 0.590800 0.039700
vn 0.590800 0.805800 0.039700
vn 0.152000 0.987600 0.039700
vn -0.152000 0.987600 0.039700
vn -0.590800 0.805800 0.039700
vn -0.805800 0.590800 0.039700
vn -0.987600 0.152000 0.039700
vn -0.987600 -0.152000 0.039700
vn -0.805800 -0.590800 0.039700
vn -0.590800 -0.805800 0.039700
vn -0.152000 -0.987600 0.039700
vn 0.152000 -0.987600 0.039700
vn 0.590800 -0.805800 0.039700
vn 0.805800 -0.590800 0.039700
vn 0.726800 -0.204000 0.655900
vn 0.987600 0.152000 0.039700
vn 0.726800 0.204000 0.655900
vn 0.987600 -0.152000 0.039700
vn 0.658000 -0.369600 0.656000
vn 0.369600 -0.658000 0.656000
vn 0.204000 -0.726800 0.655900
vn -0.204000 -0.726800 0.655900
vn -0.369600 -0.658000 0.656000
vn -0.658000 -0.369600 0.656000
vn -0.726800 -0.204000 0.655900
vn -0.726800 0.204000 0.655900
vn -0.658000 0.369600 0.656000
vn -0.369600 0.658000 0.656000
vn -0.204000 0.726800 0.655900
vn 0.204000 0.726800 0.655900
vn 0.369600 0.658000 0.656000
vn 0.658000 0.369600 0.656000
vn 0.000000 0.000000 1.000000
vn -0.262900 0.108900 0.958700
vn 0.262900 0.108900 0.958700
vn -0.108900 -0.262900 0.958700
vn -0.108900 0.262900 0.958700
vn 0.262900 -0.108900 0.958700
vn -0.262900 -0.108900 0.958700
vn 0.108900 0.262900 0.958700
usemtl IkeaGlassMaterial
s 1
f 1//1 2//1 3//1 4//1
f 5//2 6//2 7//2 8//2 9//2
f 10//3 11//3 12//3 6//3 5//3
f 13//4 14//4 15//4 11//4 10//4
f 16//5 17//5 18//5 14//5 13//5
f 19//6 20//6 21//6 17//6 16//6
f 2//7 22//7 23//7 20//7 19//7
f 1//8 24//8 25//8 22//8 2//8
f 9//9 8//9 26//9 24//9 1//9
f 27//10 28//10 29//10 30//10
f 31//11 32//11 28//11 27//11
f 33//12 34//12 32//12 31//12
f 35//13 36//13 34//13 33//13
f 37//14 38//14 36//14 35//14
f 39//15 40//15 38//15 37//15
f 41//16 42//16 40//16 39//16
f 43//17 44//17 42//17 41//17
f 45//18 46//18 44//18 43//18
f 47//19 48//19 46//19 45//19
f 49//20 50//20 48//20 47//20
f 51//21 52//21 50//21 49//21
f 53//22 54//22 52//22 51//22
f 55//23 56//23 54//23 53//23
f 57//24 55//24 26//24 8//24
f 30//25 29//25 58//25 57//25
f 7//26 30//26 57//26 8//26
f 58//27 56//27 55//27 57//27
f 26//28 55//28 53//28 24//28
f 24//29 53//29 51//29 25//29
f 25//30 51//30 49//30 22//30
f 22//31 49//31 47//31 23//31
f 23//32 47//32 45//32 20//32
f 20//33 45//33 43//33 21//33
f 21//34 43//34 41//34 17//34
f 17//35 41//35 39//35 18//35
f 18//36 39//36 37//36 14//36
f 14//37 37//37 35//37 15//37
f 15//38 35//38 33//38 11//38
f 11//39 33//39 31//39 12//39
f 12//40 31//41 27//42 6//43
f 6//44 27//44 30//44 7//44
f 59//45 4//45 3//45 60//45 61//45 62//45 63//45 64//45
f 16//46 13//46 62//46 61//46
f 5//47 9//47 59//47 64//47
f 2//48 19//48 60//48 3//48
f 13//49 10//49 63//49 62//49
f 9//50 1//50 4//50 59//50
f 19//51 16//51 61//51 60//51
f 10//52 5//52 64//52 63//52
f 65//53 66//53 67//53 68//53
f 69//54 70//54 71//54 72//54 73//54
f 74//55 69//55 73//55 75//55 76//55
f 77//56 74//56 76//56 78//56 79//56
f 80//57 77//57 79//57 81//57 82//57
f 83//58 80//58 82//58 84//58 85//58
f 68//59 83//59 85//59 86//59 87//59
f 65//60 68//60 87//60 88//60 89//60
f 70//61 65//61 89//61 90//61 71//61
f 91//62 92//62 93//62 94//62
f 95//63 91//63 94//63 96//63
f 97//64 95//64 96//64 98//64
f 99//65 97//65 98//65 100//65
f 101//66 99//66 100//66 102//66
f 103//67 101//67 102//67 104//67
f 105//68 103//68 104//68 106//68
f 107//69 105//69 106//69 108//69
f 109//70 107//70 108//70 110//70
f 111//71 109//71 110//71 112//71
f 113//72 111//72 112//72 114//72
f 115//73 113//73 114//73 116//73
f 117//74 115//74 116//74 118//74
f 119//75 117//75 118//75 120//75
f 121//76 71//76 90//76 119//76
f 92//77 121//77 122//77 93//77
f 72//78 71//78 121//78 92//78
f 122//79 121//79 119//79 120//79
f 90//80 89//80 117//80 119//80
f 89//81 88//81 115//81 117//81
f 88//82 87//82 113//82 115//82
f 87//83 86//83 111//83 113//83
f 86//84 85//84 109//84 111//84
f 85//85 84//85 107//85 109//85
f 84//86 82//86 105//86 107//86
f 82//87 81//87 103//87 105//87
f 81//88 79//88 101//88 103//88
f 79//89 78//89 99//89 101//89
f 78//90 76//90 97//90 99//90
f 76//91 75//91 95//91 97//91
f 75//92 73//92 91//92 95//92
f 73//93 72//93 92//93 91//93
f 123//94 124//94 125//94 126//94 127//94 128//94 67//94 66//94
f 80//95 127//95 126//95 77//95
f 69//96 124//96 123//96 70//96
f 68//97 67//97 128//97 83//97
f 77//98 126//98 125//98 74//98
f 70//99 123//99 66//99 65//99
f 83//100 128//100 127//100 80//100
f 74//101 125//101 124//101 69//101
f 56//94 58//94 122//94 120//94
f 52//94 54//94 118//94 116//94
f 48//94 50//94 114//94 112//94
f 44//94 46//94 110//94 108//94
f 40//94 42//94 106//94 104//94
f 36//94 38//94 102//94 100//94
f 32//94 34//94 98//94 96//94
f 29//94 28//94 94//94 93//94
f 54//94 56//94 120//94 118//94
f 50//94 52//94 116//94 114//94
f 46//94 48//94 112//94 110//94
f 42//94 44//94 108//94 106//94
f 38//94 40//94 104//94 102//94
f 34//94 36//94 100//94 98//94
f 28//94 32//94 96//94 94//94
f 58//94 29//94 93//94 122//94
@@ -0,0 +1,2 @@
Brian Delhaisse: Compared to the original, I kept one pancake and scaled/translated/rotated it. I also converted it from FBX to OBJ.
@@ -0,0 +1,3 @@
Pancake: Soidev <https://sketchfab.com/soidev>
Pan: Toomy <http://www.sweethome3d.com/freeModels.jsp>
@@ -0,0 +1,3 @@
- The license for the pancake is the `LICENSE.TXT` file.
- The license for the pan is the `BLENDSWAP_LICENSE.txt` file.
@@ -0,0 +1,16 @@
This file is under the Creative Commons Attribution 4.0 International license:
http://creativecommons.org/licenses/by/4.0/
Your are free to:
Share - copy and redistribute the material in any medium or format
Adapt - remix, transform, and build upon the material for any purpose, even commercially.
The licensor cannot revoke these freedoms as long as you follow the license terms.
Under the following terms:
Attribution: If you want distribute this work, or derivates, you must attribute it to
Soidev <https://sketchfab.com/soidev>
@@ -0,0 +1,115 @@
Free Art License 1.3 (FAL 1.3)
Preamble
The Free Art License grants the right to freely copy, distribute, and transform creative works without infringing the authors rights.
The Free Art License recognizes and protects these rights. Their implementation has been reformulated in order to allow everyone to use creations of the human mind in a creative manner, regardless of their types and ways of expression.
While the publics access to creations of the human mind usually is restricted by the implementation of copyright law, it is favoured by the Free Art License. This license intends to allow the use of a works resources; to establish new conditions for creating in order to increase creation opportunities. The Free Art License grants the right to use a work, and acknowledges the right holders and the users rights and responsibility.
The invention and development of digital technologies, Internet and Free Software have changed creation methods: creations of the human mind can obviously be distributed, exchanged, and transformed. They allow to produce common works to which everyone can contribute to the benefit of all.
The main rationale for this Free Art License is to promote and protect these creations of the human mind according to the principles of copyleft: freedom to use, copy, distribute, transform, and prohibition of exclusive appropriation.
Definitions
« work » either means the initial work, the subsequent works or the common work as defined hereafter:
« common work » means a work composed of the initial work and all subsequent contributions to it (originals and copies). The initial author is the one who, by choosing this license, defines the conditions under which contributions are made.
« Initial work » means the work created by the initiator of the common work (as defined above), the copies of which can be modified by whoever wants to
« Subsequent works » means the contributions made by authors who participate in the evolution of the common work by exercising the rights to reproduce, distribute, and modify that are granted by the license.
« Originals » (sources or resources of the work) means all copies of either the initial work or any subsequent work mentioning a date and used by their author(s) as references for any subsequent updates, interpretations, copies or reproductions.
« Copy » means any reproduction of an original as defined by this license.
1. OBJECT
The aim of this license is to define the conditions under which one can use this work freely.
2. SCOPE
This work is subject to copyright law. Through this license its author specifies the extent to which you can copy, distribute, and modify it.
2.1 FREEDOM TO COPY (OR TO MAKE REPRODUCTIONS)
You have the right to copy this work for yourself, your friends or any other person, whatever the technique used.
2.2 FREEDOM TO DISTRIBUTE, TO PERFORM IN PUBLIC
You have the right to distribute copies of this work; whether modified or not, whatever the medium and the place, with or without any charge, provided that you:
attach this license without any modification to the copies of this work or indicate precisely where the license can be found,
specify to the recipient the names of the author(s) of the originals, including yours if you have modified the work,
specify to the recipient where to access the originals (either initial or subsequent).
The authors of the originals may, if they wish to, give you the right to distribute the originals under the same conditions as the copies.
2.3 FREEDOM TO MODIFY
You have the right to modify copies of the originals (whether initial or subsequent) provided you comply with the following conditions:
all conditions in article 2.2 above, if you distribute modified copies;
indicate that the work has been modified and, if it is possible, what kind of modifications have been made;
distribute the subsequent work under the same license or any compatible license.
The author(s) of the original work may give you the right to modify it under the same conditions as the copies.
3. RELATED RIGHTS
Activities giving rise to authors rights and related rights shall not challenge the rights granted by this license.
For example, this is the reason why performances must be subject to the same license or a compatible license. Similarly, integrating the work in a database, a compilation or an anthology shall not prevent anyone from using the work under the same conditions as those defined in this license.
4. INCORPORATION OF THE WORK
Incorporating this work into a larger work that is not subject to the Free Art License shall not challenge the rights granted by this license.
If the work can no longer be accessed apart from the larger work in which it is incorporated, then incorporation shall only be allowed under the condition that the larger work is subject either to the Free Art License or a compatible license.
5. COMPATIBILITY
A license is compatible with the Free Art License provided:
it gives the right to copy, distribute, and modify copies of the work including for commercial purposes and without any other restrictions than those required by the respect of the other compatibility criteria;
it ensures proper attribution of the work to its authors and access to previous versions of the work when possible;
it recognizes the Free Art License as compatible (reciprocity);
it requires that changes made to the work be subject to the same license or to a license which also meets these compatibility criteria.
6. YOUR INTELLECTUAL RIGHTS
This license does not aim at denying your authors rights in your contribution or any related right. By choosing to contribute to the development of this common work, you only agree to grant others the same rights with regard to your contribution as those you were granted by this license. Conferring these rights does not mean you have to give up your intellectual rights.
7. YOUR RESPONSIBILITIES
The freedom to use the work as defined by the Free Art License (right to copy, distribute, modify) implies that everyone is responsible for their own actions.
8. DURATION OF THE LICENSE
This license takes effect as of your acceptance of its terms. The act of copying, distributing, or modifying the work constitutes a tacit agreement. This license will remain in effect for as long as the copyright which is attached to the work. If you do not respect the terms of this license, you automatically lose the rights that it confers.
If the legal status or legislation to which you are subject makes it impossible for you to respect the terms of this license, you may not make use of the rights which it confers.
9. VARIOUS VERSIONS OF THE LICENSE
This license may undergo periodic modifications to incorporate improvements by its authors (instigators of the « Copyleft Attitude » movement) by way of new, numbered versions.
You will always have the choice of accepting the terms contained in the version under which the copy of the work was distributed to you, or alternatively, to use the provisions of one of the subsequent versions.
10. SUB-LICENSING
Sub-licenses are not authorized by this license. Any person wishing to make use of the rights that it confers will be directly bound to the authors of the common work.
11. LEGAL FRAMEWORK
This license is written with respect to both French law and the Berne Convention for the Protection of Literary and Artistic Works.
USER GUIDE
How to use the Free Art License?
To benefit from the Free Art License, you only need to mention the following elements on your work:
[Name of the author, title, date of the work. When applicable, names of authors of the common work and, if possible, where to find the originals].
Copyleft: This is a free work, you can copy, distribute, and modify it under the terms of the Free Art License http://artlibre.org/licence/lal/en/
Why to use the Free Art License?
1.To give the greatest number of people access to your work.
2.To allow it to be distributed freely.
3.To allow it to evolve by allowing its copy, distribution, and transformation by others.
4.So that you benefit from the resources of a work when it is under the Free Art License: to be able to copy, distribute or transform it freely.
5.But also, because the Free Art License offers a legal framework to disallow any misappropriation. It is forbidden to take hold of your work and bypass the creative process for ones exclusive possession.
When to use the Free Art License?
Any time you want to benefit and make others benefit from the right to copy, distribute and transform creative works without any exclusive appropriation, you should use the Free Art License. You can for example use it for scientific, artistic or educational projects.
What kinds of works can be subject to the Free Art License?
The Free Art License can be applied to digital as well as physical works.
You can choose to apply the Free Art License on any text, picture, sound, gesture, or whatever sort of stuff on which you have sufficient authors rights.
Historical background of this license:
It is the result of observing, using and creating digital technologies, free software, the Internet and art. It arose from the « Copyleft Attitude » meetings which took place in Paris in 2000. For the first time, these meetings brought together members of the Free Software community, artists, and members of the art world. The goal was to adapt the principles of Copyleft and free software to all sorts of creations. http://www.artlibre.org
Copyleft Attitude, 2007.
You can make reproductions and distribute this license verbatim (without any changes).
Translation : Jonathan Clarke, Benjamin Jean, Griselda Jung, Fanny Mourguet, Antoine Pitrou.
Thanks to framalang.org
@@ -0,0 +1,32 @@
# Blender MTL File: 'None'
# Material Count: 3
newmtl black
Ns 96.078431
Ka 0.000000 0.000000 0.000000
Kd 0.250000 0.250000 0.250000
Ks 0.000000 0.000000 0.000000
Ke 0.000000 0.000000 0.000000
Ni 1.000000
d 1.000000
illum 2
newmtl gris_acier
Ns 101.960784
Ka 0.686270 0.686270 0.686270
Kd 1.000000 1.000000 1.000000
Ks 0.200000 0.200000 0.200000
Ke 0.000000 0.000000 0.000000
Ni 1.000000
d 1.000000
illum 2
newmtl manche
Ns 96.078431
Ka 0.000000 0.000000 0.000000
Kd 0.300000 0.300000 0.300000
Ks 0.000000 0.000000 0.000000
Ke 0.000000 0.000000 0.000000
Ni 1.000000
d 1.000000
illum 2
File diff suppressed because it is too large Load Diff
@@ -0,0 +1,13 @@
# Blender MTL File: 'None'
# Material Count: 1
newmtl pancake
Ns 94.117647
Ka 1.000000 1.000000 1.000000
Kd 0.800000 0.800000 0.800000
Ks 0.500000 0.500000 0.500000
Ke 0.000000 0.000000 0.000000
Ni 1.000000
d 1.000000
illum 2
map_Kd pancake.png
File diff suppressed because it is too large Load Diff
Binary file not shown.

After

Width:  |  Height:  |  Size: 5.9 MiB

@@ -0,0 +1,2 @@
Brian Delhaisse: Compared to the original, I rescaled/translated/rotated the shinai and change the dimensions of the tsuba.
@@ -0,0 +1,16 @@
This file is under the Creative Commons Attribution 4.0 International license:
http://creativecommons.org/licenses/by/4.0/
Your are free to:
Share - copy and redistribute the material in any medium or format
Adapt - remix, transform, and build upon the material for any purpose, even commercially.
The licensor cannot revoke these freedoms as long as you follow the license terms.
Under the following terms:
Attribution: If you want distribute this work, or derivates, you must attribute it to
Flightt <https://sketchfab.com/Flightt>
Binary file not shown.

After

Width:  |  Height:  |  Size: 229 KiB

@@ -0,0 +1,33 @@
# Blender MTL File: 'None'
# Material Count: 3
newmtl lambert2SG
Ns 96.078431
Ka 0.000000 0.000000 0.000000
Kd 1.000000 0.000000 0.000000
Ks 0.500000 0.500000 0.500000
Ke 0.000000 0.000000 0.000000
Ni 1.000000
d 0.000000
illum 6
newmtl lambert3SG
Ns 96.078431
Ka 0.000000 0.000000 0.000000
Kd 1.000000 1.000000 1.000000
Ks 0.500000 0.500000 0.500000
Ke 0.000000 0.000000 0.000000
Ni 1.000000
d 0.000000
illum 6
newmtl lambert4SG
Ns 96.078431
Ka 0.000000 0.000000 0.000000
Kd 0.000000 0.000000 0.000000
Ks 0.500000 0.500000 0.500000
Ke 0.000000 0.000000 0.000000
Ni 1.000000
d 1.000000
illum 2
map_Kd shinai.jpg
File diff suppressed because it is too large Load Diff
@@ -0,0 +1,2 @@
Brian Delhaisse: Compared to the originals, I rescaled/translated/rotated the boxes. For the arrow_box, I also made the box more rectangular (one of the corner was weird, it didn't have a right angle).
@@ -0,0 +1,17 @@
This file is under the Creative Commons Attribution 4.0 International license:
http://creativecommons.org/licenses/by/4.0/
Your are free to:
Share - copy and redistribute the material in any medium or format
Adapt - remix, transform, and build upon the material for any purpose, even commercially.
The licensor cannot revoke these freedoms as long as you follow the license terms.
Under the following terms:
Attribution: If you want distribute this work, or derivates, you must attribute it to
NikR <https://sketchfab.com/NikR> (for the amazon box)
Shabbba <https://sketchfab.com/dan2004> (for the arrow box)
Binary file not shown.

After

Width:  |  Height:  |  Size: 452 KiB

@@ -0,0 +1,13 @@
# Blender MTL File: 'None'
# Material Count: 1
newmtl crate_texture
Ns 96.078431
Ka 1.000000 1.000000 1.000000
Kd 0.640000 0.640000 0.640000
Ks 0.500000 0.500000 0.500000
Ke 0.000000 0.000000 0.000000
Ni 1.000000
d 1.000000
illum 2
map_Kd amazon_box.jpg
@@ -0,0 +1,50 @@
# Blender v2.76 (sub 0) OBJ File: ''
# www.blender.org
mtllib amazon_box.mtl
o Crate01
v -0.181159 0.183694 -0.000000
v 0.183591 0.183694 0.000000
v 0.183591 -0.181055 0.000000
v -0.181159 -0.181055 -0.000000
v -0.181159 0.183694 0.364750
v -0.181159 -0.181055 0.364750
v 0.183591 -0.181055 0.364750
v 0.183591 0.183694 0.364750
vt 0.323500 0.998000
vt 0.002000 0.998000
vt 0.002000 0.676500
vt 0.323500 0.676500
vt 0.323500 0.002000
vt 0.323500 0.323500
vt 0.002000 0.323500
vt 0.002000 0.002000
vt 0.339300 0.339200
vt 0.660700 0.339300
vt 0.660700 0.660700
vt 0.339300 0.660700
vt 0.660800 0.323500
vt 0.339300 0.323500
vt 0.339300 0.002000
vt 0.660800 0.002000
vt 0.339300 0.676500
vt 0.660700 0.676500
vt 0.660700 0.998000
vt 0.339300 0.998000
vt 0.002000 0.339300
vt 0.323500 0.339300
vt 0.323500 0.660700
vt 0.002000 0.660700
vn 0.000000 0.000000 -1.000000
vn 0.000000 0.000000 1.000000
vn -1.000000 0.000000 -0.000000
vn 0.000000 -1.000000 0.000000
vn 1.000000 0.000000 0.000000
vn 0.000000 1.000000 0.000000
usemtl crate_texture
s 1
f 1/1/1 2/2/1 3/3/1 4/4/1
f 5/5/2 6/6/2 7/7/2 8/8/2
f 1/9/3 4/10/3 6/11/3 5/12/3
f 4/13/4 3/14/4 7/15/4 6/16/4
f 3/17/5 2/18/5 8/19/5 7/20/5
f 2/21/6 1/22/6 5/23/6 8/24/6
Binary file not shown.

After

Width:  |  Height:  |  Size: 370 KiB

@@ -0,0 +1,13 @@
# Blender MTL File: 'None'
# Material Count: 1
newmtl box
Ns 94.117647
Ka 1.000000 1.000000 1.000000
Kd 0.800000 0.800000 0.800000
Ks 0.500000 0.500000 0.500000
Ke 0.000000 0.000000 0.000000
Ni 1.000000
d 1.000000
illum 2
map_Kd arrow_box.jpg
@@ -0,0 +1,50 @@
# Blender v2.76 (sub 0) OBJ File: ''
# www.blender.org
mtllib arrow_box.mtl
o Cube.003_Cube.008
v -0.100000 0.100000 -0.100000
v -0.100000 0.100000 0.095785
v 0.100000 0.100000 -0.100000
v 0.100000 0.100000 0.100000
v -0.100000 -0.100000 -0.100000
v -0.100000 -0.100000 0.100000
v 0.100000 -0.100000 -0.100000
v 0.099303 -0.100051 0.102703
vt 0.497917 0.638342
vt 0.248735 0.638342
vt 0.248735 0.389159
vt 0.497917 0.389159
vt 0.749382 0.642088
vt 0.749382 0.891272
vt 0.500199 0.891272
vt 0.500199 0.642088
vt 0.500576 0.639318
vt 0.251393 0.639318
vt 0.251393 0.390135
vt 0.500576 0.390135
vt 0.500199 0.390899
vt 0.500199 0.141716
vt 0.749382 0.141716
vt 0.749382 0.390899
vt 0.749382 0.639318
vt 0.500199 0.639318
vt 0.500199 0.390135
vt 0.749382 0.390135
vt 0.249382 0.639318
vt 0.000199 0.639318
vt 0.000199 0.390135
vt 0.249382 0.390135
vn 0.000000 1.000000 0.000000
vn 1.000000 -0.001700 0.001700
vn -0.000100 -1.000000 -0.000100
vn -1.000000 0.000000 0.000000
vn -0.000000 0.000000 -1.000000
vn -0.017300 0.017300 0.999700
usemtl box
s 1
f 1/1/1 2/2/1 4/3/1 3/4/1
f 3/5/2 4/6/2 8/7/2 7/8/2
f 7/9/3 8/10/3 6/11/3 5/12/3
f 5/13/4 6/14/4 2/15/4 1/16/4
f 3/17/5 7/18/5 5/19/5 1/20/5
f 8/21/6 4/22/6 2/23/6 6/24/6
@@ -0,0 +1,2 @@
Brian Delhaisse: Compared to the original, I rescaled/translated/rotated the conveyor, and split it into 2 parts (the conveyor and the belt).
Binary file not shown.

After

Width:  |  Height:  |  Size: 2.6 MiB

@@ -0,0 +1,16 @@
This file is under the Creative Commons Attribution 4.0 International license:
http://creativecommons.org/licenses/by/4.0/
Your are free to:
Share - copy and redistribute the material in any medium or format
Adapt - remix, transform, and build upon the material for any purpose, even commercially.
The licensor cannot revoke these freedoms as long as you follow the license terms.
Under the following terms:
Attribution: If you want distribute this work, or derivates, you must attribute it to
Scailman <https://sketchfab.com/scailman>
Binary file not shown.

After

Width:  |  Height:  |  Size: 474 KiB

@@ -0,0 +1,13 @@
# Blender MTL File: 'None'
# Material Count: 1
newmtl Belt
Ns 90.196078
Ka 1.000000 1.000000 1.000000
Kd 0.589840 0.589840 0.589840
Ks 0.175000 0.175000 0.175000
Ke 0.000000 0.000000 0.000000
Ni 1.000000
d 1.000000
illum 2
map_Kd RubberBelt.png
@@ -0,0 +1,229 @@
# Blender v2.76 (sub 0) OBJ File: ''
# www.blender.org
mtllib belt.mtl
o Conveyor01Belt_Untitled.003
v -0.946100 0.325000 0.180008
v -0.930100 0.325000 0.178108
v -0.930100 -0.325000 0.178108
v -0.946100 -0.325000 0.180008
v -0.960800 0.325000 0.185308
v -0.960800 -0.325000 0.185308
v -0.973800 0.325000 0.193508
v -0.973800 -0.325000 0.193508
v -0.984700 0.325000 0.204408
v -0.984700 -0.325000 0.204408
v -0.992900 0.325000 0.217408
v -0.992900 -0.325000 0.217408
v -0.998200 0.325000 0.232108
v -0.998200 -0.325000 0.232108
v -1.000100 0.325000 0.248108
v -1.000100 -0.325000 0.248108
v -0.998200 0.325000 0.264208
v -0.998200 -0.325000 0.264208
v -0.992900 0.325000 0.278908
v -0.992900 -0.325000 0.278908
v -0.984700 0.325000 0.291908
v -0.984700 -0.325000 0.291908
v -0.973800 0.325000 0.302708
v -0.973800 -0.325000 0.302708
v -0.960800 0.325000 0.311008
v -0.960800 -0.325000 0.311008
v -0.946100 0.325000 0.316308
v -0.946100 -0.325000 0.316308
v -0.930100 0.325000 0.318108
v -0.930100 -0.325000 0.318108
v 0.930300 0.325000 0.318108
v 0.930300 -0.325000 0.318108
v 0.946400 0.325000 0.316308
v 0.946400 -0.325000 0.316308
v 0.961100 0.325000 0.311008
v 0.961100 -0.325000 0.311008
v 0.974100 0.325000 0.302708
v 0.974100 -0.325000 0.302708
v 0.985000 0.325000 0.291908
v 0.985000 -0.325000 0.291908
v 0.993200 0.325000 0.278908
v 0.993200 -0.325000 0.278908
v 0.998500 0.325000 0.264208
v 0.998500 -0.325000 0.264208
v 1.000300 0.325000 0.248108
v 1.000300 -0.325000 0.248108
v 0.998500 0.325000 0.232108
v 0.998500 -0.325000 0.232108
v 0.993200 0.325000 0.217408
v 0.993200 -0.325000 0.217408
v 0.985000 0.325000 0.204408
v 0.985000 -0.325000 0.204408
v 0.974100 0.325000 0.193508
v 0.974100 -0.325000 0.193508
v 0.961100 0.325000 0.185308
v 0.961100 -0.325000 0.185308
v 0.946400 0.325000 0.180008
v 0.946400 -0.325000 0.180008
v 0.930300 0.325000 0.178108
v 0.930300 -0.325000 0.178108
vt 0.293700 0.991400
vt 0.293700 0.998500
vt 0.007200 0.998500
vt 0.007200 0.991400
vt 0.007200 0.984900
vt 0.293700 0.984900
vt 0.007200 0.979200
vt 0.293700 0.979200
vt 0.007200 0.974400
vt 0.293700 0.974400
vt 0.007200 0.968700
vt 0.293700 0.968700
vt 0.007200 0.962200
vt 0.293700 0.962200
vt 0.007200 0.955100
vt 0.293700 0.955100
vt 0.007200 0.948000
vt 0.293700 0.948000
vt 0.007200 0.941500
vt 0.293700 0.941500
vt 0.007200 0.935800
vt 0.293700 0.935800
vt 0.293700 0.931000
vt 0.007200 0.931000
vt 0.293700 0.925300
vt 0.007200 0.925300
vt 0.007200 0.918800
vt 0.293700 0.918800
vt 0.007200 0.911700
vt 0.293700 0.911700
vt 0.007200 0.091900
vt 0.293700 0.091900
vt 0.293700 0.084900
vt 0.007200 0.084900
vt 0.007200 0.078400
vt 0.293700 0.078400
vt 0.293700 0.072700
vt 0.007200 0.072700
vt 0.007200 0.067900
vt 0.293700 0.067900
vt 0.007200 0.062100
vt 0.293700 0.062100
vt 0.007200 0.055700
vt 0.293700 0.055700
vt 0.007200 0.048600
vt 0.293700 0.048600
vt 0.007200 0.041500
vt 0.293700 0.041500
vt 0.007200 0.035000
vt 0.293700 0.035000
vt 0.007200 0.029300
vt 0.293700 0.029300
vt 0.007200 0.024500
vt 0.293700 0.024500
vt 0.007200 0.018800
vt 0.293700 0.018800
vt 0.293700 0.012300
vt 0.007200 0.012300
vt 0.007200 0.005200
vt 0.293700 0.005200
vt 0.293800 0.100100
vt 0.577400 0.100100
vt 0.577400 0.911700
vt 0.293800 0.911700
vn -0.227200 0.000000 -0.973900
vn -0.057400 0.000000 -0.998300
vn -0.057400 -0.000000 -0.998400
vn -0.439400 0.000000 -0.898300
vn -0.625700 0.000000 -0.780100
vn -0.780000 0.000000 -0.625700
vn -0.898300 -0.000000 -0.439400
vn -0.973800 0.000000 -0.227200
vn -1.000000 0.000000 -0.000000
vn -1.000000 0.000000 0.000100
vn -0.973800 -0.000000 0.227200
vn -0.898300 0.000000 0.439400
vn -0.779800 0.000000 0.626000
vn -0.780200 0.000000 0.625600
vn -0.625700 0.000000 0.780100
vn -0.439600 0.000000 0.898200
vn -0.227000 0.000000 0.973900
vn -0.057400 -0.000000 0.998300
vn -0.057400 0.000000 0.998400
vn 0.057400 0.000000 0.998400
vn 0.227400 0.000000 0.973800
vn 0.227300 0.000000 0.973800
vn 0.439600 -0.000000 0.898200
vn 0.625700 0.000000 0.780100
vn 0.780100 0.000000 0.625700
vn 0.898300 -0.000000 0.439400
vn 0.973800 0.000000 0.227300
vn 0.973900 0.000000 0.227000
vn 1.000000 0.000000 0.000200
vn 1.000000 0.000000 -0.000300
vn 0.973800 0.000000 -0.227500
vn 0.973900 0.000000 -0.227000
vn 0.898400 0.000000 -0.439200
vn 0.898300 0.000000 -0.439400
vn 0.780100 0.000000 -0.625700
vn 0.625700 -0.000000 -0.780100
vn 0.439400 0.000000 -0.898300
vn 0.227200 0.000000 -0.973900
vn 0.057400 0.000000 -0.998300
usemtl Belt
s 1
f 1/1/1 2/2/2 3/3/3
f 3/3/3 4/4/1 1/1/1
f 4/4/1 6/5/4 5/6/4
f 5/6/4 1/1/1 4/4/1
f 8/7/5 7/8/5 5/6/4
f 5/6/4 6/5/4 8/7/5
f 10/9/6 9/10/6 7/8/5
f 7/8/5 8/7/5 10/9/6
f 12/11/7 11/12/7 9/10/6
f 9/10/6 10/9/6 12/11/7
f 14/13/8 13/14/8 11/12/7
f 11/12/7 12/11/7 14/13/8
f 14/13/8 16/15/9 15/16/10
f 15/16/10 13/14/8 14/13/8
f 16/15/9 18/17/11 17/18/11
f 17/18/11 15/16/10 16/15/9
f 18/17/11 20/19/12 19/20/12
f 19/20/12 17/18/11 18/17/11
f 22/21/13 21/22/14 19/20/12
f 19/20/12 20/19/12 22/21/13
f 23/23/15 21/22/14 22/21/13
f 22/21/13 24/24/15 23/23/15
f 25/25/16 23/23/15 24/24/15
f 24/24/15 26/26/16 25/25/16
f 28/27/17 27/28/17 25/25/16
f 25/25/16 26/26/16 28/27/17
f 27/28/17 28/27/17 30/29/18
f 30/29/18 29/30/19 27/28/17
f 32/31/20 31/32/20 29/30/19
f 29/30/19 30/29/18 32/31/20
f 33/33/21 31/32/20 32/31/20
f 32/31/20 34/34/22 33/33/21
f 36/35/23 35/36/23 33/33/21
f 33/33/21 34/34/22 36/35/23
f 37/37/24 35/36/23 36/35/23
f 36/35/23 38/38/24 37/37/24
f 38/38/24 40/39/25 39/40/25
f 39/40/25 37/37/24 38/38/24
f 42/41/26 41/42/26 39/40/25
f 39/40/25 40/39/25 42/41/26
f 44/43/27 43/44/28 41/42/26
f 41/42/26 42/41/26 44/43/27
f 46/45/29 45/46/30 43/44/28
f 43/44/28 44/43/27 46/45/29
f 48/47/31 47/48/32 45/46/30
f 45/46/30 46/45/29 48/47/31
f 48/47/31 50/49/33 49/50/34
f 49/50/34 47/48/32 48/47/31
f 50/49/33 52/51/35 51/52/35
f 51/52/35 49/50/34 50/49/33
f 52/51/35 54/53/36 53/54/36
f 53/54/36 51/52/35 52/51/35
f 56/55/37 55/56/37 53/54/36
f 53/54/36 54/53/36 56/55/37
f 57/57/38 55/56/37 56/55/37
f 56/55/37 58/58/38 57/57/38
f 60/59/39 59/60/39 57/57/38
f 57/57/38 58/58/38 60/59/39
f 3/61/3 2/62/2 59/63/39
f 59/63/39 60/64/39 3/61/3
@@ -0,0 +1,13 @@
# Blender MTL File: 'None'
# Material Count: 1
newmtl Conveyor
Ns 90.196078
Ka 1.000000 1.000000 1.000000
Kd 0.589840 0.589840 0.589840
Ks 0.175000 0.175000 0.175000
Ke 0.000000 0.000000 0.000000
Ni 1.000000
d 1.000000
illum 2
map_Kd Conveyor_diffuse.png
File diff suppressed because it is too large Load Diff
@@ -0,0 +1,77 @@
#!/usr/bin/env python
r"""Provide the flip pancake world.
"""
import os
import numpy as np
from pyrobolearn.worlds import BasicWorld
__author__ = "Brian Delhaisse"
__copyright__ = "Copyright 2019, PyRoboLearn"
__credits__ = ["Brian Delhaisse"]
__license__ = "GNU GPLv3"
__version__ = "1.0.0"
__maintainer__ = "Brian Delhaisse"
__email__ = "briandelhaisse@gmail.com"
__status__ = "Development"
# TODO: finish to implement the world, create corresponding environment (in `envs` folder) with state and reward.
class FlipPancakeWorld(BasicWorld):
r"""Flip pancake world
"""
def __init__(self, simulator, position=(0., 0., 0.), scale=(.75, .75, .75)):
"""
Initialize the world.
Args:
simulator (Simulator): the simulator instance.
position (tuple/list of 3 float, np.array[3]): position of the pan.
scale (tuple/list of 3 float): scaling factors in the (x,y,z) directions.
"""
super(FlipPancakeWorld, self).__init__(simulator)
mesh_path = os.path.dirname(os.path.abspath(__file__)) + '/../../meshes/manipulation/pancake/'
position = np.asarray(position)
# load the pan
self.pan = self.load_mesh(mesh_path + 'pan.obj', position=position, scale=scale, mass=0.120, flags=1)
# load the pancake
self.pancake = self.load_mesh(mesh_path + 'pancake.obj', position=position + np.array([0., 0., 0.1]),
scale=scale, mass=0.080, flags=0)
def reset(self, world_state=None):
super(FlipPancakeWorld, self).reset(world_state)
def step(self, sleep_dt=None):
super(FlipPancakeWorld, self).step(sleep_dt)
# Test
if __name__ == '__main__':
from itertools import count
import pyrobolearn as prl
# create simulator
sim = prl.simulators.Bullet()
# create world
world = FlipPancakeWorld(sim, position=(0.5, 0., 0.))
# # create manipulator
# robot = world.load_robot('kuka_iiwa')
#
# # attach first shinai to robot end effector
# world.attach(body1=robot, body2=world.pan, link1=robot.end_effectors[0], link2=-1, joint_axis=[0., 0., 0.],
# parent_frame_position=[0., 0., 0.2], child_frame_position=[-0.05, 0., 0.],
# parent_frame_orientation=[0, -0.707, 0., .707])
# run simulation
for t in count():
world.step(sim.dt)
@@ -0,0 +1,90 @@
#!/usr/bin/env python
r"""Provide the pouring world.
"""
import os
import numpy as np
from pyrobolearn.worlds import BasicWorld
__author__ = "Brian Delhaisse"
__copyright__ = "Copyright 2019, PyRoboLearn"
__credits__ = ["Brian Delhaisse"]
__license__ = "GNU GPLv3"
__version__ = "1.0.0"
__maintainer__ = "Brian Delhaisse"
__email__ = "briandelhaisse@gmail.com"
__status__ = "Development"
# TODO: finish to implement the world, create corresponding environment (in `envs` folder) with state and reward.
class PouringWorld(BasicWorld):
r"""Pouring world
This loads a table, a bottle, and a glass in basic world. The liquid might be simulated based on the simulator.
"""
def __init__(self, simulator, table_position=(0.8, 0., 0.), bottle_position=(0.6, -0.2, .6),
glass_position=(0.6, 0.2, .6), scale=(1., 1., 1.)):
"""
Initialize the world.
Args:
simulator (Simulator): the simulator instance.
table_position (tuple/list of 3 float, np.array[3]): position of the table.
bottle_position (tuple/list of 3 float, np.array[3]): position of the bottle.
glass_position (tuple/list of 3 float, np.array[3]): position of the glass.
scale (tuple/list of 3 float): scale of the object.
"""
super(PouringWorld, self).__init__(simulator)
mesh_path = os.path.dirname(os.path.abspath(__file__)) + '/../../meshes/manipulation/glasses/'
# load table
self.table = self.load_table(position=table_position, orientation=(0., 0., 0.707, 0.707))
# load bottle
self.bottle = self.load_mesh(mesh_path + 'bottle1.obj', position=bottle_position, scale=scale, mass=0.500,
color=(0, 0.416, 0.306, 0.5))
# load glass
self.glass = self.load_mesh(mesh_path + 'ikea_glass.obj', position=glass_position, scale=scale, mass=0.250,
color=(0.84705882, 0.89411765, 0.91372549, 0.5))
# load water (this depends on the simulator)
# TODO
def reset(self, world_state=None):
super(PouringWorld, self).reset(world_state)
def step(self, sleep_dt=None):
super(PouringWorld, self).step(sleep_dt)
# Test
if __name__ == '__main__':
from itertools import count
import pyrobolearn as prl
# create simulator
sim = prl.simulators.Bullet()
# create world
world = PouringWorld(sim)
# create manipulator
robot = world.load_robot('kuka_iiwa', position=(0., 0., 0.2))
# attach bottle to manipulator end-effector
world.attach(body1=robot, body2=world.bottle, link1=robot.end_effectors[0], link2=-1, joint_axis=[0., 0., 0.],
parent_frame_position=[0., 0., 0.05], child_frame_position=[0., 0., 0.1],
parent_frame_orientation=[0, -0.707, 0., .707])
# reset the joint position
robot.reset_joint_states(q=[-0.07892626, 0.25348269, -0.23774851, -1.89899545, 0.08092009, -0.57060496, 0.04279614])
# run simulation
for t in count():
world.step(sim.dt)
@@ -0,0 +1,82 @@
#!/usr/bin/env python
r"""Provide the kendo world.
"""
import os
import numpy as np
from pyrobolearn.worlds import BasicWorld
__author__ = "Brian Delhaisse"
__copyright__ = "Copyright 2019, PyRoboLearn"
__credits__ = ["Brian Delhaisse"]
__license__ = "GNU GPLv3"
__version__ = "1.0.0"
__maintainer__ = "Brian Delhaisse"
__email__ = "briandelhaisse@gmail.com"
__status__ = "Development"
# TODO: finish to implement the world, create corresponding environment (in `envs` folder) with state and reward.
class KendoWorld(BasicWorld):
r"""Kendo world
"""
def __init__(self, simulator, position=(0., 0., 1.), scale=(1., 1., 1.), num_shinai=1):
"""
Initialize the kendo world.
Args:
simulator (Simulator): the simulator instance.
position (tuple/list of 3 float, np.array[3]): position of the shinai (i.e. kendo stick).
scale (tuple/list of 3 float): scaling factors in the (x,y,z) directions.
num_shinai (int): the number of shinai (i.e. kendo stick).
"""
super(KendoWorld, self).__init__(simulator)
mesh_path = os.path.dirname(os.path.abspath(__file__)) + '/../../meshes/sports/kendo/'
position = np.asarray(position)
# load the shinai
self.shinai = []
for i in range(num_shinai):
shinai = self.load_mesh(mesh_path + 'shinai.obj', position=position, scale=scale, mass=0.480, flags=0)
position += np.array([1., 0., 0.])
self.shinai.append(shinai)
def reset(self, world_state=None):
super(KendoWorld, self).reset(world_state)
def step(self, sleep_dt=None):
super(KendoWorld, self).step(sleep_dt)
# Test
if __name__ == '__main__':
from itertools import count
import pyrobolearn as prl
# create simulator
sim = prl.simulators.Bullet()
# create world
world = KendoWorld(sim, position=(0., 0., 1.5), num_shinai=2)
# create manipulators
robot1 = world.load_robot('kuka_iiwa')
robot2 = world.load_robot('kuka_iiwa', position=(1., 0.), orientation=(0., 0., 1., 0.))
# attach shinai to robot end effectors
world.attach(body1=robot1, body2=world.shinai[0], link1=robot1.end_effectors[0], link2=-1, joint_axis=[0., 0., 0.],
parent_frame_position=[0., 0., 0.02], child_frame_position=[0., 0., 0.15],
parent_frame_orientation=[0, -0.707, 0., .707])
world.attach(body1=robot2, body2=world.shinai[1], link1=robot2.end_effectors[0], link2=-1, joint_axis=[0., 0., 0.],
parent_frame_position=[0., 0., 0.02], child_frame_position=[0., 0., 0.15],
parent_frame_orientation=[0, -0.707, 0., .707])
# run simulation
for t in count():
world.step(sim.dt)
@@ -0,0 +1,16 @@
Warehouse Worlds
================
This folder contains worlds where robots have to move objects from one place to another.
This can be carried out by transporting them from one place to another, or picking them up from one place and dropping
them on another place.
An example of the former is to move a box from one room to another room using a wheeled robot. An example of the latter
is to pick up a box from one belt conveyor using a robot manipulator and drop it on another conveyor (which is close to
the first one).
Other worlds consist:
- to pick up an object on a belt conveyor and rotate it to a desired rotation before dropping it on the same conveyor
- to pick up scattered objects and regroup them on a belt conveyor, or put them in a specific order / pattern
- to assemble objects together (see the peg-in-hole assembly problem)
@@ -0,0 +1,71 @@
#!/usr/bin/env python
r"""Provide the conveyor world.
This is used by other worlds in the `warehouse` folder.
"""
import os
import numpy as np
from pyrobolearn.worlds import BasicWorld
__author__ = "Brian Delhaisse"
__copyright__ = "Copyright 2019, PyRoboLearn"
__credits__ = ["Brian Delhaisse"]
__license__ = "GNU GPLv3"
__version__ = "1.0.0"
__maintainer__ = "Brian Delhaisse"
__email__ = "briandelhaisse@gmail.com"
__status__ = "Development"
# TODO: finish to implement the world, create corresponding environment (in `envs` folder) with state and reward.
class ConveyorWorld(BasicWorld):
r"""Conveyor world
"""
def __init__(self, simulator, position=(0., -1., 0.5), scale=(1.5, 1., 1.)):
"""
Initialize the world.
Args:
simulator (Simulator): the simulator instance.
position (tuple/list of 3 float, np.array[3]): position of the conveyor.
scale (tuple/list of 3 float): scaling factors in the (x,y,z) directions.
"""
super(ConveyorWorld, self).__init__(simulator)
mesh_path = os.path.dirname(os.path.abspath(__file__)) + '/../../meshes/warehouse/conveyor/'
self.conveyor_position = np.asarray(position)
self.belt_length = 2 * scale[0] # rough approximation of the length
self.belt_width = 0.6 * scale[1] # rough approximation of the width
# load the conveyor
self.conveyor = self.load_mesh(mesh_path + 'conveyor_without_belt.obj', position=position, scale=scale,
mass=0., flags=0)
self.belt = self.load_mesh(mesh_path + 'belt.obj', position=position, scale=scale, mass=0., flags=0)
def reset(self, world_state=None):
super(ConveyorWorld, self).reset(world_state)
def step(self, sleep_dt=None):
super(ConveyorWorld, self).step(sleep_dt)
# Test
if __name__ == '__main__':
from itertools import count
import pyrobolearn as prl
# create simulator
sim = prl.simulators.Bullet()
# create world
world = ConveyorWorld(sim)
# run simulation
for t in count():
world.step(sim.dt)
@@ -0,0 +1,91 @@
#!/usr/bin/env python
r"""Move boxes from one conveyor belt to another one.
"""
import os
import numpy as np
from pyrobolearn.worlds.samples.warehouse.conveyor import ConveyorWorld
__author__ = "Brian Delhaisse"
__copyright__ = "Copyright 2019, PyRoboLearn"
__credits__ = ["Brian Delhaisse"]
__license__ = "GNU GPLv3"
__version__ = "1.0.0"
__maintainer__ = "Brian Delhaisse"
__email__ = "briandelhaisse@gmail.com"
__status__ = "Development"
# TODO: finish to implement the world, create corresponding environment (in `envs` folder) with state and reward.
class MoveBoxesOnConveyorWorld(ConveyorWorld):
r"""Move boxes on conveyor belt world
This provides a world where one box has to be moved from one conveyor to another.
"""
def __init__(self, simulator, position=(0., -1., 0.5), scale=(1.5, 1., 1.), num_boxes=1):
"""
Initialize the world.
Args:
simulator (Simulator): the simulator instance.
position (tuple/list of 3 float, np.array[3]): position of the conveyor.
scale (tuple/list of 3 float): scaling factors in the (x,y,z) directions.
num_boxes (int): the number of boxes to load
"""
super(MoveBoxesOnConveyorWorld, self).__init__(simulator, position=position, scale=scale)
# load 2 other conveyors
mesh_path = os.path.dirname(os.path.abspath(__file__)) + '/../../meshes/warehouse/conveyor/'
position, orientation = (0.8, 0.5, 0.5), (0., 0., 0.707, 0.707)
self.conveyor1 = self.load_mesh(mesh_path + 'conveyor_without_belt.obj', position=position,
orientation=orientation, scale=(1., 1., 1.), mass=0., flags=0)
self.belt1 = self.load_mesh(mesh_path + 'belt.obj', position=position, orientation=orientation,
scale=(1., 1., 1.), mass=0., flags=0)
position, orientation = (-0.8, 0.5, 0.5), (0., 0., 0.707, 0.707)
self.conveyor2 = self.load_mesh(mesh_path + 'conveyor_without_belt.obj', position=position,
orientation=orientation, scale=(1., 1., 1.), mass=0., flags=0)
self.belt2 = self.load_mesh(mesh_path + 'belt.obj', position=position, orientation=orientation,
scale=(1., 1., 1.), mass=0., flags=0)
# load boxes
# TODO: randomize the dimensions, color, and mass
# TODO: make the position dependent of the conveyor position and scale
self.box = self.load_box(position=self.conveyor_position + np.array([-1.4, 0., 0.5]), mass=1.,
dimensions=(0.2, 0.2, 0.2), return_body=True)
self.cnt = 0
def reset(self, world_state=None):
super(MoveBoxesOnConveyorWorld, self).reset(world_state)
def step(self, sleep_dt=None):
# move boxes (which have not been picked up)
if self.box.position[0] < 1.4:
self.apply_force(self.box, force=[2.5, 0., 0.])
else:
self.box.position = [-1.4, -1., 1.]
super(MoveBoxesOnConveyorWorld, self).step(sleep_dt)
# Test
if __name__ == '__main__':
from itertools import count
import pyrobolearn as prl
# create simulator
sim = prl.simulators.Bullet()
# create world
world = MoveBoxesOnConveyorWorld(sim)
# create manipulator
robot = world.load_robot('kuka_iiwa', position=(0., -0.3, 0.5))
# run simulation
for t in count():
world.step(sim.dt)
@@ -0,0 +1,90 @@
#!/usr/bin/env python
r"""Regroup small boxes that are on a conveyor.
"""
import os
import numpy as np
from pyrobolearn.worlds.samples.warehouse.conveyor import ConveyorWorld
__author__ = "Brian Delhaisse"
__copyright__ = "Copyright 2019, PyRoboLearn"
__credits__ = ["Brian Delhaisse"]
__license__ = "GNU GPLv3"
__version__ = "1.0.0"
__maintainer__ = "Brian Delhaisse"
__email__ = "briandelhaisse@gmail.com"
__status__ = "Development"
# TODO: finish to implement the world, create corresponding environment (in `envs` folder) with state and reward.
class RegroupBoxesOnConveyorWorld(ConveyorWorld):
r"""Regroup boxes on conveyor belt world
This provides a world where small boxes that are randomly distributed on the conveyor belt has to be regroup to
form a certain pattern (like 16 boxes regrouped in a 4x4 grid).
"""
def __init__(self, simulator, position=(0., -1., 0.5), scale=(1.5, 1., 1.), num_boxes=1, pattern='3x3grid'):
"""
Initialize the world.
Args:
simulator (Simulator): the simulator instance.
position (tuple/list of 3 float, np.array[3]): position of the conveyor.
scale (tuple/list of 3 float): scaling factors in the (x,y,z) directions.
pattern (str): the pattern that has to be formed when grouping the boxes.
"""
super(RegroupBoxesOnConveyorWorld, self).__init__(simulator, position=position, scale=scale)
# load boxes
# TODO: randomize the dimensions, color, and mass
# TODO: make the position dependent of the conveyor position and scale
self.boxes = []
self.init_box_position = self.conveyor_position + np.array([-1.2, 0., 0.5])
for i in range(num_boxes):
noise_x = np.random.uniform(low=-0.2, high=0.2, size=1)
noise_y = np.random.uniform(low=-0.3, high=0.3, size=1)
noise = np.concatenate((noise_x, noise_y, np.array([0.])))
box = self.load_box(position=self.init_box_position + noise, mass=1.,
dimensions=(0.05, 0.05, 0.05), return_body=True)
self.boxes.append(box)
self.cnt = 0
def reset(self, world_state=None):
super(RegroupBoxesOnConveyorWorld, self).reset(world_state)
def step(self, sleep_dt=None):
# move boxes (which have not been picked up)
for box in self.boxes:
if box.position[0] < 1.4:
self.apply_force(box, force=[2.5, 0., 0.])
else:
# TODO: randomize x and y position
noise_x = np.random.uniform(low=-0.2, high=0.2, size=1)
noise_y = np.random.uniform(low=-0.3, high=0.3, size=1)
noise = np.concatenate((noise_x, noise_y, np.array([0.])))
box.position = self.init_box_position + noise
super(RegroupBoxesOnConveyorWorld, self).step(sleep_dt)
# Test
if __name__ == '__main__':
from itertools import count
import pyrobolearn as prl
# create simulator
sim = prl.simulators.Bullet()
# create world
world = RegroupBoxesOnConveyorWorld(sim, num_boxes=3)
# create manipulator
robot = world.load_robot('kuka_iiwa', position=(0., -0.3, 0.5))
# run simulation
for t in count():
world.step(sim.dt)
@@ -0,0 +1,85 @@
#!/usr/bin/env python
r"""Regroup small boxes that are on a conveyor.
"""
import os
import numpy as np
from pyrobolearn.worlds.samples.warehouse.conveyor import ConveyorWorld
__author__ = "Brian Delhaisse"
__copyright__ = "Copyright 2019, PyRoboLearn"
__credits__ = ["Brian Delhaisse"]
__license__ = "GNU GPLv3"
__version__ = "1.0.0"
__maintainer__ = "Brian Delhaisse"
__email__ = "briandelhaisse@gmail.com"
__status__ = "Development"
# TODO: finish to implement the world, create corresponding environment (in `envs` folder) with state and reward.
class RotateBoxesOnConveyorWorld(ConveyorWorld):
r"""Rotate boxes on conveyor belt world
This provides a world where boxes have to be rotated in the correct orientation and put back on the conveyor belt.
"""
def __init__(self, simulator, position=(0., -1., 0.5), scale=(1.5, 1., 1.), num_boxes=1):
"""
Initialize the world.
Args:
simulator (Simulator): the simulator instance.
position (tuple/list of 3 float, np.array[3]): position of the conveyor.
scale (tuple/list of 3 float): scaling factors in the (x,y,z) directions.
"""
super(RotateBoxesOnConveyorWorld, self).__init__(simulator, position=position, scale=scale)
mesh_path = os.path.dirname(os.path.abspath(__file__)) + '/../../meshes/warehouse/boxes/'
# load boxes
# TODO: randomize the dimensions and mass
# TODO: make the position dependent of the conveyor position and scale
# self.box = self.load_box(position=self.conveyor_position + np.array([-1.4, 0., 0.5]), mass=1.,
# dimensions=(0.2, 0.2, 0.2), return_body=True)
self.box = self.load_mesh(mesh_path + 'arrow_box.obj',
position=self.conveyor_position + np.array([-1.4, 0., 0.5]),
orientation=(0., 1., 0., 0.), scale=(1., 1., 1.), mass=1., return_body=True)
self.cnt = 0
def reset(self, world_state=None):
super(RotateBoxesOnConveyorWorld, self).reset(world_state)
def step(self, sleep_dt=None):
# move boxes (which have not been picked up)
if self.box.position[0] < 1.4:
self.apply_force(self.box, force=[2.5, 0., 0.])
else:
self.box.position = [-1.4, -1., 1.]
idx = np.random.randint(low=0, high=4)
orientation = [(0., 0., 0., 1.), (0., 0.707, 0., 0.707), (0., 1., 0., 0.), (0., -0.707, 0., 0.707)][idx]
self.box.orientation = orientation
super(RotateBoxesOnConveyorWorld, self).step(sleep_dt)
# Test
if __name__ == '__main__':
from itertools import count
import pyrobolearn as prl
# create simulator
sim = prl.simulators.Bullet()
# create world
world = RotateBoxesOnConveyorWorld(sim)
# create manipulator
robot = world.load_robot('kuka_iiwa', position=(0., -0.3, 0.5))
# run simulation
for t in count():
world.step(sim.dt)