Patent Description:
In current processes of painting liveries onto large aircraft, many steps are needed to mask, spray, cure, and unmask for each individual color. This process may take several days, which occupies a large paint hanger space and further delays delivery of an aircraft to an end customer or increases a downtime of an in-service aircraft getting repainted.

Inkjet printing allows for printing of even more complex liveries onto the large and curved surfaces of aircraft. However, moving the print head over large curved surfaces to create the intended images to be printed onto the aircraft requires accurate placement of the ink droplets. For example, an inkjet printer printing <NUM> dots per inch (DPI) requires placement of individual droplets within the accuracy of approximately ± <NUM>µin. This is important for the use of subtractive color mixing with mixing of base colors adjacent to each other to create different colors visible to an observer.

In small-scale inkjet printing processes, such as a home printer, the position of the substrate relative to the print head is controlled to a high degree. The print head is controlled in a relatively stiff enclosure, the substrate is a flat surface, such as paper, that is incrementally moved relative to the print head. Such constraints allow for high accuracy in the placement of individual ink droplets onto the substrate to produce high resolution, multi-color images onto the paper.

On the other hand, printing systems for painting large substrates, such as an aircraft, may include large scale manipulators, which tend to have limited print accuracy and flexibility, and print defects can arise without adequate compensation for positional offsets caused by vibrations and inaccurate print controls.

<CIT>, in accordance with its abstract, states a method for reducing visible artifacts among image pixels formed on recording media by a plurality of individually addressable recording channels includes operating the recording channels to form a plurality of image pixel arrangements, wherein each image pixel arrangement comprises a plurality of image pixel columns extending along a first direction. The image pixels columns in each image pixel arrangement are arranged along a second direction that intersects the first direction. The recording channels form a first image pixel arrangement on the recording media and overlap a first image pixel column with a second image pixel column by an amount along the second direction that is determined based at least on a misalignment along the first direction between two of the image pixel arrangements.

<CIT>, in accordance with its abstract states, a system for printing an image includes a robot, a printhead, a laser device, and a reference line sensor. The robot has at least one arm. The printhead is mounted to the arm and is movable by the arm over a surface along a rastering path while printing a new image slice over the surface. The laser device is configured to etch, during printing of the new image slice, a reference line into either the new image slice or into a basecoat at a location adjacent to the new image slice. The reference line sensor is configured to sense the reference line of an existing image slice and transmit a signal to the robot causing the adjustment of the printhead in a manner such that a side edge of the new image slice is aligned with the side edge of the existing image slice. <CIT>, in accordance with its abstract, states a system for printing an image, preferably a multicolor halftone image, onto at least one non-planar area of a surface of an object, for example a section of a body of a vehicle, includes an inkjet print head having nozzles, a robot, preferably an articulated robot, creating a primary movement, the primary movement including at least two printing paths of the inkjet print head being lateral to each other, and a device creating a secondary movement, the secondary movement being substantially perpendicular to the primary movement and causing the printing paths to laterally adjoin each other.

<CIT>, in accordance with its abstract, states a method and apparatus for applying coatings, such as in particular varnishes, to surfaces is provided. The apparatus includes a metering head that has at least one nozzle which can be actuated by a control signal. The method includes the steps of: moving a base having a surface that is to be coated along this surface relative to a metering head and/or moving the metering head relative to a surface of the base, and applying a fluid coating material to the surface through a nozzle in response to at least one control signal generated by a computer.

<CIT>, in accordance with its abstract, states a method for correcting misalignment between a plurality of columns of color ink jetting nozzle arrays of a color printhead during printing with a hand held printer includes determining a misdirection angle of motion of the plurality of columns of color ink jetting nozzle arrays relative to a desired direction of motion of the hand operated printer; determining for each of the plurality of columns of color ink jetting nozzle arrays a respective usable nozzles subset to be used in printing a swath, based on the misdirection angle; determining an amount of shifting of at least one of the respective usable nozzles subsets to adjust for non-perpendicularity of the color ink jetting nozzle arrays relative to the desired direction of motion, based on the misdirection angle; and shifting the respective usable nozzles subset for a respective column based on the amount determined.

In view of the above, a printing system is provided comprising a print head including a plurality of ink nozzles; an actuator configured to move the print head relative to a substrate; a print head position sensing system configured to detect an actual position of the print head relative to the substrate; and a controller. The controller is configured to: receive the actual position of the print head detected by the print head position sensing system corresponding to a target print head position; determine a positional offset between the actual position and the target print head position; generate a nozzle firing pattern based on the positional offset; and control the print head to print the nozzle firing pattern at the target print head position using the plurality of ink nozzles. The controller includes a print client preprocessor configured to generate the nozzle firing pattern; and a print head controller configured to receive the nozzle firing pattern, in response, send a nozzle command signal to the print head to trigger ink ejection of at least one of the plurality of ink nozzles. The print client preprocessor is further configured to generate the nozzle firing pattern, at least by identifying a plurality of predetermined candidate positional offsets; generating a respective offset nozzle command for each of the plurality of predetermined candidate positional offsets; and sending each of the respective offset nozzle commands to the print head controller in a nozzle command array. The print head controller is further configured to control the print head to print the nozzle firing pattern at least by selecting an offset nozzle command from the nozzle command array based at least on the nozzle command signal and the determined positional offset; and sending the selected offset nozzle command signal to the print head to control the print head to print the nozzle firing pattern at the target print head position using the plurality of ink nozzles.

In view of the above issues, as shown in <FIG>, a printing system <NUM> is described in accordance with a first example embodiment of the present disclosure. The printing system <NUM> comprises a print head <NUM> including a plurality of ink nozzles <NUM>; an actuator <NUM> configured to move the print head <NUM> relative to a substrate <NUM>; a print head position sensing system <NUM> configured to detect an actual position <NUM> of the print head <NUM> relative to the substrate <NUM>; and a controller <NUM> configured to: receive the actual position <NUM> of the print head <NUM> detected by the print head position sensing system <NUM> corresponding to a target print head position <NUM>; determine a positional offset between the actual position <NUM> and the target print head position <NUM>; generate a nozzle firing pattern <NUM> based on the positional offset; and control the print head <NUM> to print the nozzle firing pattern <NUM> at the target print head position <NUM> using the plurality of ink nozzles <NUM>.

The print head position sensing system <NUM> can comprise an optical camera 18a. Additionally or alternatively, the print head position sensing system <NUM> can also include an optical camera 18c and an inertial measurement unit (IMU) 18b disposed on the print head <NUM>.

In this embodiment, the controller <NUM> includes a print head controller <NUM> and an actuator controller <NUM>. The controller <NUM> can include real-time and/or offline (asynchronous) controller components. The applicator system <NUM> includes the print head <NUM>, print head controller <NUM>, and the actuator controller <NUM>. The print head <NUM> is mounted to an actuator <NUM>. The print head <NUM> and the actuator <NUM> can be supported by a support <NUM>. In this embodiment and subsequent embodiments, the support <NUM> can be, for example, a movable support framework including a gantry or a robotic manipulator, movements of which are controlled by the actuator controller <NUM>. A 3D model <NUM> outputted by a 3D modeling program <NUM> is inputted into a print client program <NUM> executed by a real-time control component or an offline control component of the controller <NUM>. The offline control component can be connected to the controller <NUM> by a communications link. The print client program <NUM> includes a print client preprocessor <NUM> which processes the inputted 3D model <NUM>, then generates and outputs print data <NUM> including a trajectory command signal <NUM> and a nozzle firing pattern <NUM> comprising nozzle command signals 32a. The print client preprocessor <NUM> sends the trajectory command signal <NUM> to the actuator controller <NUM> via a communications link <NUM>. In response, the actuator controller <NUM> controls the actuator <NUM> to move the print head <NUM> to print the nozzle firing pattern <NUM> at the target print head position <NUM> using the plurality of ink nozzles <NUM>. The communications link <NUM> can take the form of network connection, bus, interconnect, or other direct or parallel serial data connection. The network connection can take the form of a local area network (LAN), wide area network (WAN), wired network, wireless network, personal area network, or a combination thereof, and can include the Internet. Although five ink nozzles 14a-e are depicted in <FIG>, the number of ink nozzles in the print head <NUM> is not particularly limited.

