This python package provides a bridge for communicating between Apollo's Python API and Carla. 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.12, and Apollo v5.0.0.
Apollo runs on the Cyber RT framework. This is a cyber port of the work done here: https://github.com/carla-simulator/ros-bridge
For the simplest setup, we will run Carla in Docker. You can run Carla from source if you would like, but the setup is more involved: https://carla.readthedocs.io/en/latest/how_to_build_on_linux/
https://docs.docker.com/install/linux/docker-ce/ubuntu/
https://github.com/nvidia/nvidia-docker
The following commands will be run with 3 containers:
- carla-server: this container will run the Carla simulator
- carla-apollo: 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
Our fork of Apollo has a few changes that make it work with this Carla bridge. You can see those changes here: https://github.com/ApolloAuto/apollo/compare/v5.0.0...AuroAi:carla
# run on local machine:
git clone https://github.com/auroai/apollo --single-branch -b carla
cd apollo
./docker/scripts/dev_start.sh
./docker/scripts/dev_into.sh
Now in the apollo container, build apollo...
# run in apollo_dev_user container:
./apollo.sh build_gpu
./CarlaUE4.sh
This container will run the bridge and sim clients.
# run on local machine, starting from the root of this repo:
cd docker
./build_docker.sh
./run_docker.sh
# run on local machine:
docker exec -ti carla-apollo bash
Change CYBER_IP in /apollo/cyber/setup.bash to the carla-apollo container IP address
To find out the ip address to use, run this command outside of the container:
# run on local machine:
docker inspect carla-apollo | grep IPAddress
Then update the file in your preferred editor
# run in carla-apollo container:
vim /apollo/cyber/setup.bash
# and so on to edit the text file
# then source your ~/.bashrc file to apply the changes:
source ~/.bashrc
Run these commands inside the carla-apollo container
# run in carla-apollo container:
pip install carla_python/carla/dist/carla-0.9.12-cp27-cp27mu-manylinux_2_27_x86_64.whl
Delete files in docker carla-apollo /root/.cache/bazel/_bazel_root/install
# run in carla-apollo container
cd /apollo
./apollo.sh build_cyber
cd /apollo/cyber/carla_bridge
python carla_cyber_bridge/bridge.py
In another terminal...
# run in carla-cyber container
cd /apollo/cyber/carla_bridge/carla_spawn_objects
python carla_spawn_objects.py
Now, in the apollo container, run dreamview:
# run in apollo_dev_user container:
. /apollo/scripts/dreamview.sh start_fe
Then, in a web browser, go to: localhost:8888
Click the 'Module Controller' button on the sidebar. Click the 'Routing' switch to enable Routing.
Click the 'Route Editing' button on the sidebar. Click on the map to place points. Place one point to route from the vehicle's current location. Place two points to route from the first point to the second. Then, click 'Send Routing Request'. If routing is successful, a red line appears showing the planned route.
The example scripts use a ground truth obstacle sensor instead of Apollo perception. This is enable by including object_sensor in config/settings.yaml.
Once a route has been planned, and prediction output is received you can enable the 'Planning' module. The bridge will automatically move the vehicle along the planned path unless output from the 'Control' module is received.
If the 'Control' module is enabled, the bridge will apply its output to the ego vehicle, but this feature has not been fully developed yet. So, the ego's movement may be erratic. The recommended way to use the bridge is to allow it to use the planner output for moving the vehicle.