carla-simulator / carla

Open-source simulator for autonomous driving research.
http://carla.org
MIT License
11.35k stars 3.69k forks source link

Some bounding box extents are 0 in Y axis #3670

Closed machar94 closed 6 months ago

machar94 commented 3 years ago

Carla version number: 0.9.10.1-112-g993f440b Commit: 993f440bb804f22ec4e94653e1dd97fb0ce6babc Platform/OS: Ubuntu 18.04.4 LTS

I have observed that some obstacles (mostly 2 wheelers) have an extent in the Y dimension of 0. I noticed this in my Carla/Apollo integration when the bounding boxes in the visualizer appeared distant and only in 2D. I modified the spawn_npc.py script (provided below) to print out the bounding boxes of any actors that reported a value of 0 in any of the axes. In addition, with the release of 0.9.10 I saw that bounding boxes can be obtained globally from the world object. I also checked whether there were any bounding boxes from the get_level_bbs method of world that also have a 0 extent value in any of the directions and there are none! Below is the output of the modified spawn_npc.py script for 1 tick. I have called out in bold the 0 extent values and if you see the relative location for those bounding boxes they appear to be greatly off in the y axis. In addition, out of all of the printed global bounding boxes (filtered for vehicles - not sure why there are more than 10 when I requested 10 vehicles), I am able to match the actor to the bounding box with proper extents since the location of those bounding boxes are in global coordinates. Out of 10 harley davidsons requested 3/10 were defective. This proportion changes as I vary the number of requested vehicles. I know this commit is about a month behind the head, but I was hoping if someone could quickly run the spawn_npc.py script I've provided and comment on whether they observe a similar issue with the bounding box extents. The proportions at the end of the tick output reflect the number of defective bounding boxes detected with each method.