The print client preprocessor <NUM> sends the nozzle firing pattern <NUM> including nozzle command signals 32a to the print head controller <NUM> via the communications link <NUM>. A positional offset determination module 40a of the print head controller <NUM> can determine a positional offset between the actual position <NUM> and the target print head position <NUM>, and generate a nozzle firing pattern <NUM> based on the positional offset. Alternatively, a positional offset determination module 28a of the print client preprocessor <NUM> can determine the positional offset between the actual position <NUM> and the target print head position <NUM>, and generate the nozzle firing pattern <NUM> based on the positional offset. The print head controller <NUM> sends an ink fire impulse <NUM> to the ink nozzles <NUM> in control cycles, and sends the nozzle firing pattern <NUM> to the ink nozzles <NUM> synchronized with the control cycles at which the ink fire impulse <NUM> is sent.

<FIG> illustrates a print head printing on a substrate at various times, in accordance with an embodiment of the present disclosure. In particular, <FIG> illustrates the sequential view <NUM> of the print head <NUM> at various sequential times (<NUM>-<NUM>) along the timeline <NUM>. The print head <NUM> includes a plurality of ink nozzles 14a-e. The ink nozzles 14a-e are arranged in a linear array. The print head <NUM> is printing on the substrate <NUM>, which is depicted with a grid <NUM> overlaid on top of the substrate <NUM>. The grid <NUM> is shown for illustrative purposes and may not actually appear on the substrate <NUM>. The desired image comprises the center row (running left to right as depicted in <FIG>) of the grid <NUM> to receive ink droplets from the print head <NUM>. An actuator <NUM> (not depicted) moves the print head <NUM> along the desired print head path. However, due to movements (e.g., vibrations), there may be a positional offset between an actual position of the print head <NUM> and the desired print head path at various times.

In the various depictions at times <NUM>-<NUM>, a circle with dots indicates an ink droplet being deposited by the ink nozzle and a solid black circle indicates an ink droplet that has been deposited on the substrate <NUM> at a previous time.

At a first time <NUM>, the print head <NUM> is centered above the grid <NUM>. Thus, the ink nozzle 14c is aligned with the center row of the grid <NUM> and deposits the ink droplet 54a. At the second time <NUM>, the print head <NUM> has advanced to the second column in the grid <NUM>, and the print head <NUM> is triggered to deposit an ink droplet for the second column. However, at this time, the print head <NUM> is no longer centered above the grid <NUM>. As such, the ink nozzle 14d is aligned with the center row that is intended to receive the ink droplet. At this second time <NUM>, the ink droplet 54a from the first time <NUM> now appears as the ink droplet 54e (as a black circle) and the ink droplet 54b is being deposited onto the substrate <NUM>.

At a third time <NUM>, the print head <NUM> has now advanced to the third column of the grid <NUM>, and is triggered to deposit an ink droplet for the third column. However, at this time, the print head <NUM> has shifted rightward relative to the substrate <NUM>. As such, the ink nozzle 14b now deposits the ink droplet 54c onto the substrate. At a fourth time <NUM>, the print head <NUM> is now centered above the grid <NUM>, and the ink nozzle 14c deposits the ink droplet 54d.

At a fifth time <NUM>, the print head <NUM> has completed printing four ink droplets along the center row of the grid <NUM> despite moving left to right relative to the grid <NUM> as it advanced along the desired print head path. Here, we can see the ink droplet 54e deposited as the ink droplet 54a at the first time <NUM>, the ink droplet 54f deposited at the second time <NUM> as the ink droplet 54b, the ink droplet <NUM> deposited at the third time <NUM> as ink droplet 54c, and the ink droplet <NUM> deposited at the fourth time <NUM> as ink droplet 54d.

At each of the times <NUM>-<NUM>, the controller <NUM> generated nozzle command signals 24a comprising the activation instructions to selectively activate the ink nozzles <NUM> to deposit the ink droplets 54e, 54f, <NUM>, and <NUM> on the substrate <NUM>. The activation instructions selectively instruct the individual ink nozzles <NUM> to either deposit an ink droplet or not to deposit an ink droplet as the print head <NUM> passes each column of the grid <NUM>.

Responsive to determining a positional offset between the actual position <NUM> of the print head <NUM> and the target print head position <NUM> in the desired print head path, the controller generates a nozzle firing pattern <NUM> based on the positional offset, which includes offset nozzle commands to linearly shift the activation instructions along the ink nozzles <NUM> along the linear array. Thus, when it is determined that the print head <NUM> has shifted leftward relative to the substrate <NUM> at the second time <NUM>, the print head controller <NUM> sends to the print head <NUM> an offset nozzle command that linearly shifts the activation instructions along the linear array from the ink nozzle 14c to the ink nozzle 14d.

A similar, but opposite, offset and shift occurs at the third time <NUM> with the ink nozzle 14b depositing the ink droplet 54c. The print head controller <NUM> can also generate additional offset nozzle command signals 24a that linearly shift the activation instructions along the linear array by more than a single ink nozzle 14a. Such larger shifts can be selected for activation based on detecting a larger positional offset between the actual position <NUM> of the print head <NUM> and target print head position <NUM> in the desired print head path.

Referring to <FIG>, a printing system <NUM> is described in accordance with a second example embodiment of the present disclosure. The printing system <NUM> comprises a print head <NUM> including a plurality of ink nozzles <NUM>; an actuator <NUM> configured to move the print head <NUM> relative to a substrate <NUM>; a print head position sensing system <NUM> configured to detect an actual position <NUM> of the print head <NUM> relative to the substrate <NUM>; and a controller <NUM> configured to: receive the actual position <NUM> of the print head <NUM> detected by the print head position sensing system <NUM> corresponding to a target print head position <NUM>; determine a positional offset between the actual position <NUM> and the target print head position <NUM>; and generate a nozzle firing pattern <NUM> based on the positional offset. The print head controller <NUM> is configured to send a nozzle command signal 124a to the print head <NUM> to trigger ink ejection of at least one of the plurality of ink nozzles <NUM> to control the print head <NUM> to print the nozzle firing pattern <NUM> at the target print head position <NUM> using the plurality of ink nozzles <NUM>.

