The development of mobile robots is important in the field of search and rescue teams. The robots can be used for different purposes such as searching for survivors in areas that are harmful or deemed impossible for humans to reach. This project aims to create a well-rounded baseline of a mobile robot with remote vision and actuators (like motors/servos) controlled using the internet through Wi-Fi. One of the philosophies used in this project is to use a modular design to build the robot, enabling the use of other projects to add functionality or change the scope of the specifications that the robot might currently have. The challenges chosen for this robot reflect the competition guidelines of the Mercury Robotics Challenge 2014 which contain the following:
- It needs to be controlled remotely
- It should be capable of going through an obstacle course
- It should be able to perform maneuvers in the minimum amount of time
- It must be able to pick-up and drop-off a payload
This project shows how to build a mobile robot that is composed of a front-end and a back-end.
The front-end is the part that the end-user uses to interact with the robot, in this case a Windows or a Linux machine with GStreamer and connected to the same network as the robot. This front-end will receive commands from a video-game controller that is disguised as an HID keyboard with the use of a microcontroller. The front-end will send the commands to the back-end (the robot) through an SSH terminal. The commands will tell the robot to move; pan/tilt the camera, raise/lower the robotic arm, open/close the claw, and turn on/off the headlight(s). The front-end will receive live video feed from the robot through GStreamer and display it to the end-user.
The back-end of the project is the actual mobile robot. The robot is composed of 4 main modules:
The "BeagleBone Black", which is in charge of connecting to the network and receive commands through SSH from the front-end. It also fetches video feed from a USB camera and sends the video stream to the front-end through the network.
The "Signal Distribution Board" (SDB), which is in charge of receiving commands in form of data packages from the BeagleBone through UART. This module separates and normalizes the commands depending on who the recipient should be and forwards them to the correct module.
The "Motor Controller Boards", which are composed of one digital signals PCB and one analog signals PCB. The digital board is in charge of receiving speed and direction commands forwarded by the SDB through SPI communication. The digital board will then create the PWM and direction signals and forward them to the analog PCB. The analog signal PCB is in charge of sending power to the motors and receive quadrature signals from the motors, then forward these quadrature signals to the digital signal board for processing.
And the "Servo Controller Board", which is in charge of receiving commands from the SDB through UART. This module will generate the appropriate waveforms to control the servos.
Pre-requisites1) For the front-end, setup a BeagleBone Black by disabling the internal EMMC and the HDMI port. Then enable the UART4 port by applying the corresponding device tree overlay. Follow this link to use my other project to get this step done: Setup BeagleBone Black with Device tree overlays.
2) Enable the USB Wi-Fi Card on the list of material used, follow this link to use my other project to get this step done: 8821AU WIFI card and BBB
3) Also, GStreamer needs to be compiled from source code with uvch264 plug-in to be able to read the HD USB camera, C920. To do this, follow this link to use my other project to get this step done: Compilation of GStreamer to Stream H264 with Linux.
4) The last module needed for the front-end is the controller. This controller is connected to the host computer. The host computer will detect it as a normal keyboard. This controller will send sequences of characters very fast depending on the current state of the buttons. These "keystrokes" are sent through SSH. I have posted the instructions on how to build it here: HID Keyboard Device With Raspberry Pi Pico.
5) For the back-end, I used a module that distributes the signals to all the other modules, I call it the Signal distribution board. This board needs to be built and programmed. I have posted the steps here: Serial Port Expander - Extra SPI and UART Port with PIC MCU.
6) To control the motors, I designed a precision motor controller module. This module can control up to 4 motors, on this project I only used 2. I have posted the instructions here: Precision Motor Controller with LM629 and PIC MCU.
7) The last module needed for the back-end is the servo controller board. This board is in charge of controlling the servo motors in this robot. The servo motors are used for panning and tilting the camera, as well as controlling the robotic arm. I have posted this as a project here: Servo Controller Board with MSP430 & Timer Interrupts.
Getting Started- 3D print the parts needed: the chassis and the claw
- While 3D printing, gather the tools to drill additional holes and heat insert the knurled threads.
- Once the 3D printing of the chassis is done, drill additional holes and install the inserts as the pictures bellow.
- Install the DC motor mounting brackets under the robot, follow the pictures bellow
- The next step is to mount the motors, follow the pictures bellow
- The next step is to install the mounting hubs on the motors
- Now attach the wheels to the hubs, as shown bellow
- On the next step, mount the voltage regulators on the sides of the robot chassis as seen below:
- Now, install the M4 stand-offs and the ball-casters to continue working on the robot standing up:
- Now let's mount the externally powered USB hub on the back of the robot
- On the next step, let's mount the front headlight
- For the next step assemble the robotic claw and mount it on the pan-tilt bracket.
- Now attatch the whole arm to the robot:
- For the next part, solder wires to the small voltage regulator that will regulate to 6V for the Servo Motor Controller (the servo power supply). Then adjust the regulator with a multimeter to make sure that the output voltage is 6V. Then, connect the XT60 connectors to the wires, for the input we use male connectors and for the output we use female connectors. And finally we insulate the voltage regulator with shrinking tube.
- Now, setup one of the small voltage regulators to output 5V for the USB hub and BeagleBone Black. In the input, wires will need to be soldered with a XT30 male connector. On the output, solder 2 pairs of wires, one pair goes to a 2-pin-JST connector for the USB hub, and the other pair to a 2.1mm ID x 5.5mm OD barrel connector for the BeagleBone Black. To set the voltage, remove the solder joint next to the potentiometer. And on the back, bridge the 5V option. Verify that the output is a constant 5V on the output with a multimeter. Finally, insulate it with shrinking tube.
- In order to interconnect all the systems, several wire harnesses are needed. For the digital systems, all the harnesses will be using the XT30 connector and all the analog/power systems will be using the XT60 connector. Any connector that receives power from another system or voltage regulator will be a male connector, and any module or voltage regulator sending (sourcing) power will be a female connector. Two additional cable harnesses are needed to connect the UART ports.
- Now, start getting ready to install and interconnect all the modules. Start by screwing 4 plastic standoffs as seen below:
- Now, prepare each module by connecting their corresponding power harnesses and other cables.
- After pre-connecting the modules, start stacking up the PCBs and start interconnecting the components.
- In this step, setup the digital power supply module. To simulate the battery, I used a benchtop power supply. Now, continue by wiring the power modules and distributing the power to the digital boards. Place a main power switch for the digital side and connect it in series with the input of the main voltage regulator. Then, we adjust the voltage output for the main digital voltage regulator by turning a screw. Apply the max voltage that the battery can supply to the main power regulator module, which is 8.4V when fully charged (you can go higher just in case, but not necessary). The output voltage should be set to at least 7.5V, but 7.6V gives us a better margin without wasting too much power on the onboard linear voltage regulators. Then set the lab power supply to the lowest voltage the battery can give when discharged (6V, a little lower is better but not necessary). In both cases the digital power supply module should be very close to 7.6V.
- In this step, connect all the digital modules and the smaller digital voltage regulator to the main digital voltage regulator.
- In this step, connect and make sure that the main analog/power voltage regulator can supply 12V whether the battery is fully charge or mostly discharged. Use the same set up as in the previous regulator. First, connect a main power switch in series with the input of the main analog voltage regulator. Use a benchtop power supply to test the regulator at 6V and 8.4 volts, in both cases the output voltage should be close to 12V.
- Now, connect all the analog modules and small voltage regulator to the main analog/power voltage regulator.
- Now that all the major power connectors are in place, let's do some cable managing. The batteries also need to be installed, one goes connected to the analog system and the other one to the digital. For the digital systems use an adapter that was shown earlier to convert a XT60 male connector to an XT30 female connector.
- In the following step, attach the camera along with the pan-tilt mechanism on the lid of the robot. Also, make sure to have all the holes reinforced with knurled metal threads.
- Let's finish the building process by screwing the lid and connecting the Wi-Fi adapter.
Comments