Jason Taylor

Autonomous Construction Vehicle (ACV)

EEL 5666 – IMDL Spring 2007

Drs. Arroyo & Schwartz

TAs: Adam Barnett & Julio Suarez

Table of Contents

Page 1 / Cover Page
Page 2 / Table of Contents
Page 3 / Abstract
Page 4 / Executive Summary
Page 5 / Introduction / Integrated System
Page 6 / Integrated System
Page 7 / CPLD Diagrams
Page 8 / Power Distribution Diagram
Page 9 / Integrated System Diagram
Page 10 / Mobile Platform
Page 11 / Actuation
Page 12 / Actuation
Page 13 / Sensors
Page 14 / Sensor Outputs
Page 15 / Behaviors / Conclusion
Page 16 / Appendices – VHDL Code
Page 17 / VHDL Code
Page 18 + / C Code

Abstract

The Autonomous Construction Vehicle (ACV) is a robot designed to build structures out of .15 scale cinder blocks. The user will select a structure layout and location for the ACV to build. The ACV will then be loaded with 2 to 3 pallets of block and continue to the construction site. Once the ACV has reached the pre-cleared construction site it will begin building the selected structure. The ACV has a crane which grabs blocks and places them. Each pallet contains 9 blocks. When a pallet is empty, it is pushed into a container and stored for later. When all pallets on the ACV are empty, the ACV proceeds to a garbage area where it dumps the empty pallets. After dumping the pallets, the ACV returns to the materials location to get more pallets. Once more pallets are loaded, the ACV will return to the construction site and continue to build. The ACV is also equipped with a human sensor. This sensor is used to detect motion and find an approximate range of the motion. If motion is detected too close to the ACV it can respond by no moving to avoid injuries to humans or simply watch where the human is.

Executive Summary

The ACV is an autonomous construction vehicle that builds 2 and 3 layer walls. The ACV utilizes many features to complete its tasks. The ACV’s most utilized part is the crane. It is used to unload blocks from pallets and stack them to make a wall. The ACV’s roller bed will be loaded with 3 pallets each carrying 9 blocks. The crane moves only in the y and z axis’s (where the motion of the robot is in the x-direction). The crane consists of 4 joints and a gripper. The gripper grips the block and lifts it off of the pallet. It is then placed on the current structure. Small photoreflectors will also be used to sense blocks and gather other relative position data. When the current pallet is empty, the roller bed brings the next pallet down to the crane, where it is unloaded. The rollers are driven by a rubber band connected to a servo. The empty pallet is then pushed over into the dump container and the next pallet is rolled down. The pallets are dumped when the ACV is finished building. The dumping mechanism consists of a servo connected to a container. The servo is activated and the container dumps the pallets (like a dump truck). The ACV has multiple modes to help with debugging and status information. Bi-polar LEDs are used for visual motor direction confirmation. Other LEDs are mounted to display modes along with the LCD.

Introduction

The purpose of the Autonomous Construction Vehicle is to reduce manual labor and increase the amount of construction hours per day. The ACV can potentially run 24 hours a day because it doesn’t need light, it doesn’t get tired, it doesn’t drink on the job, and it’s not noisy. The primary function of the ACV is to build a structure. The ACV is based on the Mavric –IIB microcontroller. Custom boards based on TI’s TPIC0107BDWP motor driver are controlling the main actuation, while the microcontroller will directly control various servos. As a result of its complex arm, the ACV utilizes a MAX3000 CPLD to multiplex PWM signals from the Mavric –IIB. A serial enabled LCD will be interfaced to display current modes, error messages, and other helpful data. The ACV is composed of a crane, a roller bed, a garbage container, and a human tracker. Its actuation is controlled by a combination of motors and servos. The mobile platform currently consists of 2 main wheels and 3 castors for stability and maneuverability. It uses its various sensors to avoid obstacles, sense buildings, detect the current status of buildings and much more. Behaviors will consist of building, tracking a person, dumping garbage, and night and day modes.

Integrated System