###### Tick     4 #####
Actor ID(155): Location(x=163.864212, y=-193.899994, z=0.182794) BoundingBox(Location(x=-0.008867, y=194.266083, z=0.659914), Extent(x=1.177870, y=0.000000, z=0.638285), Rotation(pitch=0.000000, yaw=0.000000, roll=0.000000)))
Actor ID(151): Location(x=-145.519318, y=21.290268, z=0.182794) BoundingBox(Location(x=-0.008867, y=145.874252, z=0.659914), Extent(x=1.177870, y=0.000000, z=0.638285), Rotation(pitch=0.000000, yaw=0.000000, roll=0.000000)))
Actor ID(149): Location(x=150.919495, y=-162.625595, z=4.425494) BoundingBox(Location(x=-0.008857, y=148.434616, z=0.659914), Extent(x=1.177870, y=0.000000, z=0.638285), Rotation(pitch=0.000000, yaw=0.000000, roll=0.000000)))
BoundingBox(Location(x=-112.199997, y=-95.554062, z=0.819803), Extent(x=2.513388, y=1.075773, z=0.817764), Rotation(pitch=0.000000, yaw=-90.000114, roll=0.000000))
BoundingBox(Location(x=-118.697632, y=-95.184227, z=0.965306), Extent(x=1.993842, y=0.925424, z=0.808555), Rotation(pitch=1.186370, yaw=-89.999992, roll=0.000000))
BoundingBox(Location(x=-121.698212, y=-95.293007, z=0.975657), Extent(x=2.678740, y=1.016602, z=0.707373), Rotation(pitch=0.593338, yaw=-90.000092, roll=0.000000))
BoundingBox(Location(x=-104.099998, y=-94.498207, z=0.447562), Extent(x=1.902900, y=0.985138, z=0.737515), Rotation(pitch=1.274575, yaw=-90.000053, roll=0.000000))
BoundingBox(Location(x=-194.599777, y=104.801025, z=0.753248), Extent(x=1.933110, y=0.952598, z=0.938968), Rotation(pitch=0.000000, yaw=0.000161, roll=0.000000))
BoundingBox(Location(x=-194.609406, y=101.900002, z=0.833576), Extent(x=2.238886, y=1.034658, z=1.018896), Rotation(pitch=0.000000, yaw=0.000155, roll=0.000000))
BoundingBox(Location(x=-188.957382, y=105.000153, z=0.740486), Extent(x=2.302255, y=0.965797, z=0.927423), Rotation(pitch=0.000000, yaw=-0.000092, roll=0.000000))
BoundingBox(Location(x=-188.886032, y=101.900002, z=0.550788), Extent(x=1.902900, y=0.985138, z=0.737515), Rotation(pitch=0.000000, yaw=0.000155, roll=0.000000))
BoundingBox(Location(x=-19.074694, y=154.678558, z=0.950356), Extent(x=2.305503, y=1.120857, z=0.833638), Rotation(pitch=0.000000, yaw=90.000114, roll=0.000000))
BoundingBox(Location(x=-24.814787, y=155.477249, z=0.789589), Extent(x=1.902900, y=0.985138, z=0.737515), Rotation(pitch=0.000000, yaw=90.000114, roll=0.000000))
BoundingBox(Location(x=73.789474, y=154.503555, z=1.257309), Extent(x=1.933110, y=0.952598, z=0.938968), Rotation(pitch=0.000000, yaw=-90.000114, roll=0.000000))
BoundingBox(Location(x=31.801071, y=113.743866, z=1.077602), Extent(x=1.902900, y=0.985138, z=0.737515), Rotation(pitch=0.000000, yaw=90.000114, roll=0.000000))
BoundingBox(Location(x=149.546371, y=149.862900, z=2.071619), Extent(x=2.096415, y=0.908093, z=0.736916), Rotation(pitch=0.000000, yaw=90.000160, roll=-2.444794))
BoundingBox(Location(x=130.541885, y=79.543892, z=1.270044), Extent(x=2.302255, y=0.965797, z=0.927423), Rotation(pitch=0.000000, yaw=-90.000114, roll=0.000000))
BoundingBox(Location(x=188.755371, y=87.799812, z=1.325878), Extent(x=2.302255, y=0.965797, z=0.927423), Rotation(pitch=0.000000, yaw=-90.000114, roll=0.000000))
BoundingBox(Location(x=188.770676, y=80.130074, z=1.118880), Extent(x=2.513388, y=1.075773, z=0.817764), Rotation(pitch=0.000000, yaw=-90.000114, roll=0.000000))
BoundingBox(Location(x=89.850563, y=-222.489227, z=0.786582), Extent(x=2.487122, y=1.019201, z=0.777148), Rotation(pitch=0.000000, yaw=30.000006, roll=0.000000))
BoundingBox(Location(x=89.805458, y=-222.514954, z=0.950204), Extent(x=2.267992, y=0.926515, z=0.609083), Rotation(pitch=0.000000, yaw=30.000006, roll=0.000000))
BoundingBox(Location(x=84.465660, y=-221.834503, z=0.786582), Extent(x=2.487122, y=1.019201, z=0.777148), Rotation(pitch=0.000000, yaw=144.999985, roll=0.000000))
BoundingBox(Location(x=84.508026, y=-221.864532, z=0.950204), Extent(x=2.267992, y=0.926515, z=0.609083), Rotation(pitch=0.000000, yaw=144.999985, roll=0.000000))
BoundingBox(Location(x=79.858749, y=-221.939240, z=0.786582), Extent(x=2.487122, y=1.019201, z=0.777148), Rotation(pitch=0.000000, yaw=44.999939, roll=0.000000))
BoundingBox(Location(x=79.821823, y=-221.975739, z=0.950204), Extent(x=2.267992, y=0.926515, z=0.609083), Rotation(pitch=0.000000, yaw=44.999939, roll=0.000000))
BoundingBox(Location(x=158.934143, y=-222.489227, z=0.786582), Extent(x=2.487122, y=1.019201, z=0.777148), Rotation(pitch=0.000000, yaw=30.000006, roll=0.000000))
BoundingBox(Location(x=158.889038, y=-222.514954, z=0.950204), Extent(x=2.267992, y=0.926515, z=0.609083), Rotation(pitch=0.000000, yaw=30.000006, roll=0.000000))
BoundingBox(Location(x=153.549240, y=-221.834503, z=0.786582), Extent(x=2.487122, y=1.019201, z=0.777148), Rotation(pitch=0.000000, yaw=144.999985, roll=0.000000))
BoundingBox(Location(x=153.591614, y=-221.864532, z=0.950204), Extent(x=2.267992, y=0.926515, z=0.609083), Rotation(pitch=0.000000, yaw=144.999985, roll=0.000000))
BoundingBox(Location(x=148.942337, y=-221.939240, z=0.786582), Extent(x=2.487122, y=1.019201, z=0.777148), Rotation(pitch=0.000000, yaw=44.999939, roll=0.000000))
BoundingBox(Location(x=148.905411, y=-221.975739, z=0.950204), Extent(x=2.267992, y=0.926515, z=0.609083), Rotation(pitch=0.000000, yaw=44.999939, roll=0.000000))
BoundingBox(Location(x=-162.268234, y=-3.965599, z=0.786582), Extent(x=2.487122, y=1.019201, z=0.777148), Rotation(pitch=0.000000, yaw=-20.000027, roll=0.000000))
BoundingBox(Location(x=-162.316925, y=-3.947565, z=0.950204), Extent(x=2.267992, y=0.926515, z=0.609083), Rotation(pitch=0.000000, yaw=-20.000027, roll=0.000000))
BoundingBox(Location(x=-162.596848, y=0.193104, z=0.786582), Extent(x=2.487122, y=1.019201, z=0.777148), Rotation(pitch=0.000000, yaw=24.999521, roll=0.000000))
BoundingBox(Location(x=-162.644043, y=0.171425, z=0.950204), Extent(x=2.267992, y=0.926515, z=0.609083), Rotation(pitch=0.000000, yaw=24.999521, roll=0.000000))
BoundingBox(Location(x=-188.866211, y=-3.732635, z=0.786582), Extent(x=2.487122, y=1.019201, z=0.777148), Rotation(pitch=0.000000, yaw=-0.000458, roll=0.000000))
BoundingBox(Location(x=-188.918121, y=-3.732342, z=0.950204), Extent(x=2.267992, y=0.926515, z=0.609083), Rotation(pitch=0.000000, yaw=-0.000458, roll=0.000000))
BoundingBox(Location(x=-197.405548, y=-0.344727, z=0.786582), Extent(x=2.487122, y=1.019201, z=0.777148), Rotation(pitch=0.000000, yaw=-0.000458, roll=0.000000))
BoundingBox(Location(x=-197.457458, y=-0.344434, z=0.950204), Extent(x=2.267992, y=0.926515, z=0.609083), Rotation(pitch=0.000000, yaw=-0.000458, roll=0.000000))
BoundingBox(Location(x=-161.291168, y=101.701385, z=0.786582), Extent(x=2.487122, y=1.019201, z=0.777148), Rotation(pitch=0.000000, yaw=29.999577, roll=0.000000))
BoundingBox(Location(x=-161.336273, y=101.675682, z=0.950204), Extent(x=2.267992, y=0.926515, z=0.609083), Rotation(pitch=0.000000, yaw=29.999577, roll=0.000000))
BoundingBox(Location(x=-163.389923, y=104.786346, z=0.786582), Extent(x=2.487122, y=1.019201, z=0.777148), Rotation(pitch=0.000000, yaw=-30.000498, roll=0.000000))
BoundingBox(Location(x=-163.434738, y=104.812569, z=0.950204), Extent(x=2.267992, y=0.926515, z=0.609083), Rotation(pitch=0.000000, yaw=-30.000498, roll=0.000000))
BoundingBox(Location(x=-182.254196, y=104.740303, z=0.786582), Extent(x=2.487122, y=1.019201, z=0.777148), Rotation(pitch=0.000000, yaw=-130.000534, roll=0.000000))
BoundingBox(Location(x=-182.220596, y=104.779892, z=0.950204), Extent(x=2.267992, y=0.926515, z=0.609083), Rotation(pitch=0.000000, yaw=-130.000534, roll=0.000000))
BoundingBox(Location(x=-183.083817, y=100.749786, z=0.786582), Extent(x=2.487122, y=1.019201, z=0.777148), Rotation(pitch=0.000000, yaw=144.999374, roll=0.000000))
BoundingBox(Location(x=-183.041458, y=100.719765, z=0.950204), Extent(x=2.267992, y=0.926515, z=0.609083), Rotation(pitch=0.000000, yaw=144.999374, roll=0.000000))
BoundingBox(Location(x=-114.777977, y=35.856174, z=0.985109), Extent(x=1.177870, y=0.381839, z=0.803412), Rotation(pitch=0.000000, yaw=134.676727, roll=0.000000))
BoundingBox(Location(x=-30.678680, y=134.665924, z=0.985109), Extent(x=1.177870, y=0.381839, z=0.803412), Rotation(pitch=0.000000, yaw=-1.296814, roll=0.000000))
BoundingBox(Location(x=10.141054, y=-146.573608, z=0.985109), Extent(x=1.177870, y=0.381839, z=0.803412), Rotation(pitch=0.000000, yaw=-88.586418, roll=0.000000))
BoundingBox(Location(x=150.917404, y=-162.634506, z=5.227808), Extent(x=1.177870, y=0.381839, z=0.803412), Rotation(pitch=0.000000, yaw=90.996483, roll=0.000000))
BoundingBox(Location(x=10.181254, y=207.507919, z=0.985109), Extent(x=1.177870, y=0.381839, z=0.803412), Rotation(pitch=0.000000, yaw=-0.142975, roll=0.000000))
BoundingBox(Location(x=-145.517090, y=21.299137, z=0.985109), Extent(x=1.177870, y=0.381839, z=0.803412), Rotation(pitch=0.000000, yaw=-89.970146, roll=0.000000))
BoundingBox(Location(x=-6.673333, y=-204.676331, z=0.985109), Extent(x=1.177870, y=0.381839, z=0.803412), Rotation(pitch=0.000000, yaw=-178.560471, roll=0.000000))
BoundingBox(Location(x=-149.065872, y=107.696724, z=0.985109), Extent(x=1.177870, y=0.381839, z=0.803412), Rotation(pitch=0.000000, yaw=89.622032, roll=0.000000))
BoundingBox(Location(x=-9.264062, y=155.699966, z=0.985046), Extent(x=1.177870, y=0.381839, z=0.803412), Rotation(pitch=0.000000, yaw=89.637466, roll=0.000000))
BoundingBox(Location(x=163.855347, y=-193.897766, z=0.985109), Extent(x=1.177870, y=0.381839, z=0.803412), Rotation(pitch=0.000000, yaw=0.000000, roll=0.000000))
get_actor: 3/10 get_level_bbs: 0/54