The print head position sensing system <NUM> can comprise an optical camera 118a. Additionally or alternatively, the print head position sensing system <NUM> can also include an optical camera 118c and an IMU 118b disposed on the print head <NUM>. Although six ink nozzles 114a-e are depicted in <FIG>, the number of ink nozzles in the print head <NUM> is not particularly limited. The controller <NUM> includes a print head controller <NUM> and an actuator controller <NUM>. The applicator system <NUM> includes the print head <NUM>, print head controller <NUM>, and the actuator controller <NUM>. The print head <NUM> is mounted to an actuator <NUM>. The print head <NUM> and the actuator <NUM> can be supported by a support <NUM>. A 3D model <NUM> outputted by a 3D modeling program <NUM> is inputted into a print client program <NUM> executed by the controller <NUM>. The print client program <NUM> can be executed on an offline control component that is connected to the controller <NUM> by a communications link. The print client program <NUM> includes a print client preprocessor <NUM> which processes the inputted 3D model <NUM>, then generates and outputs print data <NUM> including a trajectory command signal <NUM> and a nozzle firing pattern <NUM> comprising nozzle command signals 132a. The print client preprocessor <NUM> sends the trajectory command signal <NUM> to the actuator controller <NUM> via a communications link <NUM>. In response, the actuator controller <NUM> controls the actuator <NUM> to move the print head <NUM> to print the nozzle firing pattern <NUM> at the target print head position <NUM> using the plurality of ink nozzles <NUM>.

The print head controller <NUM> is configured to generate the nozzle firing pattern <NUM> by, at least: intercepting the nozzle command signal 132a; and applying a bit-shift on the nozzle command signal 132a based at least on the determined positional offset to generate a bit-shifted nozzle command signal 124a. The print head controller <NUM> further controls the print head <NUM> to print the nozzle firing pattern <NUM> by, at least, sending the bit-shifted nozzle command signal 124a to the print head <NUM> to control the print head <NUM> to print the nozzle firing pattern <NUM> at the target print head position <NUM> using the plurality of ink nozzles <NUM>.

The print client preprocessor <NUM> sends the nozzle firing pattern <NUM> including nozzle command signals 132a to the print head controller <NUM> via the communications link <NUM>. The initial print head control logic 140b of the print head controller <NUM> receives the nozzle firing pattern <NUM> and relays the nozzle firing pattern to the adaptive nozzle control logic 140c of the print head controller <NUM>. The adaptive nozzle control logic 140c includes a bit-shift module 140d which generates a modified nozzle firing pattern <NUM> based on a positional offset determined by the positional offset determination module 140a of the print head controller <NUM>, which receives the actual position <NUM> of the print head <NUM> and subsequently determines the positional offset between the actual position <NUM> and the target print head position <NUM>. The bit-shift module 140d applies a bit-shift on the nozzle command signal 132a based at least on the determined positional offset to generate a bit-shifted nozzle command signal 124a. Referring to <FIG>, the bit-shift module can apply a left shift offset 160a, a zero offset with no shifts to the nozzle command signals 132a, or a right shift offset 160b. In the left shift offset 160a, the bit pattern in the set of nozzle command signals 132a is shifted leftward relative to the print head <NUM> to compensate for the determined positional offset, and generate a set of leftwardly bit-shifted nozzle command signals 124a1. In the right shift offset 160b, the bit pattern in the set of nozzle command signals 132a is shifted rightward relative to the print head <NUM> to compensate for the determined positional offset, and generate a set of rightwardly bit-shifted nozzle command signals 124a2.

<FIG> illustrates a series of processes in printing, in accordance with an embodiment of the present disclosure. In particular, <FIG> depicts the series <NUM> of processes in printing. The series <NUM> can be carried out by the printing system <NUM>. Initial image data <NUM> included in the 3D model <NUM> can be an image which includes a plurality places where ink is to be deposited (where black squares are) and a plurality of places where ink is not to be deposited (where white squares are). The initial image data <NUM> can also indicate various columns and rows. The initial image data <NUM> can be processed and rasterized by the print client preprocessor <NUM> into print data <NUM>, which can be a bitmap with a '<NUM>' indicating ink is to be deposited and a '<NUM>' indicating no ink is to be deposited.

Here, in column '<NUM>' (C1) and row '<NUM>' (R1), a black square is present, indicating ink is to be deposited to produce this portion of the image. In C2/R2, a white square is present, indicating that no ink is to be deposited there to produce this portion of the image. Thus, we can see for C1/R1 of the print data <NUM> of the black square, a '<NUM>' is represented in the bitmap of print data <NUM> for this location. Similarly, a '<NUM>' is represented for the white square of C1/R2 because it is represented by the white square in the initial image data <NUM>. Other depicted images, bitmaps, and buffers disclosed throughout utilize similar conventions.

The print data <NUM> is stored in the buffer memory 140e of the print head controller <NUM>. Responsive to the positional offset determination module 140a determining the positional offset, the bit-shift module 140d reads a data row <NUM> from the buffer memory 140e. The data row <NUM> corresponds to one set of nozzle command signals 132a for the ink nozzles <NUM> of the print head <NUM>. The bit-shift module 140d applies a bit-shift <NUM> on the set of nozzle command signals 132a based on the determined positional offset to generate a set of bit-shifted nozzle command signals 124a, which are transferred to memory of the print head <NUM> to activate the ink nozzles <NUM> to deposit ink on the substrate <NUM>. In this example, the bit-shift <NUM> applied on the set of nozzle command signals 132a is a left shift offset 160a. The bit-shift <NUM> shifts the bit pattern in the data row <NUM> by the number of bits corresponding to the determined positional offset. The vacant bit positions are filled with non-activation instructions 124ab.

The actuator <NUM> moves the print head <NUM> relative to the substrate <NUM> along the desired print head path. Here, the print head <NUM> includes six ink nozzles <NUM>. For clarity, only ink nozzle 114a, depicted at the bottom of the linear array of the print head <NUM>, and the ink nozzle 114f, depicted at the top of the linear array of the print head <NUM>, are labeled. The ink nozzles 114b, 114c, 114d, and 114e are sequentially located between these labeled ink nozzles 114a and 114f.

When triggered to deposit ink for the second row (R2) by an ink fire impulse <NUM> received from the print head controller <NUM>, the set of nozzle command signals 124a stored in memory of the print head <NUM> is executed. Here, a '<NUM>' is in the ink nozzle 114a, indicating that the ink nozzle 114a will deposit ink onto the substrate <NUM>. The print command then continues to alternate, ending with a '<NUM>' for the ink nozzle 114f, indicating that the ink nozzle 114f will not deposit ink when triggered. The data row <NUM> is removed from the buffer memory 140e, and the print head <NUM> subsequently sends an encoder signal <NUM> to the print head controller <NUM>, thereby triggering the start of a new print cycle.

Referring to <FIG>, a printing system <NUM> is described in accordance with a third example embodiment of the present disclosure. The printing system <NUM> comprises a print head <NUM> including a plurality of ink nozzles <NUM>; an actuator <NUM> configured to move the print head <NUM> relative to a substrate <NUM>; a print head position sensing system <NUM> configured to detect an actual position <NUM> of the print head <NUM> relative to the substrate <NUM>; and a controller <NUM> configured to: receive the actual position <NUM> of the print head <NUM> detected by the print head position sensing system <NUM> corresponding to a target print head position <NUM>; determine a positional offset between the actual position <NUM> and the target print head position <NUM>; and generate a nozzle firing pattern <NUM> based on the positional offset. The print head controller <NUM> is configured to send a nozzle command signal 224a to the print head <NUM> to trigger ink ejection of at least one of the plurality of ink nozzles <NUM> to control the print head <NUM> to print the selected nozzle firing pattern <NUM> at the target print head position <NUM> using the plurality of ink nozzles <NUM>.

