Hello ModalAI Team,
Please let me know if there is any further information needed. So far, I haven't had the drone successfully navigate in trajectory in any version of the VOXL SDK I've tried (1.4/1.5/1.6).
Hello ModalAI Team,
Please let me know if there is any further information needed. So far, I haven't had the drone successfully navigate in trajectory in any version of the VOXL SDK I've tried (1.4/1.5/1.6).
Hello ModalAI Team,
I am still trying to get the navigation working with my team's Starling 2.
system-image: 1.8.06-M0054-14.1a-perf
kernel: #1 SMP PREEMPT Wed Oct 22 04:13:18 UTC 2025 4.19.125
hw platform: M0054
mach.var: 1.0.1
SKU: MRB-D0014-4-V1-C27-T8-M22-X0
voxl-suite: 1.6.2
I have updated the drone to the latest voxl version 1.6.2. I am able to fly the drone in position mode and figure 8 mode.
I few the drone around for a couple of minutes in our testing room gathering map data. I then switched the drone into offboard_mode: trajectory. I planned a point and saw the projected path drawing a simple straight line. There are not obstacles in the way to navigate around/avoid. The drone just flew directly at the grown instead of following the path. Is there anything I should try software/settings-wise to try and get navigation working? Is there anything about the layout/appearance of a room that could cause this? Please see the attached image.