The ACV’s integrated system consists of 2 main controllers. The primary controller is the Mavric –IIB, which is used for controlling the ACV’s sensors, servos,motors, and other signals. The secondary controller is a MAX3000 CPLD, which is used to switch between components on the ACV. This is done by multiplexing the signals going to the servos and motors. Since the ACV uses 9 servos and 2 motors, there were not enough PWM signals to simultaneously control all of the components. This would not be a problem if ONLY motors were used because motors will simply shut off if a zero value is sent to them. Servos require that a signal be sent every 20ms. If the servo receives a zero signal it will turn all the way to one side or turn continually if hacked. Since the Mavric –IIB comes with only 6 PWM signals and a minimum of 9 simultaneous PWM signals were required, some multiplexing was required. While servos are not selected, the CPLD sends a “hold” value to the servo. The hold values were set according to the position each servo was needed to be at. A signal generator was created in VHDL to generate the PWM signals. The signals are then sent to the multiplexers corresponding to each respective servo. The CPLD also receives signals from the Mavric which tell it to select certain sets of servos or LEDs according to what the user wants. The CPLD is clocked by a simple 555 timing circuit which generates about 10 kHz wave. Since resistors are not perfect the frequency is slightly lower at about 9.63 kHz (see figure 1). Two main power supplies are used to power the ACV. The first is a 6 AAcell NiMH power supply which is used to power the Mavric, the CPLD, the LCD, and the 555 timing circuit. A LM7805 regulator is used to regulate the power for the CPLD, the LCD, and the timing circuit. The Mavric uses its own regulator for power. This was done to avoid overloading the regulator on the Mavric. The second power supply consists of 12 AA cell NiMH batteries (6 in parallel with 6). This supply is used to power the servos and motors. A LM7805 regulator was used to regulate the power on the motors. This was done to make the motors drive more uniformly. Since the motors used were very cheap this may not have had a noticeable effect. Many noise issues occurred when the motors were activated. When activated, the servos would jitter violently, which was a bit scary. Installing opto-isolators on my direction and PWM signal lines solved a big part of the noise issue. If the voltage of the power supply for the Mavric starts to drop, the servos will begin to jitter slightly. When a 5V regulator and a 2200uF cap were added to the servo power supply the servos seemed to move smoother, but the servos still jitter when the motors are activated. The opto isolators helped a little, but noise still exists in the signals. Another issue arose when servos were hacked. Since the period of the 555 circuit is about 1/9.63k = 104usec and servos signals only span 1msec, we only have a resolution of 1m / 104u = 9.6 units. If 180o servos are being used the resolution comes out to be 180/9.6 = 18.75o. Now, since hacked servos need to be set exactly at their hacked “stop” positions in order to stop, it will be impossible to stop a hacked servo unless it is hacked according to CPLD’s stop signal value. This problem might be corrected by increasing the 555 frequency to get a smaller period, which will result in a higher resolution. Originally, the designed period of the 555 circuit was 11nsec. The problem with this is that the resulting frequency is 90GHz. This is way over the range of any oscilloscope on the UF campus and will be impossible to work with unless the exact frequency is known. Assuming a 100kHz oscilloscope is available, the smallest useable period is 10usec. This would result in a higher resolution, but would most likely NOT solve the issue with hacked servos. Even if a servo is hacked according to the CPLD’s stop signal, some drifting still might occur if the CPLD’s clock input is no perfectly stable. The ACV’s roller bed drive servo has this problem. The rollers slowly drift forward when they are not supposed to be moving.The block diagram and corresponding functional simulation can be found in respective figures 2 and 3. The VHDL code for the signal generator can be found on page XXX.Block diagrams for power distribution and controllers can be found in figures 4 and 5 respectively.

Figure 1 - 555 Timing Circuit Output ≈ 9.63 kHz

Figure 2 - CPLD PWM Generator and MUX Block Diagram

Figure 3 - CPLD PWM Generator and MUX Block Diagram - Functional Simulation

Figure 4 - Power Distribution Block Diagram

Figure 5 - Integrated System Block Diagram

Mobile Platform