The print head position sensing system <NUM> can comprise an optical camera 218a. Additionally or alternatively, the print head position sensing system <NUM> can also include an optical camera 218c and an IMU 218b disposed on the print head <NUM>. Although five ink nozzles 214a-e are depicted in <FIG>, the number of ink nozzles in the print head <NUM> is not particularly limited. The controller <NUM> includes a print head controller <NUM> and an actuator controller <NUM>. The applicator system <NUM> includes the print head <NUM>, print head controller <NUM>, and the actuator controller <NUM>. The print head <NUM> is mounted to an actuator <NUM>. The print head <NUM> and the actuator <NUM> can be supported by a support <NUM>. A 3D model <NUM> outputted by a 3D modeling program <NUM> is inputted into a print client program <NUM> executed by the controller <NUM>. The print client program <NUM> can be executed on an offline control component that is connected to the controller <NUM> by a communications link. The print client program <NUM> includes a print client preprocessor <NUM> which processes the inputted 3D model <NUM>, then generates and outputs print data <NUM> including a trajectory command signal <NUM> and a nozzle command array <NUM> comprising nozzle command signals 232a, including the nozzle firing pattern <NUM> which is selected by the print head controller <NUM>. The print client preprocessor <NUM> sends the trajectory command signal <NUM> to the actuator controller <NUM> via a communications link <NUM>. In response, the actuator controller <NUM> controls the actuator <NUM> to move the print head <NUM> to print the selected nozzle firing pattern <NUM> at the target print head position <NUM> using the plurality of ink nozzles <NUM>.

The print client preprocessor <NUM> is further configured to generate the nozzle firing pattern <NUM>, at least by identifying a plurality of predetermined candidate positional offsets 228a; executing a multiple nozzle command generation module 228b to generate a respective offset nozzle command signal 232a for each of the plurality of predetermined candidate positional offsets; and sending each of the respective offset nozzle command signals 232a to the print head controller <NUM> as a nozzle command array <NUM>.

The nozzle command array <NUM> is stored in the buffer memory 240b of the print head controller <NUM>. The print head controller <NUM> is configured to receive the nozzle command array (nozzle firing patterns) 232a sent by the print client preprocessor <NUM> to the print head controller <NUM> via the communications link <NUM>. The print head controller <NUM> then controls the print head <NUM> to print the nozzle firing pattern <NUM> at least by selecting an offset nozzle command signal 224a from the nozzle command array <NUM> based at least on the nozzle command signal 232a and the determined positional offset; and sending the selected offset nozzle command signal 224a to the print head <NUM> to control the print head <NUM> to print the nozzle firing pattern <NUM> at the target print head position <NUM> using at least one of the plurality of ink nozzles <NUM>. The print head controller <NUM> sends an ink fire impulse <NUM> to the ink nozzles <NUM> in control cycles, and sends the nozzle firing pattern <NUM> to the ink nozzles <NUM> synchronized with the control cycles at which the ink fire impulse <NUM> is sent. Like the second example embodiment, the plurality of predetermined candidate positional offsets of the third example embodiment can include a left shift offset, zero offset, and a right shift offset; and the nozzle command array <NUM> is stored in a buffer memory 240b of the print head controller <NUM>.

The print head controller <NUM> can be configured with an adaptive nozzle control logic 240c executing an offset nozzle command selection module 240d which receives the nozzle command array <NUM>. A positional offset determination module 240a of the adaptive nozzle control logic 240c receives the trajectory command signal <NUM> and the actual position <NUM> of the print head <NUM>, and subsequently determines the positional offset between the actual position <NUM> and the target print head position <NUM>. The positional offset determination module 240a outputs the positional offset to the offset nozzle command selection module 240d, which selecting an offset nozzle command signal 224a from the nozzle command array <NUM> based at least on the nozzle command signal 232a and the determined positional offset.

<FIG> illustrates a series of processes <NUM> in printing, in accordance with an embodiment of the present disclosure, which include processing of an image data <NUM> to print via a multiplex approach.

Here, the initial image data <NUM> included in the 3D model <NUM> is similar to initial image data <NUM> of <FIG>, but for clarity, only includes the columns C1-C4 and the rows R1-R4. The initial image data <NUM> can be processed and rasterized by the print client preprocessor <NUM> into print data <NUM>, which can be a bitmap with a '<NUM>' indicating ink is to be deposited and a '<NUM>' indicating no ink is to be deposited.

Next, the print client preprocessor <NUM> generates a plurality of different nozzle command signals 232aa, 232ab, 232ac for control of the ink nozzles <NUM>. Here, the nozzle command signals 232aa, 232ab, 232ac include six columns, whereas the initial image data <NUM> only includes four columns. The additional two columns in the nozzle command signals 232aa, 232ab, 232ac provide for shifting the activation instructions for the ink nozzles <NUM> rightward or leftward relative to the print head <NUM>. A nozzle command signal 232aa is generated, for example, by the print client preprocessor <NUM> that generates activation instructions for the ink nozzles <NUM>. Here, the ink nozzles <NUM> include those ink nozzles 214b-e that map to the columns <NUM>-<NUM>. Ink nozzles <NUM> mapping to columns <NUM> and <NUM> are vacant and are filled with non-activation instructions, or a '<NUM>'.

For each row in the print data <NUM>, the print client preprocessor <NUM> generates zero offset nozzle command signals 232aa, right shift offset nozzle command signals 232ab, and left shift offset nozzle command signals 232ac. In the zero offset nozzle command signals 232aa, no shifts are applied. In the right shift offset nozzle command signals 232ab, the bit pattern in the set of nozzle command signals 232aa is shifted rightward relative to the print head <NUM>.

The print client preprocessor <NUM> then combines the nozzle command signals 232aa, 232ab, and 232ac into a nozzle command array <NUM>. In a first row (R1) of the nozzle command array <NUM> are the activation instructions from the first row (R1) from the right shift offset nozzle command signal 232ab. In the second row (R2) of the nozzle command array <NUM> are the activation instructions from the first row (R1) from the zero offset nozzle command signal 232aa. In the third row (R3) of the nozzle command array <NUM> are the activation instructions from the first row (R1) of the left shift offset nozzle command signal 232ac. Thus, each of these first three rows R1-R3 in the nozzle command array <NUM> all are activation instructions for printing the first row (R1) of the image data <NUM>.

The nozzle command array <NUM> is sent by the print client preprocessor <NUM> to the print head controller <NUM>, which stores the nozzle command array <NUM> in buffer memory 240b. Responsive to determining no positional offset between the actual position <NUM> of the print head <NUM> and the target print head position <NUM>, the print head controller <NUM> selects the zero offset nozzle command signals 232aa to send to the print head <NUM> to trigger ink ejection of at least one of the plurality of ink nozzles <NUM> to print the first row (R1) of the initial image data <NUM>. Responsive to determining a right shift positional offset, the print head controller <NUM> selects the right shift offset nozzle command signals 232ab to send to the print head <NUM> to trigger ink ejection of at least one of the plurality of ink nozzles <NUM> to print the first row (R1) of the initial image data <NUM>. Responsive to determining a left shift positional offset, the print head controller <NUM> selects the left shift offset nozzle command signals 232ac to send to the print head <NUM> to trigger ink ejection of at least one of the plurality of ink nozzles <NUM> to print the first row (R1) of the initial image data <NUM>. The non-selected nozzle command signals 232aa, 232ab, 232ac for that row of the image data <NUM> can be discarded from the buffer memory 240b.

