Generic Setup
Guide for the setup steps to get ACO working on new installs on the VOXL2
Hardware setup
ACO is designed to run on ModalAI's VOXL2. It can operate either with an external flight controller (such as a Pixhawk) or using VOXL-PX4.
When using an external flight controller, connect the VOXL2 to the FCU using a serial connection from the VOXL2 to a TELEM port on the flight controller.
Connect the LightWare SF45 to a USB port on the VOXL2.
Mounting the SF45
The LightWare SF45 is a rotating 2D LiDAR. For best performance with ACO, mount the LiDAR either upright or upside down on the drone (the SF45 automatically detects its orientation). Ensure that the front of the LiDAR is perfectly aligned with the front of the drone and that its field of view is free from obstructions such as propellers or other payloads.
Install ACO on the VOXL2
To purchase the ACO software license, use this link.
Then use the Ascend Installer to install ACO on the drone with the purchased license.
VOXL2 Setup
The next few steps would execute commands on the VOXL2, so make sure to have ssh/adb access.
1. VOXL2 setup
Enable and start voxl-mavlink-server
Enable and start voxl-vision-hub
2. Edit VOXL2 config files
Open voxl-mavlink-server.conf
Edit the following:
en_external_uart_ap: trueprimary_static_gcs_ip: <ip_address_of_gcs_laptop>autopilot_uart_bus: Set this value based on which UART bus is connected to the FCU. Refer to the VOXL2 expansion board table in the ModalAI documentation and select the corresponding UART bus value from here.This parameter tells the VOXL MAVLink server which UART interface is connected to the flight controller.
Save and exit: !qa
With the updated parameters, restart voxl-mavlink-server :
Open voxl-vision-hub.conf
Edit the following:
"en_localhost_mavlink_udp": true
Restart voxl-vision-hub :
3. FCU Setup
This step involves configuring the flight controller, the component responsible for the drone’s overall control and behavior.
If using external Flight Controller
If you are using an external flight controller such as a Pixhawk 6C, connect the VOXL2 to the Pixhawk via a serial connection on a TELEMx port.
Next, we have to configure the serial port to connect to the MAVLink Server:
Connect to the FCU over QGC
Go to the Parameters list, and edit the
MAV_x_CONFIGtoTELEMx, whereTELEMxcorresponds to theTELEMport the VOXL2 was connected to the FCUNext, edit the
SER_TELx_BAUDto 921600 (It should be by default)
It should be noted that without setting MAV_x_CONFIG , the SER_TELx_BAUD parameter does not show up
For example, lets say the VOXL2 is connected to the TELEM2 port, then we could set MAV_1_CONFIG to TELEM2 , and so SER_TEL2_BAUD would need to be set to 921600 (It should be by default)
If using voxl-px4
voxl-px4 If you are using the native voxl-px4 flight controller running on the VOXL2:
Make sure
voxl-px4is enabled and running:
Verify that it is active and running:
Edit the following sections in
/etc/ascend/ascend-co.config
"MAVLink":
mavlink_port: "udp://0.0.0.0:14557"
Verify communication
To verify if the VOXL2 and FCU are connected, run this on the VOXL2:
-k switch shows debug info on messages coming FROM the FCU
You should be getting a stream of data like so:
4. Edit ascend-co.config file
ascend-co.config fileEdit the following sections in /etc/ascend/ascend-co.config
"MAVLink":
gcs_ip: <ip_address_of_gcs_laptop>system_id:<MAV Sys ID of the FCU>
View the output logs with:
You should see something similar to:
On QGC, you should see a status text Obstacle Avoidance System ONLINE.
Moreover, you should start to see the SF45 start spinning.
Foxglove
Install foxglove from here: https://foxglove.dev/download.
On the Foxglove Dashboard page, click Open Connection.
Replace localhost with the drones IP address (Make sure to be on the same local network), and you should see the points populate in a 3D environment.

Edit PX4 Params
Make sure the SYS_VEHICLE_RESP is ≥ 0.5
This is to make sure the drone stops aggressively and in time
If the landing speed is aggressive, decrease the
MPC_Z_VEL_MAX_DNto1m/s
Diagnostics
Disconnecting the SF45 from the USB cable should result in a status text error on QGC

If this does not show up, that means the drone is not connected to QGC
Double check the entered QGC IP address
Ensure you are able to ping QGC from the device and vice versa
Restart the device and QGC
Final things to keep in mind
As a final setup step, please set
SYS_VEHICLE_RESP = 0.5andMPC_Z_VEL_MAX_DN = 1 m/sin the PX4 parameters. These values help the drone stop in time, without them we’ve seen it get a bit too close to obstacles.The software is active only in
Mission modeandwhile airborne(it’s inactive during takeoff, landing, or in other modes).For a first test flight, we recommend the following settings:
Plan a simple mission, where the drone goes 15m forward, then returns to its take off point
Set the mission speed to 1 m/s.
Try holding a stick or any movable object in front of the drone at some distance after takeoff to see the system react.
Once that looks good, you can test it against a wall or tree. We’ve thoroughly tested this on our end and don’t expect issues, but it’s always good to take extra safety precautions when running it in a new environment.
Always make sure to have back up joysticks ready incase you see the drone get too close to the obstacle
Note that the SF45 can detect dust particles, so in dusty conditions, it might falsely flag fine dust as an obstacle.
Last updated