spawn_npc.py

#!/usr/bin/env python

import glob
import os
import sys
import time

carla_egg_path = "/space/repos/CARLA_0.9.10/PythonAPI/carla/dist/carla-0.9.10-py3.7-linux-x86_64.egg"
sys.path.append(carla_egg_path)

import carla

from carla import VehicleLightState as vls

import argparse
import logging
import random

def main():
    argparser = argparse.ArgumentParser(
        description=__doc__)
    argparser.add_argument(
        '--host',
        metavar='H',
        default='127.0.0.1',
        help='IP of the host server (default: 127.0.0.1)')
    argparser.add_argument(
        '-p', '--port',
        metavar='P',
        default=2000,
        type=int,
        help='TCP port to listen to (default: 2000)')
    argparser.add_argument(
        '-n', '--number-of-vehicles',
        metavar='N',
        default=10,
        type=int,
        help='number of vehicles (default: 10)')
    argparser.add_argument(
        '-w', '--number-of-walkers',
        metavar='W',
        default=50,
        type=int,
        help='number of walkers (default: 50)')
    argparser.add_argument(
        '--safe',
        action='store_true',
        help='avoid spawning vehicles prone to accidents')
    argparser.add_argument(
        '--filterv',
        metavar='PATTERN',
        default='vehicle.*',
        help='vehicles filter (default: "vehicle.*")')
    argparser.add_argument(
        '--filterw',
        metavar='PATTERN',
        default='walker.pedestrian.*',
        help='pedestrians filter (default: "walker.pedestrian.*")')
    argparser.add_argument(
        '--tm-port',
        metavar='P',
        default=8000,
        type=int,
        help='port to communicate with TM (default: 8000)')
    argparser.add_argument(
        '--sync',
        action='store_true',
        help='Synchronous mode execution')
    argparser.add_argument(
        '--hybrid',
        action='store_true',
        help='Enanble')
    argparser.add_argument(
        '--car-lights-on',
        action='store_true',
        default=False,
        help='Enanble car lights')
    args = argparser.parse_args()

    logging.basicConfig(format='%(levelname)s: %(message)s', level=logging.INFO)

    vehicles_list = []
    walkers_list = []
    all_id = []
    client = carla.Client(args.host, args.port)
    client.set_timeout(10.0)
    synchronous_master = False

    try:
        world = client.get_world()

        traffic_manager = client.get_trafficmanager(args.tm_port)
        traffic_manager.set_global_distance_to_leading_vehicle(2.0)
        if args.hybrid:
            traffic_manager.set_hybrid_physics_mode(True)

        if args.sync:
            settings = world.get_settings()
            traffic_manager.set_synchronous_mode(True)
            if not settings.synchronous_mode:
                synchronous_master = True
                settings.synchronous_mode = True
                settings.fixed_delta_seconds = 0.05
                world.apply_settings(settings)
            else:
                synchronous_master = False

        blueprints = world.get_blueprint_library().filter(args.filterv)
        blueprintsWalkers = world.get_blueprint_library().filter(args.filterw)
        logging.info("Walker blueprints:[%s]" % blueprintsWalkers)

        # ditch the kids
        blueprintsWalkers = [x for x in blueprintsWalkers if not x.id.endswith('0008')]
        blueprintsWalkers = [x for x in blueprintsWalkers if not x.id.endswith('0009')]
        blueprintsWalkers = [x for x in blueprintsWalkers if not x.id.endswith('0010')]
        blueprintsWalkers = [x for x in blueprintsWalkers if not x.id.endswith('0011')]
        blueprintsWalkers = [x for x in blueprintsWalkers if not x.id.endswith('0012')]
        blueprintsWalkers = [x for x in blueprintsWalkers if not x.id.endswith('0013')]
        blueprintsWalkers = [x for x in blueprintsWalkers if not x.id.endswith('0014')]

        if args.safe:
            blueprints = [x for x in blueprints if int(x.get_attribute('number_of_wheels')) == 4]
            blueprints = [x for x in blueprints if not x.id.endswith('isetta')]
            blueprints = [x for x in blueprints if not x.id.endswith('carlacola')]
            blueprints = [x for x in blueprints if not x.id.endswith('cybertruck')]
            blueprints = [x for x in blueprints if not x.id.endswith('t2')]

        spawn_points = world.get_map().get_spawn_points()
        number_of_spawn_points = len(spawn_points)

        if args.number_of_vehicles < number_of_spawn_points:
            random.shuffle(spawn_points)
        elif args.number_of_vehicles > number_of_spawn_points:
            msg = 'requested %d vehicles, but could only find %d spawn points'
            logging.warning(msg, args.number_of_vehicles, number_of_spawn_points)
            args.number_of_vehicles = number_of_spawn_points

        # @todo cannot import these directly.
        SpawnActor = carla.command.SpawnActor
        SetAutopilot = carla.command.SetAutopilot
        # SetVehicleLightState = carla.command.SetVehicleLightState
        FutureActor = carla.command.FutureActor

        # --------------
        # Spawn vehicles
        # --------------
        batch = []
        for n, transform in enumerate(spawn_points):
            if n >= args.number_of_vehicles:
                break
            blueprint = random.choice(blueprints)
            if blueprint.has_attribute('color'):
                color = random.choice(blueprint.get_attribute('color').recommended_values)
                blueprint.set_attribute('color', color)
            if blueprint.has_attribute('driver_id'):
                driver_id = random.choice(blueprint.get_attribute('driver_id').recommended_values)
                blueprint.set_attribute('driver_id', driver_id)
            blueprint.set_attribute('role_name', 'autopilot')

            # prepare the light state of the cars to spawn
            light_state = vls.NONE
            if args.car_lights_on:
                light_state = vls.Position | vls.LowBeam | vls.LowBeam

            # spawn the cars and set their autopilot and light state all together
            # batch.append(SpawnActor(blueprint, transform)
            #    .then(SetAutopilot(FutureActor, True, traffic_manager.get_port()))
            #    .then(SetVehicleLightState(FutureActor, light_state)))
            batch.append(SpawnActor(blueprint, transform)
                         .then(SetAutopilot(FutureActor, True, traffic_manager.get_port())))

        for response in client.apply_batch_sync(batch, synchronous_master):
            if response.error:
                logging.error(response.error)
            else:
                vehicles_list.append(response.actor_id)

        # -------------
        # Spawn Walkers
        # -------------
        # some settings
        percentagePedestriansRunning = 0.0      # how many pedestrians will run
        percentagePedestriansCrossing = 0.0     # how many pedestrians will walk through the road
        # 1. take all the random locations to spawn
        spawn_points = []
        for i in range(args.number_of_walkers):
            spawn_point = carla.Transform()
            loc = world.get_random_location_from_navigation()
            if (loc != None):
                spawn_point.location = loc
                spawn_points.append(spawn_point)
        # 2. we spawn the walker object
        batch = []
        walker_speed = []
        for spawn_point in spawn_points:
            walker_bp = random.choice(blueprintsWalkers)
            # set as not invincible
            if walker_bp.has_attribute('is_invincible'):
                walker_bp.set_attribute('is_invincible', 'false')
            # set the max speed
            if walker_bp.has_attribute('speed'):
                if (random.random() > percentagePedestriansRunning):
                    # walking
                    walker_speed.append(walker_bp.get_attribute('speed').recommended_values[1])
                else:
                    # running
                    walker_speed.append(walker_bp.get_attribute('speed').recommended_values[2])
            else:
                print("Walker has no speed")
                walker_speed.append(0.0)
            batch.append(SpawnActor(walker_bp, spawn_point))
        results = client.apply_batch_sync(batch, True)
        walker_speed2 = []
        for i in range(len(results)):
            if results[i].error:
                logging.error(results[i].error)
            else:
                walkers_list.append({"id": results[i].actor_id})
                walker_speed2.append(walker_speed[i])
        walker_speed = walker_speed2
        # 3. we spawn the walker controller
        batch = []
        walker_controller_bp = world.get_blueprint_library().find('controller.ai.walker')
        for i in range(len(walkers_list)):
            batch.append(SpawnActor(walker_controller_bp, carla.Transform(), walkers_list[i]["id"]))
        results = client.apply_batch_sync(batch, True)
        for i in range(len(results)):
            if results[i].error:
                logging.error(results[i].error)
            else:
                walkers_list[i]["con"] = results[i].actor_id
        # 4. we put altogether the walkers and controllers id to get the objects from their id
        for i in range(len(walkers_list)):
            all_id.append(walkers_list[i]["con"])
            all_id.append(walkers_list[i]["id"])
        all_actors = world.get_actors(all_id)

        # wait for a tick to ensure client receives the last transform of the walkers we have just created
        if not args.sync or not synchronous_master:
            world.wait_for_tick()
        else:
            world.tick()

        # 5. initialize each controller and set target to walk to (list is [controler, actor, controller, actor ...])
        # set how many pedestrians can cross the road
        world.set_pedestrians_cross_factor(percentagePedestriansCrossing)
        for i in range(0, len(all_id), 2):
            # start walker
            all_actors[i].start()
            # set walk to random point
            all_actors[i].go_to_location(world.get_random_location_from_navigation())
            # max speed
            all_actors[i].set_max_speed(float(walker_speed[int(i/2)]))

        print('spawned %d vehicles and %d walkers, press Ctrl+C to exit.' % (len(vehicles_list), len(walkers_list)))

        # example of how to use parameters
        traffic_manager.global_percentage_speed_difference(30.0)

        ## Start of modifications ##

        tick_num = 0
        while True:
            tick_num += 1
            print(f'###### Tick {tick_num:>5} #####')
            actors = world.get_actors()
            global_vehicle_bbs = world.get_level_bbs(carla.CityObjectLabel.Vehicles)

            vehicles = 0
            bad_bounding_boxes = 0
            for actor in actors:
                if "traffic" in actor.type_id or "spectator" in actor.type_id:
                    continue
                box = actor.bounding_box

                if not box.extent.x or not box.extent.y or not box.extent.z:
                    print(f"Actor ID({actor.id}): {actor.get_transform().location} {box})")
                    bad_bounding_boxes += 1

                vehicles += 1

            bad_global_bounding_boxes = 0
            for box in global_vehicle_bbs:
                print(box)
                if not box.extent.x or not box.extent.y or not box.extent.z:
                    bad_global_bounding_boxes += 1
            total_global_bounding_boxes = len(global_vehicle_bbs)

            # Statistics
            print(f"get_actor: {bad_bounding_boxes}/{vehicles} get_level_bbs: {bad_global_bounding_boxes}/{total_global_bounding_boxes}\n")

            ## End of modifications ##

            if args.sync and synchronous_master:
                world.tick()
            else:
                world.wait_for_tick()

    finally:

        if args.sync and synchronous_master:
            settings = world.get_settings()
            settings.synchronous_mode = False
            settings.fixed_delta_seconds = None
            world.apply_settings(settings)

        print('\ndestroying %d vehicles' % len(vehicles_list))
        client.apply_batch([carla.command.DestroyActor(x) for x in vehicles_list])

        # stop walker controllers (list is [controller, actor, controller, actor ...])
        for i in range(0, len(all_id), 2):
            all_actors[i].stop()

        print('\ndestroying %d walkers' % len(walkers_list))
        client.apply_batch([carla.command.DestroyActor(x) for x in all_id])

        time.sleep(0.5)

