New prototype: Obstacle avoidance/SLAM deck

At any given time we have a bunch of deck ideas floating around. Some of them might not be doable (or very hard), but still fun to discuss. Other we just never get around to since we’re always pressed for time. The “obstacle avoidance” deck is one of the latter ones.

The idea with the “obstacle avoidance” deck (current working name in lack of imagination) is to mount one of the VL53L0x ToF distance sensors, the same we have on the Z-ranger and the Flow deck, in each direction. This would allow you to keep a distance to the ground, avoid the walls (or any other obstacles you might fly into) and also keep away from the ceiling. Basically you could do a “turtle bot” that just flies around randomly without crashing. Another fun idea we’ve been discussing is being able to SLAM the room you’re flying in. If you can keep track of how you are moving around (with the Flow deck, Loco positioning system or any other means) while you’re measuring the distance on all sides you could make a map of the room.

After discussing this on and off for a some time, mainly focusing on mechanical and production issues of the design, we decided to just try out the concept with a simple prototype. The prototype, named “OA”, has daughter boards with VL53L0x sensors mounted front/back, left/right as well as one sensor facing up. It’s designed to be mounted on the top of the Crazyflie 2.0 and combined with the Flow deck which will give relative movement and also the sixth direction, distance to the floor. One of the issues with the design is that all the VL53L0x sensors are on the same I2C bus with the same address. To work around this the sensor has a nifty feature where you can re-program the I2C address. For this to work you need to release the reset of the sensors one by one: release the first reset, reprogram the address and then release the reset of the next sensor. The reset for the VL53L0x is not cabled on the Flow deck, so this is the first to be re-programmed. Then the reset will be released one-by-one for the sensors on the OA deck. In order to control the reset pins on the deck there’s a 8bit I2C GPIO expander. The reason for the GPIO expander is to use as few GPIOs on the deck connector as possible to keep the compatibility with other decks high. For instance the deck will work fine with the Loco positioning deck.

 

The goal with the prototype is to try out the concept of the deck and to see if it’s feasible. A few of the things we need to sort out is:

  • Mechanical solution for side senors (front, back, left and right)
  • Interference between sensors
  • Update rate when we have 6 sensors on the same bus which we might have to run one-by-one to avoid interference

The current status is that we’ve verified the electronics and written the I2C GPIO expander drivers to test all the sensors. The next step is to work on a new VL53L0x driver to allow multiple sensors running at the same time, which will force some refactoring of the firmware.  Once we’ve made some more progress we’ll do another post and report the results. If you have any feedback on the design/concept or have any ideas of what the deck could be useful for, don’t hesitate to drop a comment below.

5 comments on “New prototype: Obstacle avoidance/SLAM deck

  • I would like to make obstacle avoidance with my mini drone. If this deck come out I might use crazyflies instead.

  • Hi,

    Thanks very much for keeping developing amazing ideas about crazyflie. I have some questions regarding this new deck and collision avoidance.
    1. Do you have an estimation about when this deck will be released to the market?
    2. Can this deck detect possible collisions among others crazyflies ?, or Is it difficult because of the area coverage of a crazyflie compare to a wall ?
    3. Let’s suppose that a CF is going to move in a path in which it would be on the top of other CF, because of the generated wind, the CF below would not fly correctly, so, Have you think about a way to detect this case ? maybe an special configuration of collision sensors ? or any other solution ?

    Thanks again for sharing your work :).

    • Thanks for your kind words Pedro!
      I’ll do my best to answer your questions:
      1. Not really but it is a prioritized deck. Beginning of next year is a guess. If you would like one sooner you could always build one on your own ๐Ÿ™‚
      2. Hard to tell and something that needs to be investigated. Gut feeling says it will be difficult but not impossible.
      3. No we have not thought about these situations yet. I think it is a highly interesting research subject. Imagine releasing a swarm of these into a building to map things, find people, gass leek etc ๐Ÿ™‚

  • Hey, sweet deck!

    Iโ€™m a bachelor student and I came across these VL53L0X sensors and would like to incorporate it on the Crazyflies.

    1) Which 8bit I2C GPIO expander do you guys use on this deck?
    2) Are both the XSHUT and GPIO soldered to the same node on the GPIO expander?
    3) As this is an urgent project and the boards will only be released next year, are you able to share the board designs?

    Look forward for your replies

    Thanks!
    P.S this is an extension of the project done at ETH Zurich.

    • Hi Jeremy,

      Glad you like the deck! See the answers below, keep in mind it’s still a prototype and that the final design isn’t fixed yet.

      1) We use the PCA9534
      2) The XSHUT is connected to the GPIO expander but not the GPIO. It would be interesting to hear if you have a good use-case for connecting the GPIO, then we could see if it’s possible.
      3) We’re actually finalizing the next prototype this week so maybe it would be possible to build a few extra if you need. Drop us an email at contact@bitcraze.io and we can discuss it.

      FYI the code for reading out the distances from all the sensors is already in the firmware repo. Have a look at these:
      https://github.com/bitcraze/crazyflie-firmware/issues/253
      https://github.com/bitcraze/crazyflie-firmware/issues/254

      /Marcus

Leave a Reply

Your email address will not be published. Required fields are marked *