The ACV’s mobile platform consists of 2 wheels and 3 castors. Since driving straight is such a difficult issue to deal with, if redesigned, a four wheel platform would be adopted to simplify issues with driving straight. The ACV’s motors are positioned directly under its arm on opposite sides of the robot. Two of the castors are in the rear if the robot and one is in the front. The rear castors are slightly lower than the front castor. This is done because some problems arose when driving over small bumps. When in certain positions, the castors were the primary support for the ACV and the wheels did not have enough friction to move the robot. The front castor was raised to resolve this issue. The front castor does not actually touch the ground while driving. The only cases where it might touch is running over a large bump, or going from full speed to stopping instantaneously while no load is on the roller bed. The body of the ACV is oddly shaped unlike other round robots. This makes obstacle avoidance and turning slightly more difficult, but can be handled with a little extra coding. The objective was for the platform to carry a load to a designated area and commence building.The platform works very well for this. One part of the platform that was not created is the lift section. The lift section was very intricate and would have taken too much time to build. All other parts of the platform were constructed and work very well. The roller bed came out beautifully. The drive shaft for the roller bed is slightly angled which causes the belts to drift to one side after running for a while. This can be corrected by building a new bracket for the driveshaft, but the roller bed is not on most of the time and the belts are not drifting too badly. The Dump is also working very well. Since the roller bed is creeping forward, as mentioned earlier, a quick fix was done to keep the pallet from falling into the dump tray when it’s not supposed to. The CPLD was simply reprogrammed to lift the dump slightly and act as a mechanical stop for the pallet. This works well, but this is not what the dump was intended for. The arm also works very well. Because the arms is made of 4 servos it can be difficult to program. A combination of servos was used to control single axis movement. The servos act differently depending on their power supplies, which can cause major problems when precise movements are required. A regulator is needed to supply the same voltage regardless of the power supply.

Actuation

The ACV has many components that require actuation. The Most complex component is the arm. The arm consists of 5 servos in all. Four of the servos are used for arm actuation and the 5th is used for gripper actuation. The arm was designed to take a block from the roller bed and place it on the ground. To do this, 180o movement of the arm is required. Normally, servos come with 90o rotation. This would not work with the design so 180o servos had to be purchased. The original design for the arm only had 3 servos. After some simulation in Pro Engineer, the arm had to be re-designed because the required freedom was impossible to achieve using only 3 180o servos. When a 4th servo was added to the design, the required freedom was achieved and the arm was built. The 2 bottom servos are HS-755s and the 3 upper servos are HS-422s. The purpose of the arm is to grab blocks off of the pallet and place them on the ground or other previously stacked blocks. This worked perfectly when the previously mentioned power issues were not causing calibration errors. Controlling the arm was difficult at times because 4 servos needed to be controlled simultaneously. The gripper doesn’t have much clearance inside the block so nearly vertical actuation was required when picking up blocks. The algorithm for this was difficult to start, but once some general positions were found, programming was much easier. A single pallet has 3 columns of blocks. The algorithm has the 3 column positions stored and uses subroutines to bring the arm to each position. Once a position is reached, the arm goes into a custom vertical movement for each of the 9 blocks. This was done so each block pickup movement could be modified easily. Once a block is grabbed, the arm returns to the column position and then goes into another subroutine called place. There are 3 place subroutines. The first is for a block that needs to be on the ground, the 2nd is for a block that needs to be on the 2nd layer, and the 3rd is for a block that needs to be on the 3rd layer. The same idea for block placement is used. A position is stored, and vertical movement is commenced from that position. Because the CPLD is used, the arm must be returned to the position that the CPLD holds it at or the arm will jerk violently as it returns to the position in 1 clock cycle. All of the arm movement is done by incrementing to values in the OCR. This way, the arm moves slowly and each servo reaches its position simultaneously. Return functions are written that move the arm back to a certain position by polling the OCRs and checking if they are = to some value. This way, the arm can return to a position, from ANY position without violently jerking around.

The next most complicated device was the roller bed. The drive servo is hacked according to the CPLD frequency, which makes things difficult. The servo is controlled like any other hacked servo. A value less than the stop value will turn one way, a value greater than the stop value will turn the other way. The servo drives a shaft which is about 5/8 inch. This gives the drive bands more surface area which results in more friction. The shaft is also buffed horizontally with sandpaper to set grooves into it to add additional friction. The roller bed is split into 3 sections. The center section is driven directly by the shaft that the servo drives. The front and rear sections are driven by the rollers of the center section. At the points where the center section connects to the rear section steel shafts were used. The rest of the roller shafts are fiberglass to reduce the weight of the robot. The rollers are made of Teflon because it has low friction on steel and fiberglass-like materials, while having a descent friction on rubber-like materials. The roller bed turned out great and works beautifully. The algorithm for the roller bed incorporates the photoreflector as a positions sensor. The “Next Pallet” algorithm starts rolling the roller bed when executed. When the pallet falls off of the roller bed, there is a short period when the photoreflector sees nothing. The algorithm sees this, and continues to roll until another object is detected. When the ACV was demoed the first pallet did not roll off correctly. This caused the sensor to think the next pallet was detected and the rollers stopped. This issue has been fixed by adding another small part of code that checks the status of the photoreflector before the next build cycle is executed. That way, if the pallet does not roll all the way up, it will still roll up before the build command is executed.