sergi-e/dif-rigid-spring (#3043)
* First iteration * Added warning regarding springarm bug * Fix on warning
This commit is contained in:
parent
baffc906be
commit
db9572faa6
|
@ -93,7 +93,7 @@ spawn_point = carla.Transform()
|
|||
spawn_point.location = world.get_random_location_from_navigation()
|
||||
```
|
||||
|
||||
An actor can be attached to another one when spawned. Actors follow the parent they are attached to. This is specially useful for sensors. The attachment can be rigid or eased. It is defined by the helper class [carla.AttachmentType](python_api.md#carla.AttachmentType).
|
||||
An actor can be attached to another one when spawned. Actors follow the parent they are attached to. This is specially useful for sensors. The attachment can be rigid (proper to retrieve precise data) or with an eased movement according to its parent. It is defined by the helper class [carla.AttachmentType](python_api.md#carla.AttachmentType).
|
||||
|
||||
The next example attaches a camera rigidly to a vehicle, so their relative position remains fixed.
|
||||
|
||||
|
|
|
@ -46,15 +46,15 @@ blueprint.set_attribute('sensor_tick', '1.0')
|
|||
|
||||
`attachment_to` and `attachment_type`, are crucial. Sensors should be attached to a parent actor, usually a vehicle, to follow it around and gather the information. The attachment type will determine how its position is updated regarding said vehicle.
|
||||
|
||||
* __Rigid attachment.__ Movement is strict regarding its parent location. Cameras may show "little hops" as the position updated is not eased.
|
||||
* __SpringArm attachment.__ Movement is eased with little accelerations and decelerations.
|
||||
* __Rigid attachment.__ Movement is strict regarding its parent location. This is the proper attachment to retrieve data from the simulation.
|
||||
* __SpringArm attachment.__ Movement is eased with little accelerations and decelerations. This attachment is only recommended to record videos from the simulation. The movement is smooth and "hops" are avoided when updating the cameras' positions.
|
||||
|
||||
```py
|
||||
transform = carla.Transform(carla.Location(x=0.8, z=1.7))
|
||||
sensor = world.spawn_actor(blueprint, transform, attach_to=my_vehicle)
|
||||
```
|
||||
!!! Important
|
||||
When spawning with attachment, location must be relative to the parent actor.
|
||||
When spawning with attachment, location must be relative to the parent actor.
|
||||
|
||||
### Listening
|
||||
|
||||
|
|
|
@ -247,13 +247,13 @@ Returns the velocity vector registered for an actor in that tick.
|
|||
---
|
||||
|
||||
## carla.AttachmentType<a name="carla.AttachmentType"></a>
|
||||
Class that defines attachment options between an actor and its parent. When spawning actors, these can be attached to another actor so their position changes accordingly. This is specially useful for cameras and sensors. [Here](ref_code_recipes.md#attach-sensors-recipe) is a brief recipe in which we can see how sensors can be attached to a car when spawned. Note that the attachment type is declared as an enum within the class.
|
||||
Class that defines attachment options between an actor and its parent. When spawning actors, these can be attached to another actor so their position changes accordingly. This is specially useful for sensors. [Here](ref_code_recipes.md#attach-sensors-recipe) is a brief recipe in which we can see how sensors can be attached to a car when spawned. Note that the attachment type is declared as an enum within the class.
|
||||
|
||||
<h3>Instance Variables</h3>
|
||||
- <a name="carla.AttachmentType.Rigid"></a>**<font color="#f8805a">Rigid</font>**
|
||||
With this fixed attatchment the object follow its parent position strictly.
|
||||
With this fixed attatchment the object follow its parent position strictly. This is the recommended attachment to retrieve precise data from the simulation.
|
||||
- <a name="carla.AttachmentType.SpringArm"></a>**<font color="#f8805a">SpringArm</font>**
|
||||
An attachment that expands or retracts depending on camera situation. SpringArms are an Unreal Engine component so [check this out](ref_code_recipes.md#attach-sensors-recipe) to learn some more about them.
|
||||
An attachment that expands or retracts the position of the actor, depending on its parent. This attachment is only recommended to record videos from the simulation where a smooth movement is needed. SpringArms are an Unreal Engine component so [check this out](ref_code_recipes.md#attach-sensors-recipe) to learn some more about them. <br><b style="color:red;">Warning:</b> The <b>SpringArm</b> attachment presents weird behaviors when an actor is spawned with a relative translation in the Z-axis (e.g. <code>child_location = Location(0,0,2)</code>).
|
||||
|
||||
---
|
||||
|
||||
|
|
|
@ -54,7 +54,7 @@ Used:<br>
|
|||
|
||||
```py
|
||||
# ...
|
||||
camera = world.spawn_actor(rgb_camera_bp, transform, attach_to=vehicle, attachment_type=Attachment.SpringArm)
|
||||
camera = world.spawn_actor(rgb_camera_bp, transform, attach_to=vehicle, attachment_type=Attachment.Rigid)
|
||||
# Default attachment: Attachment.Rigid
|
||||
gnss_sensor = world.spawn_actor(sensor_gnss_bp, transform, attach_to=vehicle)
|
||||
collision_sensor = world.spawn_actor(sensor_collision_bp, transform, attach_to=vehicle)
|
||||
|
|
|
@ -327,7 +327,7 @@ cam_bp.set_attribute("fov",str(105))
|
|||
cam_location = carla.Location(2,0,1)
|
||||
cam_rotation = carla.Rotation(0,180,0)
|
||||
cam_transform = carla.Transform(cam_location,cam_rotation)
|
||||
ego_cam = world.spawn_actor(cam_bp,cam_transform,attach_to=ego_vehicle, attachment_type=carla.AttachmentType.SpringArm)
|
||||
ego_cam = world.spawn_actor(cam_bp,cam_transform,attach_to=ego_vehicle, attachment_type=carla.AttachmentType.Rigid)
|
||||
ego_cam.listen(lambda image: image.save_to_disk('tutorial/output/%.6d.jpg' % image.frame))
|
||||
```
|
||||
![tuto_rgb](img/tuto_rgb.jpg)
|
||||
|
@ -466,7 +466,7 @@ depth_bp = world.get_blueprint_library().find('sensor.camera.depth')
|
|||
depth_location = carla.Location(2,0,1)
|
||||
depth_rotation = carla.Rotation(0,180,0)
|
||||
depth_transform = carla.Transform(depth_location,depth_rotation)
|
||||
depth_cam = world.spawn_actor(depth_bp,depth_transform,attach_to=ego_vehicle, attachment_type=carla.AttachmentType.SpringArm)
|
||||
depth_cam = world.spawn_actor(depth_bp,depth_transform,attach_to=ego_vehicle, attachment_type=carla.AttachmentType.Rigid)
|
||||
# This time, a color converter is applied to the image, to get the semantic segmentation view
|
||||
depth_cam.listen(lambda image: image.save_to_disk('tutorial/new_depth_output/%.6d.jpg' % image.frame,carla.ColorConverter.LogarithmicDepth))
|
||||
```
|
||||
|
@ -494,7 +494,7 @@ sem_bp.set_attribute("fov",str(105))
|
|||
sem_location = carla.Location(2,0,1)
|
||||
sem_rotation = carla.Rotation(0,180,0)
|
||||
sem_transform = carla.Transform(sem_location,sem_rotation)
|
||||
sem_cam = world.spawn_actor(sem_bp,sem_transform,attach_to=ego_vehicle, attachment_type=carla.AttachmentType.SpringArm)
|
||||
sem_cam = world.spawn_actor(sem_bp,sem_transform,attach_to=ego_vehicle, attachment_type=carla.AttachmentType.Rigid)
|
||||
# This time, a color converter is applied to the image, to get the semantic segmentation view
|
||||
sem_cam.listen(lambda image: image.save_to_disk('tutorial/new_sem_output/%.6d.jpg' % image.frame,carla.ColorConverter.CityScapesPalette))
|
||||
```
|
||||
|
@ -935,7 +935,7 @@ def main():
|
|||
cam_location = carla.Location(2,0,1)
|
||||
cam_rotation = carla.Rotation(0,180,0)
|
||||
cam_transform = carla.Transform(cam_location,cam_rotation)
|
||||
ego_cam = world.spawn_actor(cam_bp,cam_transform,attach_to=ego_vehicle, attachment_type=carla.AttachmentType.SpringArm)
|
||||
ego_cam = world.spawn_actor(cam_bp,cam_transform,attach_to=ego_vehicle, attachment_type=carla.AttachmentType.Rigid)
|
||||
ego_cam.listen(lambda image: image.save_to_disk('~/tutorial/output/%.6d.jpg' % image.frame))
|
||||
"""
|
||||
|
||||
|
@ -1171,7 +1171,7 @@ def main():
|
|||
cam_bp.set_attribute("image_size_x",str(1920))
|
||||
cam_bp.set_attribute("image_size_y",str(1080))
|
||||
cam_bp.set_attribute("fov",str(105))
|
||||
ego_cam = world.spawn_actor(cam_bp,cam_transform,attach_to=ego_vehicle, attachment_type=carla.AttachmentType.SpringArm)
|
||||
ego_cam = world.spawn_actor(cam_bp,cam_transform,attach_to=ego_vehicle, attachment_type=carla.AttachmentType.Rigid)
|
||||
ego_cam.listen(lambda image: image.save_to_disk('~/tutorial/new_rgb_output/%.6d.jpg' % image.frame))
|
||||
"""
|
||||
|
||||
|
@ -1187,7 +1187,7 @@ def main():
|
|||
depth_location = carla.Location(2,0,1)
|
||||
depth_rotation = carla.Rotation(0,180,0)
|
||||
depth_transform = carla.Transform(depth_location,depth_rotation)
|
||||
depth_cam = world.spawn_actor(depth_bp,depth_transform,attach_to=ego_vehicle, attachment_type=carla.AttachmentType.SpringArm)
|
||||
depth_cam = world.spawn_actor(depth_bp,depth_transform,attach_to=ego_vehicle, attachment_type=carla.AttachmentType.Rigid)
|
||||
# This time, a color converter is applied to the image, to get the semantic segmentation view
|
||||
depth_cam.listen(lambda image: image.save_to_disk('~/tutorial/de_log/%.6d.jpg' % image.frame,carla.ColorConverter.LogarithmicDepth))
|
||||
"""
|
||||
|
@ -1203,7 +1203,7 @@ def main():
|
|||
depth_location02 = carla.Location(2,0,1)
|
||||
depth_rotation02 = carla.Rotation(0,180,0)
|
||||
depth_transform02 = carla.Transform(depth_location02,depth_rotation02)
|
||||
depth_cam02 = world.spawn_actor(depth_bp02,depth_transform02,attach_to=ego_vehicle, attachment_type=carla.AttachmentType.SpringArm)
|
||||
depth_cam02 = world.spawn_actor(depth_bp02,depth_transform02,attach_to=ego_vehicle, attachment_type=carla.AttachmentType.Rigid)
|
||||
# This time, a color converter is applied to the image, to get the semantic segmentation view
|
||||
depth_cam02.listen(lambda image: image.save_to_disk('~/tutorial/de/%.6d.jpg' % image.frame,carla.ColorConverter.Depth))
|
||||
"""
|
||||
|
@ -1220,7 +1220,7 @@ def main():
|
|||
sem_location = carla.Location(2,0,1)
|
||||
sem_rotation = carla.Rotation(0,180,0)
|
||||
sem_transform = carla.Transform(sem_location,sem_rotation)
|
||||
sem_cam = world.spawn_actor(sem_bp,sem_transform,attach_to=ego_vehicle, attachment_type=carla.AttachmentType.SpringArm)
|
||||
sem_cam = world.spawn_actor(sem_bp,sem_transform,attach_to=ego_vehicle, attachment_type=carla.AttachmentType.Rigid)
|
||||
# This time, a color converter is applied to the image, to get the semantic segmentation view
|
||||
sem_cam.listen(lambda image: image.save_to_disk('~/tutorial/new_sem_output/%.6d.jpg' % image.frame,carla.ColorConverter.CityScapesPalette))
|
||||
"""
|
||||
|
@ -1283,7 +1283,7 @@ def main():
|
|||
lidar_location = carla.Location(0,0,2)
|
||||
lidar_rotation = carla.Rotation(0,0,0)
|
||||
lidar_transform = carla.Transform(lidar_location,lidar_rotation)
|
||||
lidar_sen = world.spawn_actor(lidar_bp,lidar_transform,attach_to=ego_vehicle,attachment_type=carla.AttachmentType.SpringArm)
|
||||
lidar_sen = world.spawn_actor(lidar_bp,lidar_transform,attach_to=ego_vehicle,attachment_type=carla.AttachmentType.Rigid)
|
||||
lidar_sen.listen(lambda point_cloud: point_cloud.save_to_disk('/home/adas/Desktop/tutorial/new_lidar_output/%.6d.ply' % point_cloud.frame))
|
||||
"""
|
||||
|
||||
|
|
|
@ -165,16 +165,16 @@
|
|||
- class_name: AttachmentType
|
||||
# - DESCRIPTION ------------------------
|
||||
doc: >
|
||||
Class that defines attachment options between an actor and its parent. When spawning actors, these can be attached to another actor so their position changes accordingly. This is specially useful for cameras and sensors. [Here](ref_code_recipes.md#attach-sensors-recipe) is a brief recipe in which we can see how sensors can be attached to a car when spawned. Note that the attachment type is declared as an enum within the class.
|
||||
Class that defines attachment options between an actor and its parent. When spawning actors, these can be attached to another actor so their position changes accordingly. This is specially useful for sensors. [Here](ref_code_recipes.md#attach-sensors-recipe) is a brief recipe in which we can see how sensors can be attached to a car when spawned. Note that the attachment type is declared as an enum within the class.
|
||||
|
||||
# - PROPERTIES -------------------------
|
||||
instance_variables:
|
||||
- var_name: Rigid
|
||||
doc: >
|
||||
With this fixed attatchment the object follow its parent position strictly.
|
||||
With this fixed attatchment the object follow its parent position strictly. This is the recommended attachment to retrieve precise data from the simulation.
|
||||
- var_name: SpringArm
|
||||
doc: >
|
||||
An attachment that expands or retracts depending on camera situation. SpringArms are an Unreal Engine component so [check this out](ref_code_recipes.md#attach-sensors-recipe) to learn some more about them.
|
||||
An attachment that expands or retracts the position of the actor, depending on its parent. This attachment is only recommended to record videos from the simulation where a smooth movement is needed. SpringArms are an Unreal Engine component so [check this out](ref_code_recipes.md#attach-sensors-recipe) to learn some more about them. <br><b style="color:red;">Warning:</b> The <b>SpringArm</b> attachment presents weird behaviors when an actor is spawned with a relative translation in the Z-axis (e.g. <code>child_location = Location(0,0,2)</code>).
|
||||
# --------------------------------------
|
||||
|
||||
- class_name: World
|
||||
|
|
Loading…
Reference in New Issue