if __name__ == '__main__':

    try:
        main()
    except KeyboardInterrupt:
        pass
    finally:
        print('\ndone.')

How I run the spawn_npc.py script.

python3 spawn_npc.py --host [host] -n 10 -w 0 --filterv vehicle.harley-davidson.low_rider 2>&1 | tee output.txt
jamesgunnfiveai commented 3 years ago

Commit: bdeafba

I'm observing the same behaviour (though not for the exact script you've provided, I have separately hit the issue). Similar to what you've observed, this only affects some spawned agents of particular classes. The problematic classes I've encountered are:

vehicle.bh.crossbike
vehicle.diamondback.century
vehicle.harley-davidson.low_rider
vehicle.gazelle.omafiets
vehicle.kawasaki.ninja
vehicle.yamaha.yzf 

I believe all of these are two-wheelers.

ARSekkat commented 3 years ago

I had the same issue with the last release 0.9.11, also just with 2Wheeled.

corkyw10 commented 3 years ago

@doterop would you be able to have a look at this please?

rossivalen commented 3 years ago

observed the same issue, i was thinking about assigning a fixed value for that dimension (since all pedestrians have the same extents values) and solve that way. Would you mind sharing any alternative solution you found, if any? Thanks

stale[bot] commented 3 years ago

This issue has been automatically marked as stale because it has not had recent activity. It will be closed if no further activity occurs. Thank you for your contributions.

