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.

  • VOXL 2 IO with external 4in1 ESC

    Unsolved
    6
    3
    0 Votes
    6 Posts
    936 Views
    J
    @Alex-Kushleyev I never uploaded any parameters, just used both escs out of the box. maybe that caused the issue?
  • Add-On Ethernet Hat ETH0 (RJ45) port not creating a network connection.

    Unsolved
    3
    0 Votes
    3 Posts
    622 Views
    VinnyV
    Hi @Jeremy-Frederick Can you please provide some pictures? It almost sounds as if you have a faulty RJ45 jack, but these are tested in factory before shipping. If you can get some close ups of the non-working RJ45 and the LAN7500 chip, that may help. And, can you clarify that you have Qty-2 M0062's and one works, yet one doesn't? Did the faulty one ever work for you? Was the faulty one in any type of handling mishap (like an accidental drop/fall)? The RJ45 has integrated magnetics to save space (which is why it is so tall), but that makes them more vulnerable to shock failure than typical RJ45's. One thing I do know that may also occur is the jack can be installed slightly tilted, making it hard to seat the RJ45 cable in firmly. There is an odd feature on the connector that sometimes allows it to seat at an off-angle, slightly pointing down making the cable slightly interfere with the PCB (but still ok to insert, since as I mentioned, we tested at the factory). Also, the metal along the sides of the RJ5 may also be stiff, preventing a smooth insertion, so sometimes just inserting the RJ45 cable a few times making sure you get that nice tactile "click" may be what is needed to ensure the contacts are engaged and kinda "breaking in" the stiff connector.
  • SBus on Starling 2 Max

    Unsolved
    2
    0 Votes
    2 Posts
    511 Views
    Alex KushleyevA
    @wetherbeej , VOXL2 does not have ability to un-invert the SBUS signal, so you cannot plug in a standard SBUS receiver directly into VOXL2. However, we offer VOXL2_IO board, which supports standard SBUS input and will send the SBUS data to PX4 using standard UART. https://docs.modalai.com/voxl2-io-user-guide/ If you don't want to add another board and if you find a receiver that is capable of outputting "inverted SBUS", which is actually using standard UART levels, you may be able to use the PX4 standard sbus driver. However the PX4 sbus driver is not currently built for VOXL2 because it is requires some support of UART port, which VOXL2 does not support (specifically inverted signal level and maybe some other options). Long story short, if you want a solution that will just work, it is better to use our VOXL2 IO board, but if you absolutely do not want to add another board to the drone, then you will need a rx with inverted SBUS + modify PX4 sbus rc driver to work on VOXL2. Alex
  • VOXL ESC bootup tone

    Unsolved
    2
    0 Votes
    2 Posts
    404 Views
    tomT
    @jonathankampia Yes, it would require modifying the "tones" in whichever esc param file you're using. For example for starling 2 it is defined here: https://gitlab.com/voxl-public/voxl-sdk/utilities/voxl-esc/-/blob/master/voxl-esc-params/D0014_starling_1504_3000kv_ms_props/D0014_starling_1504_3000kv_ms_props.xml?ref_type=heads#L90
  • ROS2 ToF topic not showing proper data

    Unsolved
    2
    1
    0 Votes
    2 Posts
    587 Views
    B
    Please verify the PC data in rviz2. What you see in rviz2 should look exactly alike to what is shown in voxal portal for tof_pc. Note that the point step size is 12. See this guide for more info on pointcloud data message data Point cloud data will look very different from image data, since the data field is constructed very different from BGR image formats. I have replicated these results in a starling2 as well, with voxl-mpa-to-ros2 dev branch:[image: 1727726700892-rospc_.png] Note that you may need to spin up a static transform to see the pointcloud data in ROS: ros2 run tf2_ros static_transform_publisher 0 0 0 0 0 0 map world
  • docker pull returns 410 Gone

    Unsolved
    3
    0 Votes
    3 Posts
    2k Views
    Zachary Lowell 0Z
    Hi @wouter the reason this is happening is recently docker depricated their api v1 version and are only using v2 api calls now. Meaning the original voxl is not able to pull down pre made docker images. The solution around this is to build the docker image on a parent computer, tar it up via docker save, then push that to the voxl and run a docker load -i on the tar file. You can follow similar to what we do in voxl-docker-mavsdk: https://gitlab.com/voxl-public/voxl-docker-images/voxl-docker-mavsdk/-/blob/main/Dockerfile?ref_type=heads
  • Failsafe activated, triggering disarm ESC failure

    Unsolved
    1
    3
    0 Votes
    1 Posts
    6k Views
    No one has replied
  • gps_dump not recorded in .ulg, even when GPS_DUMP_COMM set

    Unsolved
    8
    0 Votes
    8 Posts
    1k Views
    Eric KatzfeyE
    @groupo Yes, we have used px4-listener <topic name> for external monitoring of PX4 topic data in other applications.
  • GPS never published

    Unsolved
    5
    0 Votes
    5 Posts
    951 Views
    groupoG
    Thank you @ben-grocholsky! I should be more clear, when I ran px4-listener sensor_gps I received something along the lines of "GPS never published". I just went to go get the verbatim output but everything seems to be working. I do indeed see the uorb now. Puzzling
  • LTE or 5G carrier USB Mode

    Unsolved
    4
    0 Votes
    4 Posts
    877 Views
    VinnyV
    Hi @Matthew-Wellner Yes, we sell some modem products as "stand-alone" which can be connected to any USB host. We have not offered our popular M0090 5G modem in that mode, but we have offered it for the older Microhard and Sierra 4G modules, but right now we only offer it on Microhard: https://www.modalai.com/collections/modems/products/mdk-m0048-2
  • VOXL2 stream video through /dev/video0

    Unsolved
    6
    0 Votes
    6 Posts
    1k Views
    Eric KatzfeyE
    @jcai It should then be rtsp://192.168.1.222:9976/live. Ah, but you don't want that live part on the end?
  • GPS streaming

    Unsolved
    8
    0 Votes
    8 Posts
    1k Views
    Eric KatzfeyE
    @groupo I responded to your new post.
  • Voxl2 Immediately loses RC

    Unsolved
    2
    1 Votes
    2 Posts
    634 Views
    rdjarvisR
    We removed the RC and are able to fly with a wired gamepad. Could the control loss be due to a voltage drop on the J19 12-PIN JST to the Rx? I will check later today.
  • ToF Flex PCB

    Unsolved
    1
    0 Votes
    1 Posts
    461 Views
    No one has replied
  • tflite-server with custom model?

    Unsolved
    3
    0 Votes
    3 Posts
    999 Views
    D
    Hello all, I was able to successfully train a MobileNet v2 (object detection mode), quantize it, and convert it into .tflite format. Basically, my custom model had to meet 3 criteria: The model is not too large (models should probably be below 17 KB) The model's input shape is [1 300 300 3] and the input data type is uint8 or numpy.uint8 The model's has four outputs in THIS ORDER: output one shape: [1 10 4] output two shape: [1 10] output three shape: [1 10] output four shape: [1] all of these outputs in float32 or numpy.float32 format From what I can best understand, the model architecture doesn't have to be an exact match, so long as the inputs and outputs are compatible. Here is my code: import tensorflow as tf from tensorflow.keras import layers, models Load the MobileNetV2 feature vector model directly from TensorFlow base_model = tf.keras.applications.MobileNetV2( input_shape=(300, 300, 3), # Use 300x300 input shape as required include_top=False, weights='imagenet') Freezing the base model base_model.trainable = False Adjust input shape to 300x300x3 and use uint8 data type inputs = tf.keras.Input(shape=(300, 300, 3), dtype='uint8') Use Lambda layer to cast inputs to float32 x = layers.Lambda(lambda image: tf.cast(image, tf.float32))(inputs) Pass the cast inputs through the base model x = base_model(x) x = layers.GlobalAveragePooling2D()(x) x = layers.Dense(1280, activation='relu')(x) Bounding box output (10 detections, 4 coordinates each) bbox_outputs = layers.Dense(40, activation='sigmoid')(x) bbox_outputs = layers.Lambda(lambda t: tf.reshape(t, [1, 10, 4]), name="bbox_outputs")(bbox_outputs) Class ID output (10 detections) class_outputs = layers.Dense(10, activation='softmax')(x) class_outputs = layers.Lambda(lambda t: tf.reshape(t, [1, 10]), name="class_outputs")(class_outputs) Confidence score output (10 detections) confidence_outputs = layers.Dense(10, activation='sigmoid')(x) confidence_outputs = layers.Lambda(lambda t: tf.reshape(t, [1, 10]), name="confidence_outputs")(confidence_outputs) Number of detections (single value) num_detections = layers.Lambda(lambda t: tf.constant([10], dtype=tf.float32))(x) num_detections = layers.Lambda(lambda t: tf.reshape(t, [1]), name="num_detections")(num_detections) Define the outputs explicitly in the order you want: 1. Bounding boxes 2. Class IDs 3. Confidence scores 4. Number of detections model = tf.keras.Model(inputs, [bbox_outputs, class_outputs, confidence_outputs, num_detections]) Compile the model model.compile(optimizer='adam', loss='mean_squared_error') Define a ConcreteFunction for the model with explicit output signatures @tf.function(input_signature=[tf.TensorSpec([1, 300, 300, 3], tf.uint8)]) def model_signature(input_tensor): outputs = model(input_tensor) return { 'bbox_outputs': outputs[0], 'class_outputs': outputs[1], 'confidence_outputs': outputs[2], 'num_detections': outputs[3] } Convert the model to TensorFlow Lite using signatures converter = tf.lite.TFLiteConverter.from_concrete_functions([model_signature.get_concrete_function()]) Apply float16 quantization converter.optimizations = [tf.lite.Optimize.DEFAULT] converter.target_spec.supported_types = [tf.float16] # Use float16 quantization Convert the model tflite_model = converter.convert() Save the TensorFlow Lite model with open('/content/mobilenet_v2_custom_quantized.tflite', 'wb') as f: f.write(tflite_model) Load the TFLite model and check the input/output details to confirm correct mapping interpreter = tf.lite.Interpreter(model_content=tflite_model) interpreter.allocate_tensors() Get the input and output details to verify correct input/output structure input_details = interpreter.get_input_details() output_details = interpreter.get_output_details() print("Input Details:", input_details) print("Output Details:", output_details)
  • Replace the voxl-tflite-server Yolov5 model

    Unsolved
    1
    0 Votes
    1 Posts
    256 Views
    No one has replied
  • Core Metrics

    Unsolved
    2
    0 Votes
    2 Posts
    445 Views
    ModeratorM
    @Ezekiel-Kaplan have you looked here: https://docs.modalai.com/voxl-inspect-cpu/ ?
  • VOXL camera server hires large & small frames in HAL3 PerCameraMgr

    Unsolved
    2
    0 Votes
    2 Posts
    523 Views
    ModeratorM
    All output pipes that begin with "hires" should have the same timestamp for each frame as they all come from the same image frame. the small and large pipes are simply different resolutions being encoded for different use cases from the same source camera frame
  • Low number of GPS satellites

    Unsolved
    8
    0 Votes
    8 Posts
    1k Views
    groupoG
    @Vinny I had to QDL the drone again. I am not sure why this is happening. The first time was extremely obvious but these last two I am not sure what has went wrong. I will be extremely explicit about 'poweroff -f' going forward. Anyway I wiped and flashed it again. I am getting 13 satellites on one now and 20 on the other. This is obviously an improvement. A theory I had is maybe they are looking at different constellations? that would not make sense as I just wiped the 'bad' drone and do not recall ever seeing an option to change the constellation, let alone changing it. I asked earlier.... if I cannot resolve this can we either order a new antenna or send the drone back to have the antenna swapped? I am worried our pilots will not fly if the GPS is sub-optimal
  • Learning how to lock a thread to a CPU core

    cpu resource-aware threads
    1
    0 Votes
    1 Posts
    1k Views
    No one has replied