In some embodiments, the image data <NUM> includes multiple rows R1-R4. As discussed above, the first row of the image data <NUM> can be processed and placed into the buffer memory 240b. Here, with right-offset nozzle command signal 232ab, a left-offset nozzle command signal 232ac, and a nozzle command signal 232aa, the first three rows (R1-R3) of the buffer memory 240b are each associated with the first row (R1) of the image. For a second row of the image (R2), this additional row can also be processed and generate the zero offset nozzle command signals 232aa and the offset nozzle command signals 232ab, 232ac. Likewise, the next three rows (R4-R6) of the buffer memory 240b include activation instructions for printing the second row (R2) of the image data <NUM>.

s shown in <FIG>, the generation of the zero offset nozzle command signals 232aa, the right shift offset nozzle command signals 232ab, and the left shift offset nozzle command signals 232ac for each of the four rows (R1-R4) of the image data <NUM> results in a nozzle command array <NUM> that includes twelve total rows (R1-R12). Only one third of the activation instructions in the nozzle command array <NUM> are utilized, with the remaining two thirds of the activation instructions being discard because only one of the three sets of offset nozzle command signals 232aa, 232ab, 232ac can be selected for each row of the image data <NUM>. After selecting one of the three sets of offset nozzle command signals 232aa, 232ab, 232ac for the first row of image data based on the determined positional offset of the print head <NUM>, the non-selected nozzle commands are discarded, and the print head controller <NUM> then selects one of the next nozzle commands to activate for the subsequent row of image data <NUM>.

In some embodiments, the print head controller <NUM> can be configured to operate a print head <NUM> that includes a plurality of different colors. Each color can have its own ink nozzles <NUM> arranged in a separate linear array. A separate set of nozzle command signals 232aa and offset nozzle command signals 232ab, 232ac can be generated for each color, and activation instructions from the nozzle command can be placed in separate buffers different from the buffer memory 240b for each of the different colors. The print head controller <NUM> can be configured to activate the ink nozzles <NUM> for the different colors independently.

Referring to <FIG>, a printing system <NUM> is described in accordance with a fourth example embodiment of the present disclosure. The printing system <NUM> comprises a print head <NUM> including a plurality of ink nozzles <NUM>; an actuator <NUM> configured to move the print head <NUM> relative to a substrate <NUM>; a print head position sensing system <NUM> configured to detect an actual position <NUM> and an actual orientation <NUM> of the print head <NUM> relative to the substrate <NUM>; and a controller <NUM> configured to: receive the actual position <NUM> and the actual orientation <NUM> of the print head <NUM> detected by the print head position sensing system <NUM> corresponding to a target print head position and orientation <NUM>; determine a positional offset between the actual position <NUM> and the target print head position and orientation <NUM>; and generate a nozzle firing pattern <NUM> based on the positional offset. The print head controller <NUM> is configured to send a nozzle command signal 324a to the print head <NUM> to trigger ink ejection of at least one of the plurality of ink nozzles <NUM> to control the print head <NUM> to print the nozzle firing pattern <NUM> at the target print head position and orientation <NUM> using the plurality of ink nozzles <NUM>.

The print head position sensing system <NUM> can comprise an optical camera 318a. Additionally or alternatively, the print head position sensing system <NUM> can also include an optical camera 318c and an IMU 318b disposed on the print head <NUM>. Although five ink nozzles 314a-e are depicted in <FIG>, the number of ink nozzles in the print head <NUM> is not particularly limited. The controller <NUM> includes a print head controller <NUM> and an actuator controller <NUM>. The applicator system <NUM> includes the print head <NUM>, print head controller <NUM>, and the actuator controller <NUM>. The print head <NUM> is mounted to an actuator <NUM>. The print head <NUM> and the actuator <NUM> can be supported by a support <NUM>. A 3D model <NUM> outputted by a 3D modeling program <NUM> is inputted into a print client program <NUM> executed by the controller <NUM>. The print client program <NUM> can be executed on an offline control component that is connected to the controller <NUM> by a communications link. The print client program <NUM> includes a print client preprocessor <NUM> which processes the inputted 3D model <NUM>, then generates and outputs print data <NUM> including a trajectory command signal <NUM> and a rasterized image <NUM> which is a nozzle firing pattern including nozzle command signals 332a. The print client preprocessor <NUM> sends the trajectory command signal <NUM> to the actuator controller <NUM> via a communications link <NUM>. In response, the actuator controller <NUM> controls the actuator <NUM> to move the print head <NUM> to print the nozzle firing pattern <NUM> at the target print head position and orientation <NUM> using the plurality of ink nozzles <NUM>.

The print head position sensing system <NUM> is further configured to detect an actual orientation <NUM> of the print head <NUM> relative to the substrate <NUM>; and the print head controller <NUM> is further configured to: generate the nozzle firing pattern <NUM> by, at least: receiving a rasterized image <NUM>; generating a pixel mask 340d based on the actual position <NUM>, actual orientation <NUM>, and a determined positional offset; and geometrically transforming the rasterized image <NUM> into the pixel mask 340d, each pixel in the pixel mask 340d corresponding to a nozzle of the plurality of ink nozzles <NUM>. The print head controller <NUM> controls the print head <NUM> to print the nozzle firing pattern <NUM> by, at least: selecting an offset nozzle command signal 324a corresponding to the pixel mask 340d; and sending the selected offset nozzle command signal 324a to the print head <NUM> to control the print head <NUM> to print the nozzle firing pattern <NUM> at the target print head position and orientation <NUM> using the plurality of ink nozzles <NUM>. The print head controller <NUM> sends an ink fire impulse <NUM> to the ink nozzles <NUM> in control cycles, and sends the nozzle firing pattern <NUM> to the ink nozzles <NUM> synchronized with the control cycles at which the ink fire impulse <NUM> is sent.

The print head controller <NUM> can be configured with an adaptive nozzle control logic 340b executing a geometric transformation module 340c which uses the pixel mask 340d to geometrically transform the received rasterized image <NUM>. A positional offset determination module 340a of the adaptive nozzle control logic 340b receives the trajectory command signal <NUM>, the actual orientation <NUM>, and the actual position <NUM> of the print head <NUM>, and subsequently determines the positional offset between the actual position <NUM> and the actual orientation <NUM> and the target print head position and orientation <NUM>. The positional offset determination module 240a outputs the positional offset to the geometric transformation module 340c, which generates the pixel mask 340d based on the determined positional offset. Referring to <FIG>, the pixel mask 340d, comprising a grid <NUM> of pixel locations, is generated having a tilt and a position corresponding to the actual position <NUM> and actual orientation <NUM>; and the rasterized image <NUM> is geometrically transformed into the pixel mask 340d by superimposing the pixel mask 340d onto the rasterized image <NUM>, and filling a pixel location of the grid <NUM> when the pixel location overlaps a filled pixel of the rasterized image <NUM>. The filled pixel mask 340d is then used as the nozzle firing pattern <NUM> which is sent to the print head <NUM> to be printed on the substrate <NUM>.

<FIG> illustrates a print head <NUM> printing on a substrate at various positions and times, in accordance with the fourth example embodiment of the present disclosure. In particular, <FIG> depicts the view <NUM> having a print head <NUM> printing on the substrate <NUM> at various times, each time having a different advance, transfer, and tilt position of the print head <NUM>. Such aspects can be used to print via a geometrical-transformation approach. The print head position sensing system <NUM> can be configured to determine an advance 346x, a transfer 346y, and a tilt 346θ as part of determining the actual position <NUM> and actual orientation <NUM> of the print head <NUM>.

