Skip to content

General Questions

2.3k Topics 11.3k Posts

Not sure where your question goes? Ask here. ModalAI engineers and the community answer questions about any VOXL product.

  • Autonomus Indoor Quadcopter is need

    Unsolved
    5
    0 Votes
    5 Posts
    1k Views
    Z
    @Moderator Thanks for the information. Thats exaclty What I want. I need a developer platform. I am a student . I need to do three things on it. Autonomous Indoor Control at any given points to sent it to any location ( Can i do it with Python Custom Control) Video on PC or Laptop Access or Python to apply Image processing and Machine Leanring Algortihms on it? Can I able to fly 3 4 or more drones with Ad Hoc Nework support ? Does it support mutiple UAVs flying togehter? These things are main please help me
  • This topic is deleted!

    1
    0 Votes
    1 Posts
    4 Views
    No one has replied
  • IMX412 for SDK 1.1.1 Example Request

    Unsolved
    1
    0 Votes
    1 Posts
    548 Views
    No one has replied
  • Cannot connect to QGC

    Unsolved
    4
    2
    0 Votes
    4 Posts
    826 Views
    tomT
    @martongonczy Was it an RB5 or a voxl2?
  • VOXL2 Mini J10 UART

    Unsolved
    5
    0 Votes
    5 Posts
    1k Views
    Steve TurnerS
    @modaltb Thankyou so much for the quick eyes on this! We owe you some beers!
  • Inconsistent VIO Pose

    Unsolved
    4
    0 Votes
    4 Posts
    840 Views
    ModeratorM
    @SMRazaRizvi of course the VIO pose should be correct when you move the drone. can you screen capture the qvio overlay to demonstrate your issue?
  • Voxl2 crashed

    Unsolved
    11
    0 Votes
    11 Posts
    2k Views
    S
    @Moderator Thanks, I will try it. Although the temperature will reach 80°C, there has been no shutdown at this temperature. The temperature wasn't high when the problem occurred. So if the problem occurs and I want to view the system logs or use DBG_UART12 at J3 PIN-OUT of voxl2 to check. What can I do? Simon
  • Charger for the Starling V2

    Unsolved
    2
    0 Votes
    2 Posts
    671 Views
    ModeratorM
    @Erik-Priest Yes, an adapter should be all you need
  • 1 Votes
    2 Posts
    710 Views
    tomT
    @frafrat Try out voxl-configure-cameras 21 which is labeled "old C6" We screwed up the C6 config when moving from SDK 0.9.5 to SDK 1.0.0 21 should be equivalent to the old 6
  • Stereo tag detection: WARNING, apriltag roll/pitch out of bounds

    Unsolved
    14
    0 Votes
    14 Posts
    3k Views
    A
    I did a very quick and dummy workaround to fix the problem, most of the changes are in geometry.c in the following snippet of code: int geometry_calc_R_T_tag_in_local_frame(int64_t frame_timestamp_ns, rc_matrix_t R_tag_to_cam, rc_vector_t T_tag_wrt_cam, rc_matrix_t *R_tag_to_local, rc_vector_t *T_tag_wrt_local, char* input_pipe) { // these "correct" values are from the past aligning to the timestamp static rc_matrix_t correct_R_imu_to_vio = RC_MATRIX_INITIALIZER; static rc_vector_t correct_T_imu_wrt_vio = RC_VECTOR_INITIALIZER; int ret = rc_tf_ringbuf_get_tf_at_time(&vio_ringbuf, frame_timestamp_ns, &correct_R_imu_to_vio, &correct_T_imu_wrt_vio); // fail silently, on catastrophic failure the previous function would have // printed a message. If ret==-2 that's a soft failure meaning we just don't // have enough vio data yet, so also return silently. if (ret < 0) return -1; pthread_mutex_lock(&tf_mutex); // Read extrinsics parameters int n; vcc_extrinsic_t t[VCC_MAX_EXTRINSICS_IN_CONFIG]; vcc_extrinsic_t tmp; // now load in extrinsics if (vcc_read_extrinsic_conf_file(VCC_EXTRINSICS_PATH, t, &n, VCC_MAX_EXTRINSICS_IN_CONFIG)) { return -1; } // Initialize camera matrices rc_matrix_t R_cam_to_imu_tmp = RC_MATRIX_INITIALIZER; rc_matrix_t R_cam_to_body = RC_MATRIX_INITIALIZER; rc_vector_t T_cam_wrt_imu_tmp = RC_VECTOR_INITIALIZER; rc_vector_t T_cam_wrt_body = RC_VECTOR_INITIALIZER; rc_vector_zeros(&T_cam_wrt_body, 3); rc_vector_zeros(&T_cam_wrt_imu_tmp, 3); rc_matrix_identity(&R_cam_to_imu_tmp, 3); rc_matrix_identity(&R_cam_to_body, 3); printf("input_pipe: %s \n", input_pipe); if (strcmp(input_pipe, "stereo_front") == 0) { // Pick out IMU to Body. config.c already set this up for imu1 so just leave it as is if (vcc_find_extrinsic_in_array("body", "stereo_front_l", t, n, &tmp)) { fprintf(stderr, "ERROR: %s missing body to stereo_front_l, sticking with identity for now\n", VCC_EXTRINSICS_PATH); return -1; } rc_rotation_matrix_from_tait_bryan(tmp.RPY_parent_to_child[0] * DEG_TO_RAD, tmp.RPY_parent_to_child[1] * DEG_TO_RAD, tmp.RPY_parent_to_child[2] * DEG_TO_RAD, &R_cam_to_body); rc_vector_from_array(&T_cam_wrt_body, tmp.T_child_wrt_parent, 3); T_cam_wrt_imu_tmp.d[0] = T_cam_wrt_body.d[0] - T_imu_wrt_body.d[0]; T_cam_wrt_imu_tmp.d[1] = T_cam_wrt_body.d[1] - T_imu_wrt_body.d[1]; T_cam_wrt_imu_tmp.d[2] = T_cam_wrt_body.d[2] - T_imu_wrt_body.d[2]; rc_matrix_multiply(R_body_to_imu, R_cam_to_body, &R_cam_to_imu_tmp); printf("RPY: \n%5.2f %5.2f %5.2f\n\n", tmp.RPY_parent_to_child[0], tmp.RPY_parent_to_child[1],tmp.RPY_parent_to_child[2]); printf("R_cam_to_imu_tmp: \n%5.2f %5.2f %5.2f\n %5.2f %5.2f %5.2f\n %5.2f %5.2f %5.2f\n\n", R_cam_to_imu_tmp.d[0][0], R_cam_to_imu_tmp.d[0][1], R_cam_to_imu_tmp.d[0][2], R_cam_to_imu_tmp.d[1][0], R_cam_to_imu_tmp.d[1][1], R_cam_to_imu_tmp.d[1][2], R_cam_to_imu_tmp.d[2][0], R_cam_to_imu_tmp.d[2][1], R_cam_to_imu_tmp.d[2][2]); // calculate position of tag wrt local rc_matrix_times_col_vec(R_cam_to_imu_tmp, T_tag_wrt_cam, T_tag_wrt_local); rc_vector_sum_inplace(T_tag_wrt_local, T_cam_wrt_imu_tmp); rc_matrix_times_col_vec_inplace(correct_R_imu_to_vio, T_tag_wrt_local); rc_vector_sum_inplace(T_tag_wrt_local, correct_T_imu_wrt_vio); rc_matrix_times_col_vec_inplace(R_vio_to_local, T_tag_wrt_local); rc_vector_sum_inplace(T_tag_wrt_local, T_vio_ga_wrt_local); // calculate rotation tag to local rc_matrix_multiply(R_cam_to_imu_tmp, R_tag_to_cam, R_tag_to_local); rc_matrix_left_multiply_inplace(correct_R_imu_to_vio, R_tag_to_local); rc_matrix_left_multiply_inplace(R_vio_to_local, R_tag_to_local); } else if (strcmp(input_pipe, "stereo_rear") == 0) { // Pick out IMU to Body. config.c already set this up for imu1 so just leave it as is if (vcc_find_extrinsic_in_array("body", "stereo_rear_l", t, n, &tmp)) { fprintf(stderr, "ERROR: %s missing body to stereo_rear_l, sticking with identity for now\n", VCC_EXTRINSICS_PATH); return -1; } rc_rotation_matrix_from_tait_bryan(tmp.RPY_parent_to_child[0] * DEG_TO_RAD, tmp.RPY_parent_to_child[1] * DEG_TO_RAD, tmp.RPY_parent_to_child[2] * DEG_TO_RAD, &R_cam_to_body); rc_vector_from_array(&T_cam_wrt_body, tmp.T_child_wrt_parent, 3); T_cam_wrt_imu_tmp.d[0] = T_cam_wrt_body.d[0] - T_imu_wrt_body.d[0]; T_cam_wrt_imu_tmp.d[1] = T_cam_wrt_body.d[1] - T_imu_wrt_body.d[1]; T_cam_wrt_imu_tmp.d[2] = T_cam_wrt_body.d[2] - T_imu_wrt_body.d[2]; rc_matrix_multiply(R_body_to_imu, R_cam_to_body, &R_cam_to_imu_tmp); printf("R_cam_to_imu_tmp: \n%5.2f %5.2f %5.2f\n %5.2f %5.2f %5.2f\n %5.2f %5.2f %5.2f\n\n", R_cam_to_imu_tmp.d[0][0], R_cam_to_imu_tmp.d[0][1], R_cam_to_imu_tmp.d[0][2], R_cam_to_imu_tmp.d[1][0], R_cam_to_imu_tmp.d[1][1], R_cam_to_imu_tmp.d[1][2], R_cam_to_imu_tmp.d[2][0], R_cam_to_imu_tmp.d[2][1], R_cam_to_imu_tmp.d[2][2]); // calculate position of tag wrt local rc_matrix_times_col_vec(R_cam_to_imu_tmp, T_tag_wrt_cam, T_tag_wrt_local); rc_vector_sum_inplace(T_tag_wrt_local, T_cam_wrt_imu_tmp); rc_matrix_times_col_vec_inplace(correct_R_imu_to_vio, T_tag_wrt_local); rc_vector_sum_inplace(T_tag_wrt_local, correct_T_imu_wrt_vio); rc_matrix_times_col_vec_inplace(R_vio_to_local, T_tag_wrt_local); rc_vector_sum_inplace(T_tag_wrt_local, T_vio_ga_wrt_local); // calculate rotation tag to local rc_matrix_multiply(R_cam_to_imu_tmp, R_tag_to_cam, R_tag_to_local); rc_matrix_left_multiply_inplace(correct_R_imu_to_vio, R_tag_to_local); rc_matrix_left_multiply_inplace(R_vio_to_local, R_tag_to_local); } else if (strcmp(input_pipe, "tracking") == 0) { printf("R_cam_to_imu: \n%5.2f %5.2f %5.2f\n %5.2f %5.2f %5.2f\n %5.2f %5.2f %5.2f\n\n", R_cam_to_imu.d[0][0], R_cam_to_imu.d[0][1], R_cam_to_imu.d[0][2], R_cam_to_imu.d[1][0], R_cam_to_imu.d[1][1], R_cam_to_imu.d[1][2], R_cam_to_imu.d[2][0], R_cam_to_imu.d[2][1], R_cam_to_imu.d[2][2]); // calculate position of tag wrt local rc_matrix_times_col_vec(R_cam_to_imu, T_tag_wrt_cam, T_tag_wrt_local); rc_vector_sum_inplace(T_tag_wrt_local, T_cam_wrt_imu); rc_matrix_times_col_vec_inplace(correct_R_imu_to_vio, T_tag_wrt_local); rc_vector_sum_inplace(T_tag_wrt_local, correct_T_imu_wrt_vio); rc_matrix_times_col_vec_inplace(R_vio_to_local, T_tag_wrt_local); rc_vector_sum_inplace(T_tag_wrt_local, T_vio_ga_wrt_local); // calculate rotation tag to local rc_matrix_multiply(R_cam_to_imu, R_tag_to_cam, R_tag_to_local); rc_matrix_left_multiply_inplace(correct_R_imu_to_vio, R_tag_to_local); rc_matrix_left_multiply_inplace(R_vio_to_local, R_tag_to_local); } printf("\n__________________________________________________________________________\n"); pthread_mutex_unlock(&tf_mutex); return 0; }
  • No Odometry in QGC through MAVLink

    Unsolved
    7
    1
    0 Votes
    7 Posts
    2k Views
    Jetson NanoJ
    @SMRazaRizvi You have to setup GPS and make EKF Aid mask use GPS, and I don't think using GPS will give you odometry data, you might get some sort of global position which helps you hold position and navigate
  • VOXL2 Mini Power Requirements

    Unsolved
    10
    0 Votes
    10 Posts
    2k Views
    B
    @Vinny Thanks for this info this is super helpful. I 100% agree about the last thing you said and if I can use the ModalAI power adapter then I definitely will. I got the 7.4V spec by assuming nominal 2S battery voltage to nominal 6S, which was probably a bad assumption. Even so, a 2S battery from dead to full charge is typically 6.4V to 8.4V so I figured 5V input was probably not sufficient for the power module as it was not in the range of 2S to 6S. Seems like this may not be the case though which is excellent
  • VOXL2(mini) Serial Number

    Unsolved
    2
    0 Votes
    2 Posts
    942 Views
    tomT
    @Steve-Turner cat /sys/bus/soc/devices/soc0/serial_number is unique and will be unchanged after a factory flash. That is what we use internally in our prod line as a board UID
  • Ceres c++ error when used in voxl2 project

    Unsolved
    9
    1
    0 Votes
    9 Posts
    992 Views
    Alex KushleyevA
    @lfierz , excellent! I am glad that it worked
  • Unable to retrieve camera information

    Unsolved
    3
    0 Votes
    3 Posts
    778 Views
    Riccardo FranceschiniR
    Hi @Kashish-Garg unfortunately no update on this side
  • Seeker offboard failsafe unexpected behavior and firmware update parameter issues.

    Unsolved
    3
    0 Votes
    3 Posts
    725 Views
    tomT
    @Karrthik-Gk SDK 1.1.1 for voxl 1 includes PX4 v1.14 for flight core. I would recommend starting there
  • Flightcore v2

    Unsolved
    2
    0 Votes
    2 Posts
    493 Views
    ModeratorM
    @Jw0719 hi, we're not familiar with that specific capability. Flight Core v2 is fairly stock PX4 though, so if PX4 supports it Flight Core should support it
  • VOXL MPA to ROS Seeker

    Unsolved
    1
    0 Votes
    1 Posts
    1k Views
    No one has replied
  • Seeker SLAM Setup Help

    Unsolved
    9
    0 Votes
    9 Posts
    3k Views
    U
    @tom Installing the VOXL1 SDK now... Thanks!
  • Voxl 2 Mini Mounting

    Unsolved
    1
    0 Votes
    1 Posts
    459 Views
    No one has replied