100rab-S commented 2 years ago

This issue is still persistent with 0.9.13 version too. It is only with 2-wheelers. Due to this y = 0 extent, the bounding box could not be plotted when we project the 3D bounding box to 2D pixel wise bounding box.

stale[bot] commented 2 years ago

This issue has been automatically marked as stale because it has not had recent activity. It will be closed if no further activity occurs. Thank you for your contributions.

yli-miovision commented 2 years ago

Saw the same issue in 0.9.13. Any suggested workaround like what @rossivalen mentioned?

qiuhaining commented 1 year ago

I had the same issue with the last release 0.9.13, also just with 2Wheeled.

hh0rva1h commented 1 year ago

@bernatx This needs your attention. There are multiple reports of this, e.g. https://github.com/carla-simulator/carla/issues/3801 and they are still perfectly valid in recent Carla versions (tested on 0.9.13 and 0.9.14).

On 0.9.13 all 2-wheel actors have zero y size of the bounding box, on 0.9.14 it is even worse, both x and y are zero. Furthermore the bounding box location if often very much off in the y-axis.

Please assign to a colleague that is still active in the project.

qiuhaining commented 1 year ago

收到了!谢谢!

bernatx commented 1 year ago

Hi, We are checking the bug. It seems that the bounding of the bike itself is correct, but when we try to add the bounding of the rider, it is done incorrectly. We are fixing that.