In the view <NUM>, a grid <NUM> is overlaid on the substrate <NUM> to depict locations on the substrate <NUM> for purposes of clarity. In actuality, a grid <NUM> need not be overlaid onto the actual substrate <NUM>, as it is simply depicted in the view <NUM> for purposes of explanation.

The various timelines graph the advance, transfer, and tilt at times <NUM>, <NUM>, <NUM>, <NUM>, and <NUM>. At the time <NUM>, the print head <NUM> includes no advance, transfer, or tilt, with each value being graphed at <NUM>. For purposes of convention, the x-direction extends from left to right along the grid <NUM>, the y-direction extends up and down along the grid <NUM>, and the tilt is a measure of angle of the print head <NUM>.

As before, the print head <NUM> includes a plurality of ink nozzles <NUM> in a linear array. Here, the first ink nozzle 314a is depicted at the top, with each subsequent ink nozzle <NUM> in the linear array following, with the final ink nozzle 314e at the bottom. Because each ink nozzle <NUM> is fixed within the print head, individual locations of the ink nozzles in the plurality of ink nozzles <NUM> can be determined based on the position and orientation <NUM> of the print head <NUM>.

At time <NUM>, the print head <NUM> deposits ink droplets on each of the first three locations in the grid <NUM>: the top, center, and bottom positions of the first up-down column of the grid <NUM>. Because there is no advance, transfer, or tilt error, the print head controller <NUM> is able to map each of the activation instructions to the ink nozzles 14b, 14c, and 14d to deposit ink onto the substrate <NUM>, as indicated by the circles filled with ink droplets 354a, 354b, and 354c.

Near time '<NUM>', the print head controller <NUM> is triggered to deposit ink onto the substrate <NUM>. At this moment, the print head <NUM> has advanced in the x-direction and transferred in the y-direction, as indicated by the positive values graphed just before the time '<NUM>'. However, the print head <NUM> also has tilted as indicated by the negative measurement of the tilt 346θ. As seen in the depiction of the print head <NUM>, only the ink nozzle 314b correlates to the topmost location of the second up-down column of the grid <NUM>. As such, the mapped nozzle command only includes an activation instruction for the ink nozzle 314b to deposit ink. Also shown near time '<NUM>' are the ink droplets 354a, 354b, and 354c (not labeled for clarity) that were deposited at time '<NUM>' and now appear as black circles.

Near time '<NUM>', the print head controller <NUM> is configured to deposit the ink droplets 354e and 354f via the ink nozzles 314c and 314d, respectively. The ink droplet 354e is located in the middle of the second column of the grid <NUM> and the ink droplet 354f is located in the bottom of the second column of the grid <NUM>. Because the top of the second column already received the ink droplet 354d near time '<NUM>', the ink nozzle 314b receives a non-activation command signal 356a, indicated by a circle filled with a cross hatch.

Near time '<NUM>', the print head <NUM> continues to advance, and has a <NUM> transfer 346y. However, the print head <NUM> now has an opposite tilt as that depicted near time '<NUM>'. As such, only the ink nozzle 314b is aligned with the center position of the third column of the grid <NUM>. As such, the print head controller <NUM> maps the nozzle command from the buffer memory to an activation instruction associated with the ink nozzle 314b to deposit the ink droplet <NUM>. Also shown in the view of the print head <NUM> near time '<NUM>' is the ink droplet 354d deposited near time '<NUM>' and the ink droplets 354e and 354f deposited near time '<NUM>'. Each of these ink droplets are now depicted as black circles.

Near time '<NUM>', the process repeats to deposit ink into the third column of the grid <NUM>. Here, the middle column has already received the ink droplet <NUM> near time '<NUM>' and thus receives the non-activation command signal 356b for the ink nozzle 314b, whereas the ink nozzles 314a and 314c each receive activation instructions to deposit ink droplets <NUM> and 354i, respectively, into the top and bottom positions of the third column of the grid <NUM>.

Referring to <FIG>, a printing system <NUM> is described in accordance with a fifth example embodiment of the present disclosure. The printing system <NUM> comprises a print head <NUM> including a plurality of ink nozzles <NUM>; an actuator <NUM> configured to move the print head <NUM> relative to a substrate <NUM>; a print head position sensing system <NUM> configured to detect an actual position <NUM> and an actual orientation <NUM> of the print head <NUM> relative to the substrate <NUM>; and a controller <NUM> configured to: receive the actual position <NUM> and the actual orientation <NUM> of the print head <NUM> detected by the print head position sensing system <NUM> corresponding to a target print head position and orientation <NUM>; determine a positional offset between the actual position <NUM> and the actual orientation <NUM> and the target print head position and orientation <NUM>; generate a nozzle firing pattern <NUM> based on the positional offset; and control the print head <NUM> to print the nozzle firing pattern <NUM> at the target print head position and orientation <NUM> using the plurality of ink nozzles <NUM>. In this embodiment, it will be appreciated that the positional offset between the actual position <NUM> and the actual orientation <NUM> and the target print head position and orientation <NUM> is determined by rendering a virtual camera 428a at a virtual position and a virtual orientation corresponding to the actual position <NUM> and the actual orientation <NUM>, respectively. Further, the nozzle firing pattern <NUM> based on the positional offset is generated based on a perspective of the virtual camera and the actual position <NUM> and the actual orientation <NUM>. The print head position sensing system <NUM> can comprise an optical camera 418c and an IMU 418b disposed on the print head <NUM>. The print head position sensing system <NUM> can also include an optical camera 418a provided outside of the applicator system <NUM>.

The print head position sensing system <NUM> can comprise an optical camera 418a. Additionally or alternatively, the print head position sensing system <NUM> can also include an optical camera 418c and an IMU 418b disposed on the print head <NUM>. Although five ink nozzles 414a-e are depicted in <FIG>, the number of ink nozzles in the print head <NUM> is not particularly limited. The controller <NUM> includes a print head controller <NUM> and an actuator controller <NUM>. The applicator system <NUM> includes the print head <NUM>, print head controller <NUM>, and the actuator controller <NUM>. The print head <NUM> is mounted to an actuator <NUM>. The print head <NUM> and the actuator <NUM> can be supported by a support <NUM>. A 3D model <NUM> outputted by a 3D modeling program <NUM> is inputted into a print client program <NUM> executed by the controller <NUM>. The print client program <NUM> can be executed on a real-time control component of the controller <NUM>. The print client program <NUM> includes a print client preprocessor <NUM> which processes the inputted 3D model <NUM>, then generates and outputs print data <NUM> including a trajectory command signal <NUM> and a rasterized image <NUM> which is a nozzle firing pattern including nozzle command signals 432a. The print client preprocessor <NUM> sends the trajectory command signal <NUM> to the actuator controller <NUM> via a communications link <NUM>. In response, the actuator controller <NUM> controls the actuator <NUM> to move the print head <NUM> to print the nozzle firing pattern <NUM> at the target print head position and orientation <NUM> using the plurality of ink nozzles <NUM>.

The printing system <NUM> further comprises a print client preprocessor <NUM> configured to generate the nozzle firing pattern <NUM>. The controller <NUM> includes a print head controller <NUM> configured to send a nozzle command signal 424a to the print head <NUM> to trigger ink ejection of at least one of the plurality of ink nozzles <NUM>. The print head position sensing system <NUM> is further configured to detect an actual orientation <NUM> of the print head <NUM> relative to the substrate <NUM>.

