# carla_apollo_bridge **Repository Path**: flashpig8014/carla_apollo_bridge ## Basic Information - **Project Name**: carla_apollo_bridge - **Description**: No description available - **Primary Language**: Unknown - **License**: Apache-2.0 - **Default Branch**: main - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 1 - **Created**: 2024-10-09 - **Last Updated**: 2024-11-22 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # Carla Apollo Bridge This python package provides a bridge for communicating between Carla's Python API and Apollo. Besides the source code, a Dockerfile and scripts are provided for getting setup quickly and easily. This package was tested with Carla version 0.9.13, and Apollo v7.0.0 and v8.0.0.
## Installation ### Pre-requisites For the simplest setup, we will run Carla in Docker. #### docker [https://docs.docker.com/install/linux/docker-ce/ubuntu/](https://docs.docker.com/install/linux/docker-ce/ubuntu/) #### NVIDIA Container Toolkit [https://docs.nvidia.com/datacenter/cloud-native/container-toolkit/install-guide.html](https://docs.nvidia.com/datacenter/cloud-native/container-toolkit/install-guide.html) ## Setup / Getting Started The following commands will be run with 3 containers: - carla-server: this container will run the Carla simulator - carla-apollo-13: bridge between apollo and carla-server containers, has cyber_py and carla python packages installed and unlike apollo container, can easily display gui applications on local machine - apollo_dev_user: runs the apollo stack ### End-to-end video tutorial of CARLA simulator with Apollo driving End-to-end tutorial that goes through how to install, configure and use this Carla-Apollo-Bridge, with Carla simulator (v0.9.13) and Apollo driving software (v8.0.0): [https://youtu.be/2dQC3ToJGJU?si=6mZMHP1RRZHPRggX](https://youtu.be/2dQC3ToJGJU?si=6mZMHP1RRZHPRggX) ### Clone and build Apollo Clone Apollo : ``` git clone https://github.com/ApolloAuto/apollo ``` Out of container open /apollo/cyber/setup.bash and change Cyber_ip to 172.17.0.1 ``` export CYBER_IP=172.17.0.1 ``` Add the following code lines to the file **apollo/modules/planning/tasks/deciders/speed\_bounds\_decider/speed\_limit\_decider.cc** after defining speed\_limit\_from\_reference\_line : ``` // (1) speed limit from map double speed_limit_from_reference_line = reference_line_.GetSpeedLimitFromS(reference_line_s); /************** added as a temproraly solution *********************/ /****** for speed_limit_from_reference_line = 0 in Carla Towns *****/ if (speed_limit_from_reference_line == 0) { speed_limit_from_reference_line = 11.176 ; } /*******************************************************************/ ``` **Important:** Update controlling parameters for Carla Lincoln vehicle in Apollo: - Replace the file **control\_conf.pb.txt** in **/apollo/modules/calibration/data/Lincoln2017MKZ\_LGSVL** by the file in **carla\_apollo\_bridge/apollo\_control** Now in the apollo container, build apollo... ``` # run in apollo_dev_user container: ./apollo.sh build_gpu ``` Add [Carla Maps](https://github.com/MaisJamal/Carla_Towns-Apollo_maps) to Apollo. Note: currently the bridge publishes the traffic lights' groundtruth of Town01 only. The traffic lights of other maps will be added to their maps and the bridge soon. ## Usage #### Run Apollo container and enter it ``` cd apollo ./docker/scripts/dev_start.sh ./docker/scripts/dev_into.sh ``` Start Apollo Dreamview inside the container. ``` bash scripts/bootstrap.sh ``` In Dreamview setup the mode to **Mkz Lgsvl** , the vehicle to **Lincoln2017MKZ LGSVL** and the map to the needed Carla Town, then run the following modules: **Localization, Routing, Planning, Prediction**. To monitor the planning and control process turn **PNC Monitor** on. #### Run Carla docker container ``` # run on local machine: docker run -it --privileged -v /tmp/.X11-unix:/tmp/.X11-unix:rw -v /usr/lib/nvidia:/usr/lib/nvidia --device /dev/dri --rm -e __NV_PRIME_RENDER_OFFLOAD=1 -e __GLX_VENDOR_LIBRARY_NAME=nvidia -e DISPLAY=$DISPLAY -e NVIDIA_VISIBLE_DEVICES=all -e NVIDIA_DRIVER_CAPABILITIES=all --gpus=all --name=carla-server --net=host -d carlasim/carla:0.9.13 ``` ### Build docker image / run container for Carla-Apollo-13 bridge ``` # run on local machine, starting from the root of this repo: cd docker ./build_docker.sh ./run_docker.sh # enter Carla-apollo-13 container docker exec -ti carla-apollo-13 bash ``` Change CYBER_IP in /apollo/cyber/setup.bash to the carla-apollo-13 container IP address To find out the ip address to use, run this command outside of the container: ``` # get ip address of carla-apollo-13 container (default: 172.17.0.2): docker inspect carla-apollo-13 | grep IPAddress # in carla-apollo-13 container change the Cyber_ip: gedit /apollo/cyber/setup.bash # then source your ~/.bashrc file to apply the changes: source ~/.bashrc ``` #### Create an ego vehicle and client Choose one of Carla maps in Apollo dreamview , then change the map in UnrealEngine to it by: ``` python carla-python-0.9.13/util/config.py -m Town03 --host 172.17.0.1 ``` Run these commands inside the carla-apollo-13 container ``` # run in carla-apollo-13 container, start Carla example scenario: cd ~/carla_apollo_bridge_13 python examples/manual_control.py ``` Before starting the bridge set the configurations in config/bridge\_settings.yaml. To enable the control from apollo, turn on the **control module** in Apollo and in the settings file set apply\_control to true , otherwise the ego vehicle in Carla will follow the planned trajectory without applying control. ``` # in config/bridge_settings.yaml: apply_control : true ``` To publish GroundTruth of obstacles: ``` # in config/bridge_settings.yaml: publish_obstacles_ground_truth: true ``` To publish LIDAR data , adjust LIDAR attributes in **addLidar** method in manual_control.py, then: ``` # in config/bridge_settings.yaml: publish_lidar_msg: true ``` Run the bridge: ``` # run in carla-apollo-13 container, start carla-apollo bridge: cd ~/carla_apollo_bridge_13 python carla_cyber_bridge/run_bridge.py ``` #### Interfacing with the simulation For interfacing with the simulator, a copy of the Carla PythonAPI is included in the carla-apollo-13 container. Some uses: ``` # run in another carla-apollo-13 container terminal: cd ~/carla_apollo_bridge_13/ # change the map python carla-python-0.9.13/util/config.py -m Town04 --host 172.17.0.1 # spawn traffic python examples/generate_traffic.py --async ```