Thanks for warning about that.

carlyangdong commented 1 year ago

Hi, We are checking the bug. It seems that the bounding of the bike itself is correct, but when we try to add the bounding of the rider, it is done incorrectly. We are fixing that.

Thanks for warning about that.

so, which version can be used?

JiahaoXia commented 12 months ago

Same for me using version 0.9.14. Does anyone know how to fix this?

MMNavetty commented 9 months ago

Please find a solution to this problem. Does anyone checks if it is still the same on 0.9.15 ?

zhang-ruining commented 7 months ago

carla 0.9.15 is fine

MarcelPiNacy-CVC commented 6 months ago

Hi,

as of 0.9.15 does anyone still have issues with this?

Marcel

zhang-ruining commented 6 months ago

 0.9.15 no issues

------------------ 原始邮件 ------------------ 发件人: @.>; 发送时间: 2024年5月10日(星期五) 晚上10:05 收件人: @.>; 抄送: "Zhang @.>; @.>; 主题: Re: [carla-simulator/carla] Some bounding box extents are 0 in Y axis (#3670)

Hi,

as of 0.9.15 does anyone still have issues with this?

Marcel

— Reply to this email directly, view it on GitHub, or unsubscribe. You are receiving this because you commented.Message ID: @.***>

CallMeFrozenBanana commented 1 month ago

Please find a solution to this problem. Does anyone checks if it is still the same on 0.9.15 ?

Yes, I think there is the same problem on v0.9.15