@Cliff-Wong Thanks! I will try this as soon as possible and report how it works out.
Hello @Cliff-Wong,
Yes, I flew the drone around the room in position mode until the map was generated. I then flipped the remote to offboard with 'trajectory' set. Here are the files below:
/**
If you are running MAVROS/MAVSDK onboard VOXL and wish to open access to
PX4 through a localhost UDP port simply ensure the follow feature is
enabled. This is set to true by default. This will allow one local process
to communicate with PX4 via port 14551 by default, NOT 14550 which is
reserved for connections outside the board. These separation prevents
conflicts between the two sockets. Both MAVROS and MAVSDK can be
configured to use this port.
Port number for localhost UDP socket, default 14551
Enable processing of VIO data from MPA to be sent to PX4 as mavlink
odometry messages. Enabled by default.
Primary pipe to subscribe to for VIO data. Must be a standard libmodal-pipe
vio_data_t type. Default is qvio. If no data is available on this pipe
then voxl-vision-hub will subscribe to secondary_vio_pipe instead.
Secondary pipe to subscribe to for VIO data. Must be a standard libmodal-pipe
vio_data_t type. Default is ov for openvins. If no data is available on this
pipe then voxl-vision-hub will subscribe to the primary vio_pipe instead.
Set to an empty string to disable. Default: ov
For VIO algorithms like qVIO that can initialize in any orientation
and output their estimate of the gravity vector, we suggest leaving
this enabled to allow vvpx4 to automatically send the reset signal
back to the VIO pipe if VIO was initialized upside-down or sufficiently
off-level. Helpful if the user powers on a drone while carrying it to
the flight area and VIO starts too early.
Wait this for this amount of time of having good VIO data before
actually starting to send to PX4. This helps stop EKF2 getting
confused if VIO flickers in and out while struggling to init.
Set to 0 to disable the feature.
On by default. Send Odometry messages to PX4 with a quality of -1 when
VIO indicates a failure so EKF2 can start dead reckoning.
This MAY need to be turned off with PX4 versions older than 1.14
since the quality metric was no implemented prior to PX4 1.14
Enable setting the VOXL system time to GPS time if no NTP server can be
reached via network to set the time.
Force PX4 to use onboard mode for mavlink 1 channel which is the channel
apq8096 (VOXL1) uses to communicate UART Mavlink with PX4. Not applicable
to qrb5165-based platforms. Sets the MAV1_MODE PX4 param.
Trigger a reboot of PX4 one some of PX4's unrecoverable errors,
Not applicable to qrb5165
Yaw estimate error & High Accelerometer Bias and both detected
Allowable standard deviation in roll/pitch values to consider the drone
stable enough in flight to do a PX4 horizon calibration. Default is 0.45,
you can increase this slightly if flying in a small indoor area or with
a drone that does not hold still very well.
See https://docs.modalai.com/calibrate-px4-horizon/
Enable Hardware In The Loop (HITL) testing extensions. Disabled by default.
off: VVPX4 will not send any offboard commands to PX4
figure_eight: Default value, VVPX4 commands PX4 to fly a figure 8 path
follow_tag: Drone will follow an apriltag around. Very dangerous, not
recommended for customer use, for ModalAI R&D only.
trajectory: VVPX4 receives polynomial trajectories by pipe and commands
PX4 to follow the trajectory path. Still in development.
backtrack: Drone will replay, in reverse order, the last few seconds of it's
position including yaw. This is useful when the drone loses
the communication link and needs to get back to a place where
it is able to regain the link. This mode will notice when the
RC link goes away and sends a command to px4 to enter offboard mode.
wps: read waypoints in local coordinate system
Apriltag ID to follow in follow_tag mode
Enable by default, resets the center of the figure 8 path to wherever
the drone is when flipped into offboard mode. When disabled, the drone
will quickly fly back to the XYZ point 0,0,-1.5 in VIO frame before
starting the figure 8. Disabling this feature can be dangerous if VIO
has drifted significantly.
Enable by default, resets the center of the wps path to wherever
the drone is when flipped into offboard mode. When disabled, the drone
will quickly fly back to the XYZ point 0,0,-1.5 in VIO frame before
starting the figure 8. Disabling this feature can be dangerous if VIO
has drifted significantly.
Robot radius to use when checking collisions within the trajectory monitor.
The trajectory monitor is only active when in trajectory mode
The time step to sample along the polynomials by when checking for collisions
in the collision monitor.
Maximum distance to look along the trajectory. Sensor data further out can be
unrealiable so keeping this value small reduces false positives
Number of seconds worth of position data to store for replay in backtrack mode.
RC channel to monitor for transitions into and out of backtrack mode.
Value above which backtrack is considered enabled on the configured RC channel.
Enable fixed frame relocalization via voa_inputs.
See: https://docs.modalai.com/voxl-vision-px4-apriltag-relocalization/
Length of the moving average filter to use for smooth relocalization
when a tag is detected. Default is 5, a longer filter will result in
smoother behavior when a new tag comes into view. Set to 1 to do no
filtering at all and assume every tag detection is accurate.
When enabled, mavlink position_target_local_ned_t commands received on
via UDP will be assumed to be in fixed frame and are then transformed
to local frame before being sent to PX4. This allows offboard mode
position commands from MAVROS/MAVSDK to be in fixed frame relative to
voa_inputs even though PX4/EKF2 operates in local frame relative to where
VIO initialized.
Enable processing of DFS and TOF data to be sent to PX4 as mavlink
obstacle_distance messages for collision prevention in position mode.
VOA ignores obstacles above and below the upper and lower bounds.
Remember, Z points downwards in body and NED frames, so the lower bound
is a positive number, and the upper bound is a negative number.
Defaults are lower: 0.15 upper: -0.15 Units are in meters.
number of seconds to keep track of sensor readings for VOA
default: 1.0
maximum number of sensor samples (points clouds) to fuse for every
mavlink transmision. Default is 100 so that voa_memory_s determines
when to discard old data instead. set this to 1 if you only want to use
the most recent sensor sample for example. If you start severly limiting
the number of point clouds used per fusion, you will also need to lower
voa_pie_threshold.
minimum distance from the drone's center of mass to consider a sensor
sample a valid point for mavlink transmission.
minimum distance from the drone's center of mass to consider a sensor
sample a valid point for mavlink transmission. Note this is and can be
different from the individual sensor limits.
VOA discards points in a bubble under the drone with this radius.
default 1.0. This helps the drone approach an obstacle, stop
ascend, and continue forward smoothly over the top.
Minimum number of points that must appear in and adjacent to a pie
segment to consider it populated. Default 3
Rate to send VOA mavlink data to autopilot. Independent from the
sensor input rates. Default 20
number of slices to divide the 360 degree span around the drone into.
default 36 (10 degree slices)
Radial depth of each bin during the pie binning step. Default 0.15
Array of pipes to subscribe to for use with VOA, up to 10 supported
Each entry has 4 fields:
populated, set to 1 to disable threasholding
*/
{
"config_file_version": 1,
"en_localhost_mavlink_udp": false,
"localhost_udp_port_number": 14551,
"en_vio": true,
"vio_pipe": "qvio",
"secondary_vio_pipe": "ov",
"vfc_vio_pipe": "ov",
"en_reset_vio_if_initialized_inverted": true,
"vio_warmup_s": 3,
"send_odom_while_failed": true,
"horizon_cal_tolerance": 0.5,
"en_hitl": false,
"offboard_mode": "trajectory",
"follow_tag_id": 0,
"figure_eight_move_home": true,
"robot_radius": 0.300000011920929,
"collision_sampling_dt": 0.1,
"max_lookahead_distance": 1,
"backtrack_seconds": 60,
"backtrack_rc_chan": 8,
"backtrack_rc_thresh": 1500,
"wps_move_home": true,
"wps_stride": 0,
"wps_timeout": 0,
"wps_damp": 1,
"wps_vfc_mission": true,
"wps_vfc_mission_loop": false,
"wps_vfc_mission_to_ramp": 25,
"wps_vfc_mission_to_kp": 0.10000000149011612,
"wps_vfc_mission_cruise_speed": 1,
"en_tag_fixed_frame": false,
"fixed_frame_filter_len": 5,
"en_transform_mavlink_pos_setpoints_from_fixed_frame": false,
"vfc_rate": 100,
"vfc_rc_chan_min": 980,
"vfc_rc_chan_max": 2020,
"vfc_thrust_ch": 3,
"vfc_roll_ch": 1,
"vfc_pitch_ch": 2,
"vfc_yaw_ch": 4,
"vfc_submode_ch": 6,
"vfc_alt_mode_rc_min": 0,
"vfc_alt_mode_rc_max": 0,
"vfc_flow_mode_rc_min": 0,
"vfc_flow_mode_rc_max": 0,
"vfc_hybrid_flow_mode_rc_min": 0,
"vfc_hybrid_flow_mode_rc_max": 0,
"vfc_position_mode_rc_min": 0,
"vfc_position_mode_rc_max": 2100,
"vfc_traj_mode_rc_min": 0,
"vfc_traj_mode_rc_max": 0,
"vfc_yaw_deadband": 30,
"vfc_vxy_deadband": 50,
"vfc_vz_deadband": 150,
"vfc_min_thrust": 0,
"vfc_max_thrust": 0.800000011920929,
"vfc_tilt_max": 0.43599998950958252,
"vfc_yaw_rate_max": 3,
"vfc_thrust_hover": 0.5,
"vfc_vz_max": 1,
"vfc_kp_z": 5.2899999618530273,
"vfc_kd_z": 5.9800000190734863,
"vfc_vxy_max": 3,
"vfc_kp_xy": 0.63999998569488525,
"vfc_kd_xy": 2.559999942779541,
"vfc_kp_z_vio": 5.2899999618530273,
"vfc_kd_z_vio": 5.9800000190734863,
"vfc_kp_xy_vio": 3.2400000095367432,
"vfc_kd_xy_vio": 3.9600000381469727,
"vfc_w_filt_xy_vio": 10,
"vfc_w_filt_xy_flow": 3,
"vfc_vel_ff_factor_vio": 0.899999976158142,
"vfc_xy_acc_limit_vio": 2.5,
"vfc_max_z_delta": 3,
"vfc_att_transition_time": 0.5,
"vfc_stick_move_threshold": 30,
"vfc_flow_transition_time": 1,
"vfc_q_min": 10,
"vfc_points_min": 7,
"vfc_en_submode_announcement": 1,
"vfc_disable_fallback": false,
"vfc_traj_csv": "/data/voxl-vision-hub/traj.csv",
"en_voa": true,
"voa_upper_bound_m": -0.15000000596046448,
"voa_lower_bound_m": 0.15000000596046448,
"voa_voa_memory_s": 1,
"voa_max_pc_per_fusion": 100,
"voa_pie_max_dist_m": 20,
"voa_pie_min_dist_m": 0.25,
"voa_pie_under_trim_m": 1,
"voa_pie_threshold": 3,
"voa_send_rate_hz": 20,
"voa_pie_slices": 36,
"voa_pie_bin_depth_m": 0.15000000596046448,
"voa_inputs": [{
"enabled": true,
"type": "point_cloud",
"input_pipe": "dfs_point_cloud",
"frame": "stereo_l",
"max_depth": 8,
"min_depth": 0.300000011920929,
"cell_size": 0.079999998211860657,
"threshold": 4,
"x_fov_deg": 68,
"y_fov_deg": 56,
"conf_cutoff": 0
}, {
"enabled": true,
"type": "point_cloud",
"input_pipe": "stereo_front_pc",
"frame": "stereo_front_l",
"max_depth": 8,
"min_depth": 0.300000011920929,
"cell_size": 0.079999998211860657,
"threshold": 4,
"x_fov_deg": 68,
"y_fov_deg": 56,
"conf_cutoff": 0
}, {
"enabled": true,
"type": "point_cloud",
"input_pipe": "stereo_rear_pc",
"frame": "stereo_rear_l",
"max_depth": 8,
"min_depth": 0.300000011920929,
"cell_size": 0.079999998211860657,
"threshold": 4,
"x_fov_deg": 68,
"y_fov_deg": 56,
"conf_cutoff": 0
}, {
"enabled": true,
"type": "tof",
"input_pipe": "tof",
"frame": "tof",
"max_depth": 6,
"min_depth": 0.15000000596046448,
"cell_size": 0.079999998211860657,
"threshold": 3,
"x_fov_deg": 106.5,
"y_fov_deg": 85.0999984741211,
"conf_cutoff": 125
}, {
"enabled": true,
"type": "rangefinder",
"input_pipe": "rangefinders",
"frame": "body",
"max_depth": 8,
"min_depth": 0.300000011920929,
"cell_size": 0.079999998211860657,
"threshold": 4,
"x_fov_deg": 68,
"y_fov_deg": 56,
"conf_cutoff": 0
}]
}
/**
This file contains configuration that's specific to voxl-open-vins-server.
NOTE: all time variables are measured in seconds
OpenVins param breakdown:
do_fej: whether or not to do first estimate Jacobians
imu_avg: whether or not use imu message averaging
use_rk4_integration: if we should use Rk4 imu integration.
cam_to_imu_refinement: whether or not to refine the imu-to-camera pose
cam_intrins_refinement: whether or not to refine camera intrinsics
cam_imu_ts_refinement: whether or not to calibrate cam to IMU time offset
max_clone_size: max clone size of sliding window
max_slam_features: max number of estimated SLAM features
max_slam_in_update: max number of SLAM features in a single EKF update
max_msckf_in_update: max number of MSCKF features used at an image timestep
Feature Reps can be any of the following:
0 - GLOBAL_3D
1 - GLOBAL_FULL_INVERSE_DEPTH
2 - ANCHORED_3D
3 - ANCHORED_FULL_INVERSE_DEPTH
4 - ANCHORED_MSCKF_INVERSE_DEPTH
5 - ANCHORED_INVERSE_DEPTH_SINGLE
feat_rep_msckf: (int) what representation our msckf features are in
feat_rep_slam: (int) what representation our slam features are in
cam_imu_time_offset: time offset between camera and IMU
slam_delay: delay that we should wait from init before estimating SLAM features
gravity_mag: gravity magnitude in the global frame
init_window_time: amount of time to initialize over
init_imu_thresh: variance threshold on our accel to be classified as moving
imu_sigma_w: gyroscope white noise (rad/s/sqrt(hz))
imu_sigma_wb: gyroscope random walk (rad/s^2/sqrt(hz))
imu_sigma_a: accelerometer white noise (m/s^2/sqrt(hz))
imu_sigma_ab: accelerometer random walk (m/s^3/sqrt(hz))
imu_sigma_w_2: gyroscope white noise covariance
imu_sigma_wb_2: gyroscope random walk covariance
imu_sigma_a_2: accelerometer white noise covariance
imu_sigma_ab_2: accelerometer random walk covariance
****_chi2_multiplier: what chi-squared multipler we should apply
****_sigma_px: noise sigma for our raw pixel measurements
****_sigma_px_sq: covariance for our raw pixel measurements
use_stereo: if feed_measurement_camera is called with more than one
image, this determines behavior. if true, they are treated as a stereo
pair, otherwise treated as binocular system
if you enable a camera with stereo in the name, this will be set to true
automatically
try_zupt: if we should try to use zero velocity update
zupt_max_velocity: max velocity we will consider to try to do a zupt
zupt_only_at_beginning: if we should only use the zupt at the very beginning
zupt_noise_multiplier: multiplier of our zupt measurement IMU noise matrix
zupt_max_disparity: max disparity we will consider to try to do a zupt
NOTE: set zupt_max_disparity to 0 for only imu based zupt, and
zupt_chi2_multipler to 0 for only display based zupt
num_pts: number of points we should extract and track in each image frame
fast_threshold: fast extraction threshold
grid_x: number of column-wise grids to do feature extraction in
grid_y: number of row-wise grids to do feature extraction in
min_px_dist: after doing KLT track will remove any features closer than this
knn_ratio: KNN ration between top two descriptor matchers for good match
downsample_cams: will half image resolution
use_nultithreading: if we should use multi-threading for stereo matching
use_mask: if we should load a mask and use it to reject invalid features
*/
{
"en_auto_reset": true,
"auto_reset_max_velocity": 20,
"auto_reset_max_v_cov_instant": 0.10000000149011612,
"auto_reset_max_v_cov": 0.10000000149011612,
"auto_reset_max_v_cov_timeout_s": 0.5,
"auto_reset_min_features": 1,
"auto_reset_min_feature_timeout_s": 3,
"auto_fallback_timeout_s": 3,
"auto_fallback_min_v": 0.600000023841858,
"en_cont_yaw_checks": false,
"fast_yaw_thresh": 5,
"fast_yaw_timeout_s": 1.75,
"do_fej": true,
"imu_avg": true,
"use_rk4_integration": true,
"cam_to_imu_refinement": true,
"cam_intrins_refinement": true,
"cam_imu_ts_refinement": true,
"max_clone_size": 8,
"max_slam_features": 35,
"max_slam_in_update": 10,
"max_msckf_in_update": 10,
"feat_rep_msckf": 4,
"feat_rep_slam": 4,
"cam_imu_time_offset": 0,
"slam_delay": 1,
"gravity_mag": 9.80665,
"init_window_time": 1,
"init_imu_thresh": 1,
"imu_sigma_w": 0.00013990944749616306,
"imu_sigma_wb": 4.1189724174615527e-07,
"imu_sigma_a": 0.0038947538150776763,
"imu_sigma_ab": 5.538346201712153e-05,
"msckf_chi2_multiplier": 1,
"slam_chi2_multiplier": 40,
"zupt_chi2_multiplier": 1,
"refine_features": true,
"pyr_levels": 6,
"grid_x": 5,
"grid_y": 5,
"msckf_sigma_px": 1,
"slam_sigma_px": 1.8,
"zupt_sigma_px": 1,
"try_zupt": true,
"zupt_max_velocity": 0.03,
"zupt_only_at_beginning": true,
"zupt_noise_multiplier": 1,
"zupt_max_disparity": 8,
"init_dyn_use": false,
"triangulate_1d": false,
"max_runs": 5,
"init_lamda": 0.001,
"max_lamda": 10000000000,
"min_dx": 1e-06,
"min_dcost": 1e-06,
"lam_mult": 10,
"min_dist": 0.1,
"max_dist": 60,
"max_baseline": 40,
"max_cond_number": 600000,
"use_mask": false,
"use_stereo": false,
"use_baro": false,
"num_opencv_threads": 4,
"fast_threshold": 15,
"histogram_method": 1,
"knn_ratio": 0.7,
"takeoff_accel_threshold": 0.5,
"takeoff_threshold": -0.1,
"use_stats": false,
"max_allowable_cep": 1,
"en_force_init": false,
"en_force_ned_2_flu": false,
"en_imu_frame_output": false,
"track_frequency": 15,
"publish_frequency": 5,
"en_vio_always_on": true,
"en_ext_feature_tracker": false,
"en_gpu_for_tracking": true,
"num_features_to_track": 20,
"raansac_gn": false,
"raansac_tri": true,
"en_thermal_enhance": false,
"en_overlay_landscape": false,
"thermal_brightness": 1,
"thermal_brightness_bos": 1
}
Hello. Checking in again if assistance can be provided and/or if more information is needed.
Hello. Just checking to see if there is any more data I can provide to help determine the issue. Is there some configuration that allows the drone to fly in the figure-8 without issue but not navigate within the map that has been generated?
@tom Thank you for the assistance on the previous topic. Is there a best way to diagnosis the navigation? The path appears fine, but the drone few straight upward into the ceiling before falling and breaking one of main battery clips next to the LED board.
Hello ModalAI Team,
I have a Starling 2 drone:
system-image: 1.8.02-M0054-14.1a-perf
kernel: #1 SMP PREEMPT Mon Mar 24 22:31:58 UTC 2025 4.19.125
hw platform: M0054
mach.var: 1.0.1
SKU: MRB-D0014-4-V1-C27-T8-M22-X0
voxl-suite: 1.4.5
Services:

