Arduino Uno Q Rover with Obstacle Avoidance

Been working on a new project using the Arduino Uno Q. Decided to use the Q as a controller and a obstacle avoidance rover using a BNO055, a VL53L5CX TOF 8x8 distance sensor and a Adafruit Motor Controller attached to the MCU sending data to the MPU that analyzes the obstacle distances which then sends back to the MCU to control the motors.

Will add more when I develop the readme

Here are some pictures - note the camera - its a OpenMV N6 stand alone camera


Cheers

Looks great!

(post deleted by author)

Darn, I don't hve any OpenMV cameras to try with it....

Although Maybe? I do have a Nicla vision:
Arduino Nicla Vision – OpenMV

Currently setup on Zephyr, but...

I know when I had it openmv setup on the giga it worked really well. Also opens up alot of possibilities. :)

Wow, this is great! :ok_hand:
I tried using IR and then remembered that it wouldn't give me right values later.

Ok added a bunch of readmes (very rough), docs directories with more readmes and other docs - also added a rough function to stop the rover if it gets stuck on something (still a work in progress). If interested in how thing work:

Ok been hacking away again and this time added the XV-`11 Lidar on the Rover which I talked about before. And decided to try out BreezySlam to show room mapping in automatic mode. One of the test runs is posted on YouTube:

I also switched to using the Arduino Motor Shield because of conflicts with using Wire2 with Serial3 which I where the Lidar is attached. Data is sent over a radio to the PC where BreezySlam is running but my guess is that breezySLAM is small enough to run on another Q4 in sbc mode. Not sure I have the energy for that.

Biggest issue I have is that I can seem to get the walls to persist - cant seem to figure that issue out.

Will post an updated readme etc soon - but need a break.

Looks like you have been busy!

Some disrupter field? Or Invisibility cloak? :wink: :laughing:

Well been working on getting BreezySLAM working.

A couple of issues I found after reading up on BreezySLAM is that it works by stitching the LIDAR frames together as the robot moves so

  1. You need reliable LIDAR data
  2. Robot has to move relatively slowly
    a. Travel less than 5-10% of the distance to nearby walls per scan
    b. 10-30 mm per SLAM update

After updating my LIDAR thread to use double buffering (thanks AI) and slowing up the rover things did improve

Case 1. No motion just lidar stitching after driving around

Case 2. On start up for adding motion (odometry)

Notice walls and scan looks good.

Case 3. With odometry and after driving around

Better than before but unless everything works perfectly you do get gaps.

Nice experience and slam does work. Now to try and see if I can do something else like Hector slam. Wasnt going to spend this much time on this but too stubborn not to get it working.

Ok between tweaking settings and slowing rover up finally got a semi descent map

Still working on it. But think done for the day

Ok all since I was able to fix a bunch of bugs and learning slam I finally put it all together and posted the Rover App on a github repo

The final test run before posting

The axes a still off in roboviz but good run.