PROJECT: ROS2 Using Neato BotVac D5 Connected Robot & 8GB Raspberry Pi4

Neato01.jpg

Okay, after dabbling with the ROS2 (Robot OS version 2), I’ve decided to finally go all in with the ROS2. Although there are many benefits of using ROS, it is not a true Robot Operating System under the meaning of OS/Operating System. However, ROS now have a large and very active community behind it which is a big plus for the open source technology. Also, there are many reusable tools and libraries that are built on the ROS, which can significantly save time and especially if you or your engineering team lack the expertise in certain area. As for me, ROS (original ROS) helped me get started with some of my research projects by utilizing tools that were already developed and tested by the community without having me develop all the components and softwares myself. This allowed me to jump straight in to the area of my research without having to spend months building the robot and the base softwares.

As for the ROS2, it brings significant advantages such as how the modules (aka ROS nodes) communicate, support of Python3, and enhanced security. However, the difference between the ROS and ROS2 is significant enough where people who are proficient in the ROS or currently have an active ROS1 project was hesitant to change over. To me, this is somewhat like the time when the tipping finally happened with the Python3 and the remaining Python2 users had to bite the bullet. I see 2021 a year when the tipping is clear and majority of the ROS users will finally start making the move over especially with their new projects.

Neato02.jpg

Unless I am pursuing a project simply to play around and test the technology, I normally try to envision where I want to go with the project and set the short-term and longer-term goals. Unlike many of my other robotics projects where I start from bare metal, I plan to use my ROS2 project purposefully designed to be shared with the ROS community and utilize the components and modules that are widely available. Also, the type of robots I want to focus during the next few years using the ROS2 will be largely on the “Human and Robot interaction”. This means the robot will have to be 1) Mobile in and/or outside the house, 2) Must be safe for human, animal, and properties, and 3) Need variety of ways to communicate and interact with human, animal, and household goods.

Keeping with this vision, I’ve picked up a used “Neato BotVac D5 Connect”. The Neato BotVac has the dirt bin that can be used to house my Raspberry Pi4 and MCU (for the micro controller unit, I will be using a good old Arduino Mega, but I may eventually jump over to the Teensy 4.1 due to it’s small size and the built in logging capability). The RPi4 is the model with maximum 8GB memory as I am almost certain that it will be a struggle trying to run ROS2 for SLAM and various other applications. RPi4 is housed in the “Armor case with fan” (reference my research page Here). The customized dirt-bin cover (metallic silver colored) was given to me by a good friend and a mentor. I would have been stuck without a cover after removing the dirt-bin.

Neato03.jpg

Although the unit was in a very good shape, I did a through cleanup and removed all the vacuum parts that are not needed. As such, the space where the roller used to be is a nice empty space that is in the front and is open to the ground. It will be a great place to house various sensors and electronics.

Well.. a very good start as I have all the hardware for the ROS2 robot without having to build anything! Next step will be to install the 64-bit Linux Ubuntu + ROS2 on a SD card for the RPi4. I will also have to setup an old Dell laptop with a Linux + ROS2 to use as a controller system by SSH (remotely connect) into the robot’s Linux/ROS.


Planned Next Steps - Quickly get to a SLAM capable ROS2 Robot Platform

  1. Download & burn Raspberry Pi4 image to a SD card - 64-bit Linux Server 20.04 - Done

    • https://ubuntu.com/download/raspberry-pi

    • I used 32gb class 10 SD card - perhaps I may move to 64gb later, but I like 32 as I can make a quick copy of the card (usually under 30min & retrieval is under 15min)

  2. Configure Ubuntu 64-bit Linux Server - Done

  3. Install ROS2 on the Linux image & test - WIP

    • I followed the github repo here: https://github.com/cpeavy2/botvac_node

    • Ran into an issue while trying to install a required packages: ros-foxy-xacro

      • sudo apt install ros-foxy-xacro <— unable to locate package error

      • Googling did not provide and answer, so the next step is to brute-force by installing the package manually

      • As usual, nothing about computers are easy. I had to trace down and manually install a few additional packages.

        • first I needed ros-foxy-ament-index-python

        • which needed ros-foxy-ros-workspace

          • I used gdebi to install, ros-foxy-ros-workspace which satisfied the need for the ros-foxy-ament-index-python, which satisfied the need for the ros-foxy-xacro. You really don’t appreciate the automatic package install unless you have to manually do it yourself.

        • as I went down the manual installation route, I fell into the rabbit hole and started running into a bunch more package issues

          • we call this a Regression in the computer science when a previous state calls for another state and continues on - well, except in this case, it was the computer giving orders and I was the one who had to do the work

            • manually installed python3-colcon-package-selection, which was required by python3-colcon-parallel-executor, which was required by python3-colcon-powershell, which was required by python3-colcon-python-setup-py, which was required by python3-colcon-recursive-crawl, which was required by python3-catkin-pkg-modules……..

            • time to press the [Control] and [C] key and break out of this mess

            • while I was starting to get frustrated, a friend told me about the ROS GPG Key Expiration incident that happened about a week ago (see below).

      • ROS GPG Key Expiration Incident - ROS Discourse link HERE

        • to make the long story short, a mistake happened and it caused service outage on build.ros.org, build.ros2.org, ROS infrastructure, ROS buildfarm, ROS distro, packages.ros.org, and the Ubuntu key server.

        • Certainly I am impacted by this and to fix this issue, I need to update the public key used for ROS apt repositories using this command for ROS2

          • sudo curl -sSL https://raw.githubusercontent.com/ros/rosdistro/master/ros.key -o /usr/share/keyrings/ros-archive-keyring.gpg

    • As this simple exercise of getting the ROS2 installed on a Raspberry Pi, I am going to break this off into a separate posting. This way I can keep it updated and reference as I will surely fall back in the same trap in the future. Below is a few items for my own lessons learned

      • Nothing about computers are ever easy. Nothing about underpowered Raspberry Pi is easy. Needless to say, trying to put a 64bit Linux and a ROS2 (both rather new) on an underpowered RPi computer on a SD card is going to be troublesome.

      • Remember the Murphy’s Law! If it can go wrong, it will certainly go wrong ‘exponentially’. Bummer.

Previous
Previous

PROJECT: Biped Self Balancing Humanoid Robot - Bare metal robot using hobby servos

Next
Next

PROJECT: Remotely Control Arduino Robot Arm Using IMU Sensor over Bluetooth