The print client preprocessor <NUM> is configured to receive the actual position <NUM> and actual orientation <NUM> of the print head <NUM> detected by the print head position sensing system <NUM>, and generate the nozzle firing pattern <NUM>. The print client preprocessor <NUM> is configured to generate the nozzle firing pattern <NUM> at least by: executing a rendering engine 428b to render the substrate <NUM> as a virtual substrate in a virtual scene; rendering a virtual camera 428a in the virtual scene at a virtual position and a virtual orientation relative to the virtual substrate corresponding to the actual position <NUM> and the actual orientation <NUM>, respectively; and generating the nozzle firing pattern <NUM> as a rasterized image based on a perspective of the virtual camera 428a and the actual position <NUM> and actual orientation <NUM>, such that the nozzle firing pattern <NUM> accounts for the actual position <NUM> and actual orientation <NUM>. The print head controller <NUM> is further configured to control the print head <NUM> to print the nozzle firing pattern <NUM>. The print head controller <NUM> sends an ink fire impulse <NUM> to the ink nozzles <NUM> in control cycles, and sends the nozzle firing pattern <NUM> to the ink nozzles <NUM> synchronized with the control cycles at which the ink fire impulse <NUM> is sent.

Referring to <FIG>, the printing system <NUM> is depicted in a real scene <NUM> in a real three-dimensional coordinate space <NUM> of a real-world three-dimensional environment in accordance with an example of the fourth example embodiment of the present disclosure. In this real scene <NUM>, the optical camera 418c and the IMU 418b are disposed on the print head <NUM>, which is mounted to the actuator <NUM> supported by the support <NUM>. In this example, the actuator <NUM> is configured as a robotic manipulator. The print head <NUM> is positioned to print the nozzle firing pattern <NUM> on the substrate <NUM>.

Referring to <FIG>, the rendering engine 428b, which can be executed by a hardware artificial intelligence accelerator of the print client preprocessor <NUM>, renders the virtual scene <NUM> corresponding to the real scene <NUM>, including the virtual substrate <NUM> corresponding to the real substrate <NUM>, and the virtual camera 428a corresponding to the optical camera 418c in a virtual three-dimensional coordinate space <NUM> overlaid upon the real three-dimensional coordinate space <NUM> of the real-world three-dimensional environment. One example of a hardware artificial intelligence accelerator is a graphics processing unit (GPU). Thus, the virtual camera 428a is rendered at the virtual position and the virtual orientation relative to the virtual substrate <NUM> corresponding to the actual position <NUM> and the actual orientation <NUM>. In <FIG>, a method <NUM> is illustrated for controlling a print head to print a nozzle pattern, according to one example implementation. The following description of method <NUM> is provided with reference to the software and hardware components described above and shown in <FIG>. It will be appreciated that method <NUM> also can be performed in other contexts using other suitable hardware and software components. At step <NUM>, the actual position of the print head detected by the print head position sensing system corresponding to a target print head position is received. At step <NUM>, a positional offset between the actual position and the target print head position is determined. At step <NUM>, a nozzle firing pattern is generated based on the positional offset. At step <NUM>, the print head is controlled to print the nozzle firing pattern at the target print head position using the plurality of ink nozzles.

In <FIG>, a method <NUM> is illustrated for controlling a print head to print a nozzle pattern, according to one example implementation. The following description of method <NUM> is provided with reference to the software and hardware components described above and shown in <FIG> and <FIG>. It will be appreciated that method <NUM> also can be performed in other contexts using other suitable hardware and software components. At step <NUM>, the actual position of the print head detected by the print head position sensing system corresponding to a target print head position is received. At step <NUM>, a positional offset between the actual position and the target print head position is determined. At step <NUM>, the nozzle command signal is intercepted. At step <NUM>, a bit-shift is applied on the nozzle command signal based at least on the determined positional offset. At step <NUM>, a bit-shifted nozzle command signal is generated. At step <NUM>, the print head is controlled to print the nozzle firing pattern by, at least: sending the bit-shifted nozzle command signal to the print head to control the print head to print the nozzle firing pattern at the target print head position using the plurality of ink nozzles. In <FIG>, a method <NUM> is illustrated for controlling a print head to print a nozzle pattern, according to one example implementation. The following description of method <NUM> is provided with reference to the software and hardware components described above and shown in <FIG>, <FIG>, and <FIG>. It will be appreciated that method <NUM> also can be performed in other contexts using other suitable hardware and software components. At step <NUM>, the actual position of the print head detected by the print head position sensing system corresponding to a target print head position is received. At step <NUM>, a positional offset between the actual position and the target print head position is determined.

At step <NUM>, a plurality of predetermined candidate positional offsets are identified. At step <NUM>, a respective offset nozzle command is generated for each of the plurality of predetermined candidate positional offsets. At step <NUM>, each of the respective offset nozzle commands is sent in a nozzle command array.

At step <NUM>, an offset nozzle command is selected from the nozzle command array based at least on the nozzle command signal and the determined positional offset. At step <NUM>, the selected offset nozzle command signal is sent to the print head to control the print head to print the nozzle firing pattern at the target print head position using the plurality of ink nozzles.

In <FIG>, a method <NUM> is illustrated for controlling a print head to print a nozzle pattern, according to one example implementation. The following description of method <NUM> is provided with reference to the software and hardware components described above and shown in <FIG> and <FIG>. It will be appreciated that method <NUM> also can be performed in other contexts using other suitable hardware and software components. At step <NUM>, an actual position and an actual orientation of the print head relative to the substrate are detected and received. At step <NUM>, a positional offset is determined between the actual position and actual orientation and the target print head position and target print head orientation. At step <NUM>, a rasterized image is received.

At step <NUM>, a pixel mask is generated based on the actual position, actual orientation, and the positional offset. At step <NUM>, the rasterized image is geometrically transformed into the pixel mask, each pixel in the pixel mask corresponding to a nozzle of the plurality of ink nozzles. At step <NUM>, an offset nozzle command is selected corresponding to the pixel mask. At step <NUM>, the selected offset nozzle command signal is sent to the print head to control the print head to print the nozzle firing pattern at the target print head position using the plurality of ink nozzles.

In <FIG>, a method <NUM> is illustrated for controlling a print head to print a nozzle pattern, according to one example implementation. The following description of method <NUM> is provided with reference to the software and hardware components described above and shown in <FIG> and <FIG>. It will be appreciated that method <NUM> also can be performed in other contexts using other suitable hardware and software components. At step <NUM>, an actual position and an actual orientation of the print head relative to the substrate are detected and received. At step <NUM>, the substrate is rendered as a virtual substrate in a virtual scene. At step <NUM>, a virtual camera is rendered in the virtual scene at a virtual position and a virtual orientation relative to the virtual substrate corresponding to the actual position and the actual orientation, respectively. At step <NUM>, the nozzle firing pattern is generated as a rasterized image based on a perspective of the virtual camera and the actual position and the actual orientation, such that the nozzle firing pattern accounts for the actual position and the actual orientation. At step <NUM>, the print head is controlled to print the nozzle firing pattern.

The systems and process described herein have the potential benefit of compensating for print misalignments due to vibration and inaccurate controls, thereby increasing print fidelity, print transfer efficiency, and print quality in printing systems. This can result in lowered printing costs and reduced print waste.

