Rolling shutter compensation for moving digital optical camera sensors
11405557 · 2022-08-02
Assignee
Inventors
Cpc classification
G06T1/0014
PHYSICS
G06T7/246
PHYSICS
B60R11/04
PERFORMING OPERATIONS; TRANSPORTING
H04N23/683
ELECTRICITY
B60R1/00
PERFORMING OPERATIONS; TRANSPORTING
B60R2300/302
PERFORMING OPERATIONS; TRANSPORTING
G06T2207/20182
PHYSICS
H04N23/6812
ELECTRICITY
International classification
B60R1/00
PERFORMING OPERATIONS; TRANSPORTING
B60R11/04
PERFORMING OPERATIONS; TRANSPORTING
Abstract
A method for rolling shutter compensation for a camera sensor mounted on a moving vehicle includes estimating, based on a plurality of images of an object, a speed and a direction of movement of the vehicle; acquiring an additional image of the object having four corners; estimating a location of each of the four corners of the object in an image plane defined by the additional image; determining a corrected location in 3D space for each of the four corners of the object; determining a first compensated location for each of the four corners of the object in the image plane; determining a second compensated location for each of the four corners of the object in the image plane; and determining a difference between the first compensated locations of the four corners of the object and the second compensated locations of the four corners of the object.
Claims
1. A computer-implemented method for rolling shutter compensation for a camera sensor mounted on a moving vehicle, the method including computer processes, carried out by a computer system coupled to the camera sensor, comprising: a. estimating, by the computer system, based on a plurality of images of an object acquired by the camera sensor, the object having four corners, a speed and a direction of movement of the vehicle; b. acquiring, by the camera sensor, an additional image of the object, wherein the additional image includes the four corners of the object; c. estimating, by the computer system, based on the additional image of the object, a location of each of the four corners of the object in an image plane defined by the additional image; d. determining, by the computer system, based on the speed and direction of movement of the vehicle and the estimated locations of the four corners, a corrected location in 3D space for each of the four corners of the object; e. determining, by the computer system, a first compensated location for each of the four corners of the object in the image plane; f. repeating steps a through d and determining, by the computer system, a second compensated location for each of the four corners of the object in the image plane; and g. determining, by the computer system, a difference between the first compensated locations of the four corners of the object and the second compensated locations of the four corners of the object.
2. The method according to claim 1, wherein estimating the speed and the direction of movement of the vehicle further comprises determining, by the computer system, a distance from the camera sensor to each one of the plurality of images of the object.
3. The method according to claim 1, wherein estimating the speed and the direction of movement of the vehicle is further based on an acquisition time of each one of the plurality of images of the object.
4. The method according to claim 1, wherein determining the first and second compensated locations of the four corners of the object further comprises projecting, by the computer system, the corrected locations of the four corners in 3D space onto the image plane.
5. The method according to claim 1, wherein estimating the speed and the direction of movement of the vehicle is further based on a known location of the object.
6. The method according to claim 1, wherein the vehicle is a robot.
7. A moving vehicle comprising: a camera sensor; and a processor coupled to the camera sensor, wherein the processor is configured to a. estimate, based on a plurality of images of an object acquired by the camera sensor, the object having four corners, a speed and a direction of movement of the moving vehicle; b. receive, from the camera sensor, an acquired additional image of the object, wherein the additional image includes the four corners of the object; c. estimate, based on the additional image of the object, a location of each of the four corners of the object in an image plane defined by the additional image; d. determine, based on the speed and direction of movement of the camera sensor and the estimated locations of the four corners, a corrected location in 3D space for each of the four corners of the object; e. determine a first compensated location for each of the four corners of the object in the image plane; f. repeat steps a through d and determine a second compensated location for each of the four corners of the object in the image plane; and g. determine a difference between the first compensated locations of the four corners of the object and the second compensated locations of the four corners of the object.
8. The moving vehicle according to claim 7, wherein, to estimate the speed and the direction of movement of the robot, the processor is further configured to determine a distance from the camera sensor to each one of the plurality of images of the object.
9. The moving vehicle according to claim 7, wherein estimating the speed and the direction of movement of the camera sensor is further based on an acquisition time of each one of the plurality of images of the object.
10. The moving vehicle according to claim 7, wherein, to determine the first and second compensated locations of the four corners of the object, the processor is further configured to project the corrected locations of the four corners in 3D space onto the image plane.
11. The moving vehicle according to claim 7, wherein estimating the speed and the direction of movement of the moving vehicle is further based on a known location of the object.
12. A robot comprising: a mobile base; a camera sensor mounted on the mobile base; and a processor coupled to the camera sensor, wherein the processor is configured to a. estimate, based on a plurality of images of an object acquired by the camera sensor, the object having four corners, a speed and a direction of movement of the robot; b. receive, from the camera sensor, an acquired additional image of the object, wherein the additional image includes the four corners of the object; c. estimate, based on the additional image of the object, a location of each of the four corners of the object in an image plane defined by the additional image; d. determine, based on the speed and direction of movement of the camera sensor and the estimated locations of the four corners, a corrected location in 3D space for each of the four corners of the object; e. determine a first compensated location for each of the four corners of the object in the image plane; f. repeat steps a through d and determine a second compensated location for each of the four corners of the object in the image plane; and g. determine a difference between the first compensated locations of the four corners of the object and the second compensated locations of the four corners of the object.
Description
BRIEF DESCRIPTION OF THE DRAWINGS
(1) The foregoing features of embodiments will be more readily understood by reference to the following detailed description, taken with reference to the accompanying drawings, in which:
(2)
(3)
(4)
(5)
(6)
(7)
(8)
(9)
DETAILED DESCRIPTION OF SPECIFIC EMBODIMENTS
(10) Definitions. As used in this description and the accompanying claims, the following terms shall have the meanings indicated, unless the context otherwise requires:
(11) A “computer process” is the performance of a described function in a computer using computer hardware (such as a processor, field-programmable gate array or other electronic combinatorial logic, or similar device), which may be operating under control of software or firmware or a combination of any of these or operating outside control of any of the foregoing. All or part of the described function may be performed by active or passive electronic components, such as transistors or resistors. In using the term “computer process” we do not necessarily require a schedulable entity, or operation of a computer program or a part thereof, although, in some embodiments, a computer process may be implemented by such a schedulable entity, or operation of a computer program or a part thereof. Furthermore, unless the context otherwise requires, a “process” may be implemented using more than one processor or more than one (single- or multi-processor) computer.
(12) A “set” has at least one member.
(13) A “robot” is a machine capable of movement that uses data received from a digital optical camera sensor. For example, a robot may be an autonomous warehouse vehicle, automobile, truck, or similar device.
(14) A “pose” is a location and orientation of a device, such as a robot or a digital optical camera sensor.
(15) A “moving vehicle” is a robot, automobile, truck, forklift, or any other automated guided vehicle.
(16)
(17) In step 102, the speed and direction of movement of the camera sensor are estimated based on a plurality of images of an object that the camera sensor has acquired. The object has four corners and may, for example, be a tag that contains a barcode. The object further is stationary. The plurality of images of the object was acquired at known points in time while the sensor was moving. For example, a first image was acquired at time t.sub.1, and a second image was acquired at time t.sub.2.
(18) To estimate the speed and direction of movement of the camera sensor, the locations of the center points of the object in the world coordinate system are required.
(19)
P.sub.2=P.sub.1+ν*(t.sub.2−t.sub.1)=P.sub.1+ν*Δt
(20) It follows that the movement vector v can be calculated as:
(21)
(22) The movement vector v includes the direction of movement of the camera. From the length of vector v, the speed of movement of the camera can be determined.
(23) Referring back to
(24) In step 106, the locations of the four corners of the object as acquired in the additional image are detected in the image plane of the additional image. This detection assumes that there is no distortion and yields the location of the four corners in image space, i.e., in pixel coordinates. In addition to the four corners, a location of the object itself, for example its center point, could be detected or estimated. It is also expressly contemplated that the location of the object and/or of its corners could be estimated in world coordinates.
(25) In step 108, corrected locations in 3D space for each of the four corners of the object in image space are determined.
(26) The four corners of the object as detected in the additional image have therefore been acquired at four different time points to, t.sub.1, t.sub.2, and t.sub.3, as shown in
(27) The pixel corresponding to the bottom right corner of the object was acquired last at time t.sub.0, which we define as the baseline with zero time difference. We now label the pixel acquired at time t.sub.0, i.e. the pixel corresponding to the bottom right corner of the object, as I.sub.0, the pixel acquired at time t.sub.1, i.e. the pixel corresponding to the bottom left corner of the object, as I.sub.1, the pixel acquired at time t.sub.2, i.e. the pixel corresponding to the top right corner of the object, as I.sub.2, and the pixel acquired at time t.sub.3, i.e. the pixel corresponding to the top left corner of the object, as I.sub.3. Each pixel has an x coordinate and a y coordinate in the image coordinate system. The width and height of the object in pixel coordinates can therefore be expressed as:
Width=I.sub.0(x)−I.sub.1(x)
Height=I.sub.1(y)−I.sub.2(y)
We further know that the image was acquired with a certain pixel clock denoted as Clk.sub.pixel. The acquisition time points of the four corner pixels can therefore be calculated as follows, starting from the baseline to:
(28)
(29) The locations of the four pixels in the image plane are now projected onto the world coordinate system, for example using the method discussed above with reference to
A′=A+ν*t.sub.2
The corrected location B′ of point B can be calculated as:
B′=B+ν*t.sub.1
The corrected location D′ of point D can be calculated as:
D′=D+ν*t.sub.3
The vector v in the above equations denotes the movement vector of the camera sensor as determined in step 102.
(30) Now that corrected locations of the four corners of the object have been calculated in the world coordinate system, the corrected locations are projected back onto the image plane in step 110. To achieve this projection, the inverse of the method shown above in reference to
(31) The method 100 now returns back to step 102 to newly determine speed and direction of movement of the camera sensor. Since the location of the corners has changed through the correction applied in step 110, the distance between camera and object will be different. It follows that the movement vector v will be different in the second iteration of the method. Based on the updated movement vector v, steps 104, 106, 108, and 110 are repeated. It is however expressly noted that, even though the movement vector v was newly calculated based on the corrected locations A′, B′, C′, and D′, the second (and any following) iteration of the method 100 still uses the original non-corrected locations of the four corner points A, B, C, and D in the world coordinate system to perform the correction in step 108.
(32) In step 112, a difference between the first compensated locations of each of the four corners of the object and the second compensated locations of each of the four corners is calculated. If this difference is smaller than a threshold value, the method ends. Otherwise, the method returns back to step 102 for a third iteration, resulting in third compensated locations of each of the four corners of the object, and so forth. The method iterates until the difference between the two most recent sets of compensated locations is below the threshold value or until a maximum number of iterations has been reached.
(33)
(34) The robot 18 may be configured to execute the computer-implemented method 100 as shown in
(35) Referring again to
(36) Robot 18 may be picking items from a shelf by itself and placing them in the tote 44, or it may be assisted by a local operator 50. The local operator 50, which is typically human, carries out the task of physically removing an ordered item from a shelf 12 and placing it on robot 18, for example, in tote 44. The robot 18 communicates the order to the local operator 50 via the tablet 48 (or laptop/other user input device), which the local operator 50 can read, or by transmitting the order to a handheld device used by the local operator 50.
(37) Upon receiving an order from the server system, the robot 18 proceeds to a first warehouse location, e.g. as shown in
(38) Upon reaching the correct location, the robot 18 parks itself in front of a shelf 12 on which the item is stored and waits for a local operator 50 to retrieve the item from the shelf 12 and place it in tote 44. If robot 18 has other items to retrieve it proceeds to those locations. The item(s) retrieved by robot 18 are then delivered to a packing station where they are packed and shipped.
(39) Embodiments of the present invention may be embodied in many different forms, including, but in no way limited to, computer program logic for use with a processor (e.g., a microprocessor, microcontroller, digital signal processor, or general purpose computer), programmable logic for use with a programmable logic device (e.g., a Field Programmable Gate Array (FPGA) or other PLD), discrete components, integrated circuitry (e.g., an Application Specific Integrated Circuit (ASIC)), or any other means including any combination thereof.
(40) Computer program logic implementing all or part of the functionality previously described herein may be embodied in various forms, including, but in no way limited to, a source code form, a computer executable form, and various intermediate forms (e.g., forms generated by an assembler, compiler, networker, or locator.) Source code may include a series of computer program instructions implemented in any of various programming languages (e.g., an object code, an assembly language, or a high-level language such as Fortran, C, C++, JAVA, or HTML) for use with various operating systems or operating environments. The source code may define and use various data structures and communication messages. The source code may be in a computer executable form (e.g., via an interpreter), or the source code may be converted (e.g., via a translator, assembler, or compiler) into a computer executable form.
(41) The computer program may be fixed in any form (e.g., source code form, computer executable form, or an intermediate form) either permanently or transitorily in a tangible storage medium, such as a semiconductor memory device (e.g., a RAM, ROM, PROM, EEPROM, or Flash-Programmable RAM), a magnetic memory device (e.g., a diskette or fixed disk), an optical memory device (e.g., a CD-ROM), a PC card (e.g., PCMCIA card), or other memory device. The computer program may be fixed in any form in a signal that is transmittable to a computer using any of various communication technologies, including, but in no way limited to, analog technologies, digital technologies, optical technologies, wireless technologies, networking technologies, and internetworking technologies. The computer program may be distributed in any form as a removable storage medium with accompanying printed or electronic documentation (e.g., shrink wrapped software or a magnetic tape), preloaded with a computer system (e.g., on system ROM or fixed disk), or distributed from a server or electronic bulletin board over the communication system (e.g., the Internet or World Wide Web).
(42) Hardware logic (including programmable logic for use with a programmable logic device) implementing all or part of the functionality previously described herein may be designed using traditional manual methods, or may be designed, captured, simulated, or documented electronically using various tools, such as Computer Aided Design (CAD), a hardware description language (e.g., VHDL or AHDL), or a PLD programming language (e.g., PALASM, ABEL, or CUPL).
(43) The embodiments of the invention described above are intended to be merely exemplary; numerous variations and modifications will be apparent to those skilled in the art. All such variations and modifications are intended to be within the scope of the present invention as defined in any appended claims.