When using the navigation of the Mapper, after plotting a location like this short route with no obstacles:

The drone flies up into the ceiling. The position mode works well though it can drift upwards some. The drone can run the figure 8 without any issue. So far, I am not sure what the issue with the navigation once the Mapper create the route. It am afraid the drone with break itself or something else in the room. I can attempt to send videos of the fly if they would be helpful.
@tom It was a PX 4 Dev Kit. But, thanks for the help. I was able to get the cameras calibrated. I will testing the manual and hold position fly-modes before trying any cv-based flight/navigation. I'll start a new thread for any future questions.
@tom Thanks. I ran the check calibration:
voxl-check-calibration
Calibration File Status:
Present /data/modalai/voxl-imu-server.cal
Missing /data/modalai/opencv_tracking_front_intrinsics.yml
Missing /data/modalai/opencv_tracking_down_intrinsics.yml
Missing /data/modalai/opencv_tracking_rear_intrinsics.yml
Present /data/px4/param/parameters_gyro.cal
Present /data/px4/param/parameters_acc.cal
Present /data/px4/param/parameters_level.cal
Present /data/px4/param/parameters_baro_tc.cal
Present /data/px4/param/parameters_mag.cal
I assume I should calibrate the tracking cameras still.
@tom Thanks for the help. I followed your instructions and rebooted. When I inspect the services, I get the output:
voxl2:~$ voxl-inspect-services
Scanning services...
Service Name | Enabled | Running | CPU Usage
docker-autorun | Disabled | Not Running |
modallink-relink | Disabled | Not Running |
voxl-camera-server | Enabled | Running | 66.7%
voxl-cpu-monitor | Enabled | Running | 0.0%
voxl-dfs-server | Disabled | Not Running |
voxl-elrs-startup | Disabled | Not Running |
voxl-feature-tracker | Disabled | Not Running |
voxl-flow-server | Disabled | Not Running |
voxl-imu-server | Enabled | Running | 3.5%
voxl-io-server | Disabled | Not Running |
voxl-lepton-server | Disabled | Not Running |
voxl-lepton-tracker | Disabled | Not Running |
voxl-logger | Disabled | Not Running |
voxl-mapper | Enabled | Running | 1.8%
voxl-mavcam-manager | Enabled | Running | 0.0%
voxl-mavlink-server | Enabled | Running | 3.5%
voxl-modem | Disabled | Not Running |
voxl-open-vins-server | Enabled | Not Running |
voxl-osd | Disabled | Not Running |
voxl-portal | Enabled | Running | 0.0%
voxl-px4-imu-server | Disabled | Not Running |
voxl-px4 | Enabled | Running | 24.6%
voxl-qvio-server | Disabled | Not Running |
voxl-rangefinder-server | Enabled | Not Running |
voxl-remote-id | Disabled | Not Running |
voxl-seek-server | Disabled | Not Running |
voxl-softap | Disabled | Not Running |
voxl-state-estimator | Disabled | Not Running |
voxl-static-ip | Disabled | Not Running |
voxl-streamer | Enabled | Running | 0.0%
voxl-tag-detector | Disabled | Not Running |
voxl-tflite-server | Disabled | Not Running |
voxl-time-sync | Disabled | Not Running |
voxl-uvc-server | Disabled | Not Running |
voxl-vision-hub | Enabled | Running | 3.5%
voxl-vrx | Disabled | Not Running |
voxl-vtx | Disabled | Not Running |
voxl-wait-for-fs | Enabled | Completed |
Is there anything else I should check/configure before attempting to fly and use the mapper service?
@tom The output is as follows:
**voxl2:~$ voxl-configure-cameras
Available camera config IDs are as follows:
01 - ov7251 tracking ov7251 stereo
02 - ov7251 tracking
03 - ov7251 tracking ov7251 stereo imx214 hires
04 - ov7251 tracking imx214 hires
05 - pmd-tof ov7251 tracking
06 - D0005 Starling pmd-tof imx214 hires ov7251 tracking
08 - imx214
09 - pmd-tof
10 - ov7251 stereo
11 - D0006 Sentinel
12 - ov9782 stereo
13 - ov9782 stereo imx214 hires
14 - ov9782 stereo pmd-tof ov7251 tracking (copy)
15 - D0008 dual 9782 tracking
16 - pmd-tof ov7251 dual tracking imx214 hires
17 - D0010 pmd-tof imx412 hires ov7251 tracking ov9782 stereo
18 - D0008 triple ov9782
19 - D0005 without tof imx214 hires ov7251 tracking
20 - D0011 imx412 hires ar0144 tracking
21 - old C6
23 - D0010 without stereo
24 - pmd-tof LIOW2 (new TOF)
25 - dual ar0144
31 - D0013 Prototype M0135 dual ar0144
32 - D0008 triple ov9782 rotated
C - use user-defined custom camera config in
(/data/modalai/custom_camera_config.txt)
q - Quit The Wizard**
I don't see the option that I saw when using the sku wizard:
Welcome to the voxl-configure-sku Wizard!
VOXL currently thinks it is in the following hardware:
family code: MRB-D0011 (px4-autonomy-dev-kit)
compute board: 4 (voxl2)
hw version: 1
cam config: 20
modem config: 0 (none)
tx config: 7 (elrs_beta_fpv)
extras config: 0 (none)
SKU: MRB-D0011-4-V1-C20-T7-M0-X0
If this is what you want, select 1 (accept and continue) to
leave it as-is. Otherwise, select the desired product family:
If you would like to select a special camera config that differs
from the default for your product family, please select an option.
Simply hit ENTER to use the default
01 - ov7251 tracking ov7251 stereo
02 - ov7251 tracking
03 - ov7251 tracking ov7251 stereo imx214 hires
04 - ov7251 tracking imx214 hires
05 - pmd-tof ov7251 tracking
06 - D0005 Starling pmd-tof imx214 hires ov7251 tracking
08 - imx214
09 - pmd-tof
10 - ov7251 stereo
11 - D0006 Sentinel
12 - ov9782 stereo
13 - ov9782 stereo imx214 hires
14 - ov9782 stereo pmd-tof ov7251 tracking (copy)
15 - D0008 dual 9782 tracking
16 - pmd-tof ov7251 dual tracking imx214 hires
17 - D0010 pmd-tof imx412 hires ov7251 tracking ov9782 stereo
18 - D0008 triple ov9782
19 - D0005 without tof imx214 hires ov7251 tracking
20 - D0011 imx412 hires ar0144 tracking
21 - old C6
23 - D0010 without stereo
24 - pmd-tof LIOW2 (new TOF)
25 - dual ar0144
31 - D0013 Prototype M0135 dual ar0144
32 - D0008 triple ov9782 rotated
C - use user-defined custom camera config in
(/data/modalai/custom_camera_config.txt)
q - Quit The Wizard
The default camera configs for Starling 2 are
26 (imx412 hires, dual ar0144 tracking)
27 (imx412 hires, triple ar0144 tracking)
Simply hit ENTER to use the default
For VOXL 2 and VOXL 2 Mini based drones, there are several transmitter options.
Please select the appropriate one.
Select a numeric option:
0) none
For Starling 2 and Starling 2 Max drones, there is an optional lepton sensor.
Is a lepton sensor installed on your drone? (-X8).
Select the modem hardware.
Simply hit ENTER if none
0 - none
1 - unknown
3 - Microhard v2, No Radio (M0048-3)
4 - LTE v2, 7610 NA (M0030)
5 - LTE v2, 7607 EMEA EOL (M0030)
6 - LTE v2, No Modem (M0030)
7 - VOXL 2 5G Quectel (M0067/M0090-3-01)
8 - LTE v2, 7611 NA (M0030)
9 - VOXL 2 5G Telit (M0090-1-03)
10 - Microhard v2, pMDDL2350 (M0048)
11 - Microhard v2, pMDDL2450(M0048)
12 - LTE v2, 7620 EMEA (M0030)
13 - M0078-2 w/ Alpha WiFi Dongle, AC600
14 - VOXL 5G Telit (M0090-1-03)
15 - VOXL 2 5G Quectel (M0090-3-01)
16 - M0078-2 w/ Alfa Networks WiFi Dongle, AC1200
17 - M0078-2 w/ Alfa Networks WiFi Dongle, AC600 (modified)
18 - Doodle RM-2450, 2.4GHz
19 - Doodle RM-2025, Hex Band
20 - M0130 RC7611 (Americas)
21 - M0130 RC7620 (EMEA)
22 - M0141 w/ Alfa Networks WiFi Dongle AWUS036EACS
23 - Doodle Mini-OEM, RM-1700-22M3 (915MHz, 2.4GHz)
24 - M0090-3-2 Sierra EM9291)
25 - VTX (M0176 + M0175)
26 - VTX (M0185)
27 - Microhard, pMDDL1621 (M0059-1)
28 - M0151 w/ Alfa Networks WiFi Dongle AWUS036EACS
29 - Microhard v2, pMDDL 1800 (M0048)
30 - VRX (M0206, Mini Pini)
31 - VRX (M0206, SparkLAN)
32 - WaveMux
2026 - M0130 RC7611 (Americas) + VTX (M0185)
2126 - M0130 RC7620 (EMEA) + VTX (M0185)
q - Quit The Wizard
Simply hit ENTER if none
Your answers would construct the following SKU:
family code: MRB-D0014 (starling-2)
compute board: 4 (voxl2)
hw version: 1
cam config: 27
modem config: 22 (M0141 w/ Alfa Networks WiFi Dongle AWUS036EACS)
tx config: 8 (elrs_m0184)
extras config: 0 (none)
SKU: MRB-D0014-4-V1-C27-T8-M22-X0
This sku will be saved to persistent memory so VOXL
will remember what it is installed in, even between
system image flashes.
Press enter to accept and continue.**
The SKU wizard did throw an error for configuration 27
available camera configurations are as follows:
01 - ov7251 tracking ov7251 stereo
02 - ov7251 tracking
03 - ov7251 tracking ov7251 stereo imx214 hires
04 - ov7251 tracking imx214 hires
05 - pmd-tof ov7251 tracking
06 - D0005 Starling pmd-tof imx214 hires ov7251 tracking
08 - imx214
09 - pmd-tof
10 - ov7251 stereo
11 - D0006 Sentinel
12 - ov9782 stereo
13 - ov9782 stereo imx214 hires
14 - ov9782 stereo pmd-tof ov7251 tracking (copy)
15 - D0008 dual 9782 tracking
16 - pmd-tof ov7251 dual tracking imx214 hires
17 - D0010 pmd-tof imx412 hires ov7251 tracking ov9782 stereo
18 - D0008 triple ov9782
19 - D0005 without tof imx214 hires ov7251 tracking
20 - D0011 imx412 hires ar0144 tracking
21 - old C6
23 - D0010 without stereo
24 - pmd-tof LIOW2 (new TOF)
25 - dual ar0144
31 - D0013 Prototype M0135 dual ar0144
32 - D0008 triple ov9782 rotated
FAILED TO EXECUTE: voxl-configure-cameras 27
The serial number is M23000003CZ.
The drone was originally a PX4 Dev Kit. But, it has been upgraded with the parts for a Starling 2 with 3 tracking sensors. Support helped provide the necessary parts and brackets. The main addition is the:
MDK-M0187-1-01 Dev Kit, VOXL 2 Lepton Plus TOF V2 Adapter Board & MCBL-00105-2
The Lepton adapter board isn't connect as there currently isn't a sensor attached. I have attached pictures of the drone fully assembled.