<FIG> illustrates an exemplary computing system <NUM> that can be utilized to implement the computing systems <NUM>, <NUM>, <NUM>, <NUM>, and <NUM> and the methods <NUM>, <NUM>, <NUM>, <NUM>, and <NUM> described above. Computing system <NUM> includes a logic processor <NUM>, volatile memory <NUM>, and a non-volatile storage device <NUM>. Computing system <NUM> can optionally include a display subsystem <NUM>, input subsystem <NUM>, communication subsystem <NUM> connected to a computer network, and/or other components not shown in <FIG>. These components are typically connected for data exchange by one or more data buses when integrated into single device, or by a combination of data buses, network data interfaces, and computer networks when integrated into separate devices connected by computer networks.

The non-volatile storage device <NUM> stores various instructions, also referred to as software, that are executed by the logic processor <NUM>. Logic processor <NUM> includes one or more physical devices configured to execute the instructions. For example, the logic processor <NUM> can be configured to execute instructions that are part of one or more applications, programs, routines, libraries, objects, components, data structures, or other logical constructs. Such instructions can be implemented to perform a task, implement a data type, transform the state of one or more components, achieve a technical effect, or otherwise arrive at a desired result. The logic processor <NUM> can include one or more physical processors (hardware) configured to execute software instructions. Additionally or alternatively, the logic processor <NUM> can include one or more hardware logic circuits or firmware devices configured to execute hardware-implemented logic or firmware instructions. Processors of the logic processor <NUM> can be single-core or multi-core, and the instructions executed thereon can be configured for sequential, parallel, and/or distributed processing. Individual components of the logic processor <NUM> optionally can be distributed among two or more separate devices, which can be remotely located and/or configured for coordinated processing. Aspects of the logic processor <NUM> can be virtualized and executed by remotely accessible, networked computing devices configured in a cloud-computing configuration.

When such methods and processes are implemented, the state of non-volatile storage device <NUM> can be transformed-e.g., to hold different data.

Non-volatile storage device <NUM> can include physical devices that are removable and/or builtin. Non-volatile storage device <NUM> can include optical memory (e.g., CD, DVD, HD-DVD, Blu-Ray Disc, etc.), semiconductor memory (e.g., ROM, EPROM, EEPROM, FLASH memory, etc.), and/or magnetic memory (e.g., hard-disk drive, floppy-disk drive, tape drive, MRAM, etc.), or other mass storage device technology. Non-volatile storage device <NUM> can include nonvolatile, dynamic, static, read/write, read-only, sequential-access, locationaddressable, file-addressable, and/or content-addressable devices.

Volatile memory <NUM> can include physical devices that include random access memory.

Aspects of logic processor <NUM>, volatile memory <NUM>, and non-volatile storage device <NUM> can be integrated together into one or more hardware-logic components. Such hardware-logic components can include field-programmable gate arrays (FPGAs), program- and application-specific integrated circuits (PASIC / ASICs), program- and application-specific standard products (PSSP / ASSPs), system-on-a-chip (SOC), and complex programmable logic devices (CPLDs), for example.

The terms "module," "program," and "engine" can be used to describe an aspect of the computing system <NUM> typically implemented in software by a processor to perform a particular function using portions of volatile memory, which function involves transformative processing that specially configures the processor to perform the function. Thus, a module, program, or engine can be instantiated via logic processor <NUM> executing instructions held by non-volatile storage device <NUM>, using portions of volatile memory <NUM>. It will be understood that different modules, programs, and/or engines can be instantiated from the same application, service, code block, object, library, routine, API, function, etc. Likewise, the same module, program, and/or engine can be instantiated by different applications, services, code blocks, objects, routines, APIs, functions, etc. The terms "module," "program," and "engine" can encompass individual or groups of executable files, data files, libraries, drivers, scripts, database records, etc..

Display subsystem <NUM> typically includes one or more displays, which can be physically integrated with or remote from a device that houses the logic processor <NUM>. Graphical output of the logic processor executing the instructions described above, such as a graphical user interface, is configured to be displayed on display subsystem <NUM>.

Input subsystem <NUM> typically includes one or more of a keyboard, pointing device (e.g., mouse, trackpad, finger operated pointer), touchscreen, microphone, and camera. Other input devices can also be provided.

Communication subsystem <NUM> is configured to communicatively couple various computing devices described herein with each other, and with other devices. Communication subsystem <NUM> can include wired and/or wireless communication devices compatible with one or more different communication protocols. As non-limiting examples, the communication subsystem can be configured for communication via a wireless telephone network, or a wired or wireless local- or wide-area network by devices such as a <NUM>, <NUM>, <NUM>, or <NUM> radio, WIFI card, ethernet network interface card, BLUETOOTH radio, etc. In some embodiments, the communication subsystem can allow computing system <NUM> to send and/or receive messages to and/or from other devices via a network such as the Internet. It will be appreciated that one or more of the computer networks via which communication subsystem <NUM> is configured to communicate can include security measures such as user identification and authentication, access control, malware detection, enforced encryption, content filtering, etc., and can be coupled to a WAN such as the Internet.

The invention as defined by the appended claims may have wide uses throughout industry. In one non-limiting example, the printing system <NUM> is used to move a print head <NUM> to deposit ink droplets onto a substrate <NUM> that is an aircraft. In other embodiments, the substrate <NUM> can be an automobile, a watercraft, a spaceship, a building, or any other suitable substrate capable of being printed on. The printing system <NUM> can include any number of different controllers, print head sensing system, and image interfaces and processor as disclosed herein.

Claim 1:
A printing system (<NUM>) comprising:
a print head (<NUM>) including a plurality of ink nozzles (<NUM>);
an actuator (<NUM>) configured to move the print head (<NUM>) relative to a substrate (<NUM>);
a print head position sensing system (<NUM>) configured to detect an actual position (<NUM>) of the print head (<NUM>) relative to the substrate (<NUM>); and
a controller (<NUM>) configured to:
receive the actual position (<NUM>) of the print head (<NUM>) detected by the print head position sensing system (<NUM>) wherein the actual position has a corresponding target print head position (<NUM>);
determine a positional offset between the actual position (<NUM>) and the target print head position (<NUM>);
generate a nozzle firing pattern (<NUM>) based on the positional offset; and
control the print head (<NUM>) to print the nozzle firing pattern (<NUM>) at the target print head position (<NUM>) using the plurality of ink nozzles (<NUM>), wherein
the controller (<NUM>) includes:
a print client preprocessor (<NUM>) configured to generate the nozzle firing pattern (<NUM>); and
a print head controller (<NUM>) configured to receive the nozzle firing pattern (<NUM>), in response, send a nozzle command signal (224a) to the print head (<NUM>) to trigger ink ejection of at least one of the plurality of ink nozzles (<NUM>);
the print client preprocessor (<NUM>) is further configured to generate the nozzle firing pattern (<NUM>), at least by:
identifying a plurality of predetermined candidate positional offsets (228a);
generating a respective offset nozzle command for each of the plurality of predetermined candidate positional offsets (228a); and
sending each of the respective offset nozzle commands to the print head controller (<NUM>) in a nozzle command array (<NUM>); and
the print head controller (<NUM>) is further configured to control the print head (<NUM>) to print the nozzle firing pattern (<NUM>) at least by:
selecting an offset nozzle command from the nozzle command array (<NUM>) based at least on the nozzle command signal (224a) and the determined positional offset; and
sending the selected offset nozzle command signal (232a) to the print head (<NUM>) to control the print head (<NUM>) to print the nozzle firing pattern (<NUM>) at the target print head position (<NUM>) using the plurality of ink nozzles (<NUM>).