Patent Publication Number: US-2021181338-A1

Title: Determining an angle between a tow vehicle and a trailer

Description:
CROSS-REFERENCE TO RELATED APPLICATIONS 
     This application is a continuation of U.S. patent application Ser. No. 16/174,980, titled “DETERMINING AN ANGLE BETWEEN A TOW VEHICLE AND A TRAILER,” filed on Oct. 30, 2018, published as U.S. Pre-Grant Publication 2020-0132835 on Apr. 30, 2020, the disclosure of which is hereby incorporated by reference in its entirety herein. 
    
    
     TECHNICAL FIELD 
     This document relates to determining the angle between a tow vehicle and a trailer being towed. 
     BACKGROUND 
     Many different types of vehicles are used to tow a variety of different types of trailers. For example, commercial semi-trailer trucks, also known as semis, tractor-trailers, big rigs, eighteen-wheelers, or transports include a tractor towing one or more trailers. Other non-commercial vehicles such as pick-up trucks, motorhomes, recreational vehicles, and sport-utility vehicles also tow trailers, boats, campers, and other types of trailers. In each of the above examples, the stability of the trailer and tow vehicle depends on multiple factors such as the speed of the trailer and tow vehicle, the weather conditions such as wind and rain, the length of trailer, the number of axles, the angle between tow vehicle and the trailer, and others. New techniques are needed to measure the angle between the trailer and tow vehicle that are reliable, accurate, have a long service life, and are inexpensive. 
     SUMMARY 
     Disclosed are devices, systems and methods for determining an angle such as the angle that a trailer is towed behind a vehicle. In one aspect, a system for determining a trailer angle between a trailer and a vehicle is disclosed. The system includes one or more ultrasonic sensors, wherein each ultrasonic sensor is mountable to the vehicle to determine a distance from the ultrasonic sensor to a front-end of a trailer attached to the vehicle. The system further includes an ultrasonic control unit configured to receive the distance from each of the one or more ultrasonic sensors via a communications interface, wherein the ultrasonic control unit determines one or more angles, each angle corresponding to a distance received from the one or more ultrasonic sensors, wherein each angle is between the vehicle and the trailer, and wherein the ultrasonic control unit determines the trailer angle from the one or more angles. 
     In another aspect, a method for determining a trailer angle between a trailer and a vehicle is disclosed. The method includes receiving, from each of one or more ultrasonic sensors attached to the vehicle, information about a distance between each ultrasonic sensor and a front-end of the trailer attached to the vehicle, and determining one or more angles, each angle corresponding to the information about the distance received from the one or more ultrasonic sensors, wherein each angle is an estimate of alignment between the vehicle and the trailer, and wherein a trailer angle is determined from the one or more angles. 
     In another aspect, a non-transitory computer readable medium is disclosed. The non-transitory computer readable medium stores executable instructions for determining a trailer angle between a trailer and a vehicle that when executed by at least one processor perform at least the following: receiving, from each of one or more ultrasonic sensors, a distance between each ultrasonic sensor and a front-end of the trailer attached to the vehicle, and determining one or more angles, each angle corresponding to a distance received from the one or more ultrasonic sensors, wherein each angle is between the vehicle and the trailer, and wherein a trailer angle is determined from the one or more angles. 
     The following features can be included in various combinations. A first angle corresponding to a first ultrasonic sensor can be determined based on one or more geometrical relationships between a position of the first ultrasonic sensor and the front-end of the trailer. The trailer angle can be determined as an average angle of the one or more angles. The average angle can be weighted based on a standard deviation for distance values received at the ultrasonic control unit from each of the one or more ultrasonic sensors. The ultrasonic control unit can determine an error interval and a confidence level based on the standard deviation for distance values received at the ultrasonic control unit from each of the one or more ultrasonic sensors. The first angle can be determined from: a first neutral distance between the first ultrasonic sensor and the front-end of the trailer when the trailer is in line with the vehicle, a first angled distance when the trailer is angled with respect to the vehicle, and/or a first offset distance between the center of the first ultrasonic sensor and the center of the tractor. The first neutral distance can be determined when a steering angle of the vehicle is about zero degrees and the vehicle is travelling at about 10 kilometers per hour or more. The ultrasonic control unit can include at least one processor, at least one memory storing executable instructions that when executed by the at least one processor perform at least the following determining the first angle corresponding to a first ultrasonic sensor as: A 1 =arctangent ((D 1-1 −D 1-2 )/Dis1), wherein A 1  is the first angle between the vehicle and the trailer, wherein D 1-1  is a first neutral distance between the first ultrasonic sensor and the front-end of the trailer, wherein the first neutral distance is determined when the trailer is in line with the vehicle, wherein D 1-2  is a first angled distance between the first ultrasonic sensor and the front-end of the trailer, wherein the first angled distance is determined when the trailer is angled with respect to the vehicle, and wherein Dis1 is a first offset distance, wherein the first offset distance is between the center of the first ultrasonic sensor and the center of the vehicle. 
     The above and other aspects and features of the disclosed technology are described in greater detail in the drawings, the description and the claims. 
    
    
     
       BRIEF DESCRIPTION OF THE DRAWINGS 
         FIG. 1  depicts an example of an angle measurement system installed on a tractor, in accordance with some example embodiments; 
         FIG. 2  depicts an example of an arrangement of ultrasonic sensors for measuring an angle between a tow vehicle and a trailer, in accordance with some example embodiments; 
         FIG. 3A  depicts an illustration showing a trailer at an angle to a tow vehicle that is not a straight line, and various distances, in accordance with some example embodiments; 
         FIG. 3B  depicts another illustration showing a trailer at an angle to a tow vehicle, in accordance with some example embodiments; 
         FIG. 4  depicts an example of an apparatus, in accordance with some example embodiments; 
         FIG. 5  depicts an example of an apparatus where two sensors are not operational, in accordance with some example embodiments; 
         FIG. 6  depicts an example of an apparatus where four sensors are not operational, in accordance with some example embodiments; 
         FIG. 7  depicts an example of a process, in accordance with some example embodiments; and 
         FIG. 8  depicts an example of an apparatus, in accordance with some example embodiments. 
     
    
    
     DETAILED DESCRIPTION 
     The angle of a trailer with respect to a tow vehicle is an important parameter to the stability of the vehicle and trailer. A tow vehicle pulling a trailer in a straight line is generally more stable than when the vehicle is turning. While turning, the angle between the tow vehicle and the trailer is not a straight line but is another angle depending on how sharply the tow vehicle is turning. To safely operate a vehicle towing a trailer, for a given steering input and speed, there is a maximum angle between the tow vehicle and trailer whereby exceeding the angle causes instability and may cause the trailer or tow vehicle to roll over or jackknife. Accordingly, the angle between the trailer and tow vehicle may be determined to ensure the vehicle and trailer will continue to be in control. A trailer angle sensor system should provide high accuracy and redundancy to ensure the system is always operable even when one or more sensors are inoperable. This calculation becomes important when the vehicle is an autonomous vehicle and therefore lacks the benefit of judgment of a human driver regarding stability of the combination of the vehicle and the trailer when driving around curves. 
     Current trailer angle sensors have several limitations including: 1) Current trailer angle sensors need to be installed in trailers or at least have to be fixed to the trailer in order to determine the relative motion between trailer and tractor. This means the sensor needs to be reinstalled or recalibrated each time after changing the trailer; 2) Current techniques offer no redundancy since they use Hall effect devices or resistive position sensors; 3) The lifecycle of current trailer angle sensors is limited because they are typically mounted near the 5 th  wheel which is often a harsh environment due to vibration, exposure to the elements, and chemicals such as lubricating grease. 
       FIG. 1  depicts an example of an angle measurement system installed on a tow vehicle (also referred to herein as a “tractor”), in accordance with some example embodiments. Tractor  110  is physically coupled to trailer  120 . A side-view is shown at  100 A, a top-view at  100 B, a front-view at  100 C, and a back-view at  100 D. The tractor  110  includes a plurality of ultrasonic sensors  130  mounted to the back of the tractor with the ultrasonic beams directed to the front surface of the trailer. Each of the ultrasonic sensors determines or helps to determine the distance from the ultrasonic sensor to the front of the trailer  120 . Using the distances, ultrasonic control unit  125  determines the angle between the tractor and the trailer. In  FIG. 1 , the tractor and trailer lie in a straight line. When the tractor trailer is turning, the tractor and trailer may no longer be in line and there would be an angle between the tractor and trailer (also referred to as the “trailer angle”). UCU  125  may include a processor and memory, and various interfaces such as one or more communications interfaces. 
       FIG. 2  depicts an example of an arrangement of ultrasonic sensors for measuring an angle between a tow vehicle and a trailer. In some example embodiments, the ultrasonic sensors  130  may be arranged as shown at  200 . The sensor arrangement shown is an “inverted V” arrangement. For example, on the back of tractor  110  in  FIG. 1 , the five ultrasonic sensors  131 - 135  may be mounted in the “inverted V” configuration with ultrasonic sensor  133  highest above the roadway in the center (left-to-right) of the tractor, and ultrasonic sensors  131  and  135  mounted on the back of the tractor closest to the roadway compared to ultrasonic sensors  132 - 134 . Although five sensors are shown at  200 , a greater or smaller number of sensors may be used. Although the ultrasonic sensors  131 - 135  are shown in an “inverted V” configuration, the sensors may be attached in a different configuration, such as a straight line (flat or tilted), a “W” or “inverted W” configuration or in another pattern. Organizing ultrasonic sensors in a two-dimensional pattern in a plane that is perpendicular to the axis between the tractor and the trailer may lead to a more robust determination of the trailer angle. For example, placing the ultrasonic sensors in a pattern can avoid objects between the tow vehicle and trailer and can avoid surfaces that are not normal to the ultrasonic sensor ultrasound when the trailer is pulled in a straight line. These non-perpendicular surfaces may not be suitable for ultrasonic distance determination. For example, an object with an angled surface (non-perpendicular to illuminating ultrasound) attached to the trailer may be at an obtuse angle to an ultrasonic sensor at a range of trailer angles causing the distance determined by the ultrasonic sensor to be inaccurate or preventing a distance from being determined due to little or no reflected ultrasonic signal from the angled object. In some example embodiments, ultrasonic sensor may be oriented to illuminate the trailer with ultrasound at a perpendicular angle when the trailer angle is not zero degrees. By doing so, some ultrasonic sensors may provide better distance determinations at different trailer angles. In some example embodiments, the ultrasonic sensors may provide timing information such as a transmit time and a reception time from which a transit time to from the sensor to the trailer can be determined, or some ultrasonic sensors may determine the transit time. Form the transit time, the distance can be determined based on the speed of the ultrasound. 
     At  210  is an example illustration of a top-view of a tractor trailer showing ultrasonic sensors  131 - 135 . Also shown are distances  201 - 205  from each ultrasonic sensor to the front of the trailer  120 . Distances  201 - 205  may be referred to “neutral distances” because the trailer is in a straight line with the tow vehicle. Each ultrasonic sensor determines information indicative of the distance, or the distance between the sensor to the front of the trailer. As noted above, information indicative of the distance includes a transit time for the ultrasound to propagate to the trailer (one way or round trip) or timing information such as time stamps from which the transit time can be determined. In the following, “distance” is used, but as noted above time information can be provided by the sensor instead of distance. For example, ultrasonic sensor  131  determines that the trailer is distance  201  from ultrasonic sensor  131 . Ultrasonic sensor  132  determines that the trailer is distance  202  from ultrasonic sensor  132 . Ultrasonic sensor  133  determines that the trailer is distance  203  from ultrasonic sensor  133 . Ultrasonic sensor  134  determines that the trailer is distance  204  from ultrasonic sensor  134 , and ultrasonic sensor  135  determines that the trailer is distance  205  from ultrasonic sensor  135 . With the tractor  110  and trailer  120  in a straight line as shown at  210 , the distances  201 - 205  are approximately equal. In some embodiments, a fairing, wind deflector, or equipment such as cooling equipment for the trailer  120  may cause the distances  201 - 205  to not be equal when the trailer and tractor lie in a straight line. The non-equal distances can be corrected in the UCU. The distances are provided to the UCU. The UCU may control the ultrasonic sensors and may receive health and status information from the ultrasonic sensors. 
       FIG. 3A  depicts an example illustration showing an example of a trailer at an angle to a tow vehicle that is not a straight line, and various distances. At  310  is an illustration of a tractor  110  with a trailer  120  at an angle, trailer angle  350 , to the trailer with ultrasonic sensors  131 - 135  attached to tractor  110 . Each ultrasonic sensor determines the distance between the sensor to the front of the trailer as described above. In the example of  FIG. 3A  at  310 , distance  301  is greater that distance  302 , distance  302  is greater than distance  303 , distance  303  is greater than distance  304 , distance  304  is greater than distance  305 . Distances  201 - 205  may be referred to “angled distances” because the trailer is not in a straight line with the tow vehicle. The distances are provided by ultrasonic sensors  131 - 135  to the UCU  125  and are used to determine the angle between the tractor  110  and trailer  120 . 
     Shown at  320  is an illustration depicting distances  311 - 314  between the center of the center ultrasonic sensor  133  and the other ultrasonic sensors  131 ,  132 ,  134 , and  135 . Distances  311 - 314  are used in determining the angle between tractor  110  and trailer  120 . Although distances  311 - 314  are shown from the center of one sensor to the center of another, other distances related to the spacing of the ultrasonic sensors may be used instead. 
     The UCU coordinates distance measuring by the sensors and determines the trailer angle based on the distances from the sensors. Coordination may include turning-on the sensors  131 - 135  individually at different times to prevent interference that could occur if multiple sensors were operating at the same time. In some example embodiments, the ultrasonic sensors may include a signature such as a pseudo-random noise (PN) code or other code, or the different sensors may modulate the emitted ultrasound to be orthogonal to other sensors. The UCU may also receive information including vehicle speed information, steering angle information, and the UCU may make zero clearing based on adapted control algorithm. The trailer angle may be sent to a vehicle dynamics controller, electronic stability controller (ESC), or vehicle stability controller (VSC) of the tow vehicle. 
       FIG. 3B  depicts another illustration showing a trailer at an angle to a tow vehicle, in accordance with some example embodiments.  FIG. 3B  shows distances and angles related to determining the trailer angle and is further described below with respect to Equation 1. 
       FIG. 4  at  400  depicts an apparatus, in accordance with some example embodiments.  FIG. 4  includes ultrasonic sensors  131 - 135 , ultrasonic control unit (UCU)  125 , vehicle speed sensor  410 , steering angle sensor  420 , and vehicle dynamics controller  430 . 
     Ultrasonic sensors  131 - 135  include a communications interface to communicate with UCU  125 . For example, commands such as powering-up or down each ultrasonic sensor, commanding each sensor to take a distance measurement, commands related to averaging distance values at each sensor, and others may be sent from UCU  125  to the ultrasonic sensors  131 - 135  individually or together. Data may be sent from each ultrasonic sensor to the UCU such as distance data, and sensor status and health information. UCU  125  may perform a process to determine the trailer angle. The UCU may receive vehicle speed information from the vehicle speed sensor  410  and/or steering angle information from steering angle sensor  420  via a dedicated or standard interface such as an on-board diagnostics (OBD) or another interface. The UCU may interface to a vehicle dynamics controller such as ESC or VSC or other stability management device in the vehicle. 
       FIG. 5  depicts an example of an apparatus where two sensors are not operational, in accordance with some example embodiments. In the example of  FIG. 5 , ultrasonic sensors  132 A and  134 A are not operational due to one or more types of failures. The UCU may use data from the remaining sensors  131 ,  133 , and  135  to determine the trailer angle. Use of fewer ultrasonic sensors (3 instead of 5) may cause a reduction in the accuracy or resolution of the trailer angle, but may be sufficient to operate the tractor trailer safely.  FIG. 5  is an illustrative example where two ultrasonic sensors are inoperable. Other combinations of sensors may fail resulting in similar reduced performance as well. 
       FIG. 6  depicts an example of an apparatus where four sensors are not operational, in accordance with some example embodiments. In the example of  FIG. 6 , ultrasonic sensors  132 A.  133 A,  134 A, and  135 A are not operational due to a one or more types of failures. The UCU may use data from the remaining sensor  131  to determine the trailer angle. Use of fewer ultrasonic sensors (1 instead of 5) may cause a reduction in the accuracy or resolution of the trailer angle, but may be sufficient to operate the tractor trailer safely.  FIG. 6  is an illustrative example where four ultrasonic sensors are inoperable. Other combinations of sensors may fail resulting in reduced performance as well. 
       FIG. 7  depicts a process  700 , in accordance with some example embodiments. The trailer angle may be determined using the process  700 . 
     At  710 , the process includes determining, by the ultrasonic sensors  131 - 135 , the distances  201 - 205  to the trailer when trailer is in a neutral position (the trailer is in line with tractor). These values may be sent to the UCU and stored in memory such as a nonvolatile memory in the UCU. The neutral position may be determined when the steering angle is near zero and the tractor trailer velocity is greater than about 10 km/h. The distance values may be averaged or filtered over a period of time such as 1-5 seconds (or another time period). These stored values may be used as long as the tractor is attached to the same trailer. If a new trailer is attached to the tractor or the trailer is removed and then re-attached, the neutral distances may be determined again. 
     At  720 , the trailer angle may be determined based the current distances  301 - 305 , the geometrical relationships between the sensors and the tractor and trailer, and the distances determined at  710 . As the tractor trailer travels, the ultrasonic sensors  131 - 135  periodically, intermittently, or continuously determine the distances between the tractor and trailer. When the tractor turns, the determined distances change. For example, when the  FIG. 3A  tractor  110  and trailer  120  turn left (as viewed from the top), distance  301  is greatest, followed by  302 ,  303 ,  304 , and  305  which is the smallest distance. If the tractor were turning right, distance  305  would be greatest,  301  the smallest, and so on. In some example embodiments, angles may be determined for ultrasonic sensors  131 ,  132 ,  134 , and  135  but not sensor  133  which may be used for initial angle determination. 
     Referring to  FIGS. 3A and 3B , the following equation may be used to determine the trailer angle at a first ultrasonic sensor: 
         A   1 =arctan(( D   1-1   −D   1-2 )/ Dis 1)  Equation 1
 
     where A 1  refers to the trailer angle  350 B in  FIG. 3B  at ultrasonic sensor  131 , distance D 1-1  is distance  301 , distance D 1-2  is distance  302 , distance D 1-1 −D 1-2  is distance  330 , and distance Dis1 is distance  311 . By symmetry angles  350 A and  350 B have the same value which is equal to the trailer angle. A similar equation may be expressed for angles at additional ultrasonic sensors as A 2 , A 3 , and so on where A 2  refers to the trailer angle at ultrasonic sensor  132 , and so on, D 2-1  is distance  202 , and so on, D 2-2  is distance  302 , and so on, and Dis2 is distance  312 , Dis4 is distance  313 , and Dis5 is distance  314 , and so on. 
     At  730 , for each angle value (A 1 , A 2 , A 4 , and A 5 ) a standard deviation SD 1 , SD 2 , SD 4 , SD 5 , may be determined. The noise from each ultrasonic sensor may be used to determine the standard deviation. 
     An average value may be determined for 100 angle determinations of A 1  from: 
     
       
         
           
             
               
                 
                   
                     
                       A 
                       1 
                     
                     _ 
                   
                   = 
                   
                     
                       
                         A 
                          
                         
                           1 
                           1 
                         
                       
                       + 
                       
                         A 
                          
                         
                           1 
                           2 
                         
                       
                       + 
                       … 
                       + 
                       
                         A 
                          
                         
                             
                         
                          
                         
                           1 
                           
                             1 
                              
                             0 
                              
                             0 
                           
                         
                       
                     
                     
                       1 
                        
                       0 
                        
                       0 
                     
                   
                 
               
               
                 
                   Equation 
                    
                   
                       
                   
                    
                   2 
                 
               
             
           
         
       
     
     The standard deviation may then be expressed as: 
     
       
         
           
             
               
                 
                   
                     S 
                      
                     
                       D 
                       1 
                     
                   
                   = 
                   
                     
                       
                         
                           
                             ( 
                             
                               
                                 A 
                                  
                                 
                                     
                                 
                                  
                                 
                                   1 
                                   1 
                                 
                               
                               - 
                               
                                 
                                   A 
                                    
                                   
                                       
                                   
                                    
                                   1 
                                 
                                 _ 
                               
                             
                             ) 
                           
                           2 
                         
                         + 
                         … 
                         + 
                         
                           
                             ( 
                             
                               
                                 A 
                                  
                                 
                                     
                                 
                                  
                                 
                                   1 
                                   100 
                                 
                               
                               - 
                               
                                 
                                   A 
                                    
                                   
                                       
                                   
                                    
                                   1 
                                 
                                 _ 
                               
                             
                             ) 
                           
                           2 
                         
                       
                       100 
                     
                   
                 
               
               
                 
                   Equation 
                    
                   
                       
                   
                    
                   3 
                 
               
             
           
         
       
     
     At  740 , a weighting of the determined angle values from the different ultrasonic sensors based on their standard deviations may be expressed as: 
         W   1 =1− SD   1 /( SD   1   +SD   2   +SD   4   +SD   5 )
 
         W   2 =1− W   1   −SD   2 /( SD   2   +SD   4   +SD   5 )
 
         W   4 =1− W   1   −W   2   −SD   4 /( SD   4   +SD   5 )
 
         W   5 =1− W   1   −W   2   −W   4   Equations 4
 
     Because the back of the tractor and the front of the trailer are structural and essentially rigid, in a perfect world without noise and imperfections, angles A 1 , A 2 , A 4 , and A 5  would have the same value, but because of noise and imperfections they may differ in average and the standard deviation of each is a measure of the “noisiness” of each. 
     At  760 , a weighted trailer angle may be expressed as: 
         A   O   =W   1   *A   1   +W   2   *A   2   +W   4   *A   4   +*A   5   Equation 5
 
     At  770 , an error and confidence level of the weighted trailer angle may be expressed as: 
         A   Error   =W   1   *SD   1   +W   2   *SD   2   +W   4   *SD   4   +W   5   *SD   5   Equation 6
 
         A   CL =[ A   O   −A   Error   ,A   O   +A   Error ]  Equation 7
 
     In some example embodiments, zero detection of the trailer angle may be performed. To begin zero detection, an error between the last angle output and current angle value may be 5 degrees or larger (or another value such as 4 degrees). Ultrasonic sensor  133  may be used as an initial reference of a zero angle for the other ultrasonic sensors. During the zero detection, each angle may be calculated using the following formulas: 
         A   1 =arctan(( D   1-2   −D   3-1 )/ Dis 1) 
         A   2 =arctan(( D   2-2   −D   3-1 )/ Dis 2) 
         A   4 =arctan(( D   4-2   −D   3-1 )/ Dis 4) 
         A   5 =arctan(( D   5-2   −D   3-1 )/ Dis 5),  Equations 8
 
     where D 1-2 , D 2-2 , D 4-2 , D 5-2  are the current distance measurements of sensors  131 ,  132 ,  134 , and  135 , respectively. Sensor  133  may be mounted in the middle of the tractor as shown in  FIGS. 3A and 3B . The relative movement of the trailer and/or trailer angle will not influence, or will negligibly influence, the distance measured by sensor  133 . Accordingly, sensor  133  may be used as a reference for the system and to compare to the distances from sensors  131 ,  132 ,  134 , and  135 . 
     In some example embodiments, a process  700  may be performed to determine a trailer angle between a trailer and a vehicle. At  720 , the process includes receiving, from each of one or more ultrasonic sensors, a distance between each ultrasonic sensor and a front-end of the trailer attached to the vehicle. At  720 , the process includes determining one or more angles, each angle corresponding to a distance received from the one or more ultrasonic sensors, wherein each angle is between the vehicle and the trailer, and wherein a trailer angle is determined from the one or more angles. The process may further include features described above in various combinations. 
       FIG. 8  depicts an example of an apparatus  800  that can be used to implement some of the techniques described in the present document. For example, the hardware platform  800  may implement the process  700 , or other processes described above, and/or may implement the various modules described herein. The hardware platform  800  may include a processor  802  that can execute code to implement a method. The hardware platform  800  may include a memory  804  that may be used to store processor-executable code and/or store data. The hardware platform  800  may further include a communication interface  806 . For example, the communication interface  806  may implement one or more wired or wireless communication protocols (Ethernet, LTE, Wi-Fi, Bluetooth, and so on). 
     Implementations of the subject matter and the functional operations described in this patent document can be implemented in various systems, semiconductor devices, ultrasonic devices, digital electronic circuitry, or in computer software, firmware, or hardware, including the structures disclosed in this specification and their structural equivalents, or in combinations of one or more of them. Implementations of aspects of the subject matter described in this specification can be implemented as one or more computer program products, e.g., one or more modules of computer program instructions encoded on a tangible and non-transitory computer readable medium for execution by, or to control the operation of, data processing apparatus. The computer readable medium can be a machine-readable storage device, a machine-readable storage substrate, a memory device, a composition of matter effecting a machine-readable propagated signal, or a combination of one or more of them. The term “data processing unit” or “data processing apparatus” encompasses all apparatus, devices, and machines for processing data, including by way of example a programmable processor, a computer, or multiple processors or computers. The apparatus can include, in addition to hardware, code that creates an execution environment for the computer program in question, e.g., code that constitutes processor firmware, a protocol stack, a database management system, an operating system, or a combination of one or more of them. 
     A computer program (also known as a program, software, software application, script, or code) can be written in any form of programming language, including compiled or interpreted languages, and it can be deployed in any form, including as a stand-alone program or as a module, component, subroutine, or other unit suitable for use in a computing environment. A computer program does not necessarily correspond to a file in a file system. A program can be stored in a portion of a file that holds other programs or data (e.g., one or more scripts stored in a markup language document), in a single file dedicated to the program in question, or in multiple coordinated files (e.g., files that store one or more modules, sub programs, or portions of code). A computer program can be deployed to be executed on one computer or on multiple computers that are located at one site or distributed across multiple sites and interconnected by a communication network. 
     The processes and logic flows described in this specification can be performed by one or more programmable processors executing one or more computer programs to perform functions by operating on input data and generating output. The processes and logic flows can also be performed by, and apparatus can also be implemented as, special purpose logic circuitry, e.g., an FPGA (field programmable gate array) or an ASIC (application specific integrated circuit). 
     Processors suitable for the execution of a computer program include, by way of example, both general and special purpose microprocessors, and any one or more processors of any kind of digital computer. Generally, a processor will receive instructions and data from a read only memory or a random-access memory or both. The essential elements of a computer are a processor for performing instructions and one or more memory devices for storing instructions and data. Generally, a computer will also include, or be operatively coupled to receive data from or transfer data to, or both, one or more mass storage devices for storing data, e.g., magnetic, magneto optical disks, or optical disks. However, a computer need not have such devices. Computer readable media suitable for storing computer program instructions and data include all forms of nonvolatile memory, media and memory devices, including by way of example semiconductor memory devices, e.g., EPROM, EEPROM, and flash memory devices. The processor and the memory can be supplemented by, or incorporated in, special purpose logic circuitry. 
     While this patent document contains many specifics, these should not be construed as limitations on the scope of any invention or of what may be claimed, but rather as descriptions of features that may be specific to particular embodiments of particular inventions. Certain features that are described in this patent document in the context of separate embodiments can also be implemented in combination in a single embodiment. Conversely, various features that are described in the context of a single embodiment can also be implemented in multiple embodiments separately or in any suitable subcombination. Moreover, although features may be described above as acting in certain combinations and even initially claimed as such, one or more features from a claimed combination can in some cases be excised from the combination, and the claimed combination may be directed to a subcombination or variation of a subcombination. 
     Similarly, while operations are depicted in the drawings in a particular order, this should not be understood as requiring that such operations be performed in the particular order shown or in sequential order, or that all illustrated operations be performed, to achieve desirable results. Moreover, the separation of various system components in the embodiments described in this patent document should not be understood as requiring such separation in all embodiments. 
     Only a few implementations and examples are described, and other implementations, enhancements and variations can be made based on what is described and illustrated in this patent document.