I don't really get any options when I try the configure camera command:
voxl2:~$ voxl-calibrate-camera tracking -f
Waiting for valid pipe...
It just says waiting for valid pipe.
I will double check the stickers and provide the serial number once I find it.
Hello,
I am trying to calibrate the tracking cameras on my Starling 2. After running voxl-configure-mpa it seems that the calibration files for the tracking cameras is missing.
Here is the current configuration:
system-image: 1.8.02-M0054-14.1a-perf
kernel: #1 SMP PREEMPT Mon Nov 11 22:08:01 UTC 2024 4.19.125
hw platform: M0054
mach.var: 1.0.0
SKU: MRB-D0014-4-V1-C27-T8-M22-X0
voxl-suite: 1.4.5
It has the three tracking cameras, hi-res camera, and ToF sensor.
I follow the configuration wizard (voxl-configure-sku --wizard) with these options:
camera configuration: 27
transmitter options: 8
lepton: 2 / no
modem hardware: 22
I then ran voxl-configure-mpa after the configuration. I got the following output:
FAILED TO EXECUTE the following steps:
voxl-configure-cameras 27
Encountered Problems Configuring MPA Services :-/
Some Services may not start up on next reboot
Calibration File Status:
Present /data/modalai/voxl-imu-server.cal
Missing /data/modalai/opencv_tracking_front_intrinsics.yml
Missing /data/modalai/opencv_tracking_down_intrinsics.yml
Missing /data/modalai/opencv_tracking_rear_intrinsics.yml
Present /data/px4/param/parameters_gyro.cal
Present /data/px4/param/parameters_acc.cal
Present /data/px4/param/parameters_level.cal
Present /data/px4/param/parameters_baro_tc.cal
Present /data/px4/param/parameters_mag.cal
Detected Missing Calibration Files
please run the required cals
https://docs.modalai.com/calibration/
PLEASE POWER CYCLE YOUR VOXL
Following the documentation on calibration, I tried to calibrate the cameras. I tried the following commands:
voxl-calibrate-camera "tracking front" -f
voxl-calibrate-camera tracking -f
voxl-calibrate-camera "tracking down" -f
I opened the VOXL portal and was not able to see the camera feed for the calibration. I included a screen shot of the camera_calibrator_overlay section of the VOXL portal.
