以下、図面を参照して本発明を実施するための形態について説明する。下記、各図面において、同一構成部分には同一符号を付し、重複した説明を省略する場合がある。
本発明は、ハンディ装置に搭載される位置情報調整装置、該位置情報調整装置とナビゲーションセンサを含むハンディ型液滴吐出装置、ハンディ装置における位置情報調整方法、及びハンディ装置における位置情報調整プログラムに関する。
ここで、ハンディ装置とは、位置検出手段及び位置調整装置が搭載された被搭載物をいう。例えば、ハンディモバイルプリンタ(ハンドヘルドプリンタともいう)であるハンディ型液滴吐出装置が、ハンディ装置(ハンディ型装置、ハンドヘルド装置)の一例である。
<ハンディモバイルプリンタ>
まず、図1を用いて本実施形態の、ハンディ装置の一例であるハンディモバイルプリンタ(以下、HMPと示す)の概略的な特徴を説明する。
図1は、本実施形態のHMP20の構成の概略を示す図である。図1において、(a)は、HMP20の外観斜視図、(b)はHMP20の下面図である。
図1(a)に示すように、HMP20は、小型の略立方体であって、図2に示すように片手で把持可能な大きさである。
図1(b)に示すように、HMP20の吐出面である底面には、インクジェット(下記、IJと称する)記録ヘッド24、センサ部Soを含むナビゲーションセンサ30、及び、1つのジャイロセンサ31が、設けられている。なお、HMP20は、図1(b)に示す吐出面を、下方向にむけて使用する使用態様に加えて、横方向や上方向に向けて使用することもできる。
IJ記録ヘッド24には、複数のノズルが並んだノズル列61が形成されている。なお、図1(b)ではノズルは1列に列設されている例を示しているが、複数の列が設けられていてもよい。あるいはノズル列は、長手方向に置いて、千鳥状に配置されていてもよい。
<HMP20による画像形成>
図2は、HMP20による画像形成を模式的に示す図の一例である。HMP20には、例えばスマートフォンやPC(Personal Computer)等の外部機器である画像データ出力機11から画像データが送信される。ユーザはHMP20を把持して、印刷媒体12(例えば定形用紙やノートなど)から浮き上がらないようにフリーハンドで走査させる。
HMP20は後述するようにナビゲーションセンサS0とジャイロセンサ31で位置を検出し、HMP20が目標吐出位置に移動すると、目標吐出位置で吐出すべき色のインクを吐出する。すでにインクを吐出した場所はマスクされるので(インクの吐出の対象とならないので)、ユーザは印刷媒体12上で任意の方向にHMP20を走査させることで画像を形成できる。
印刷媒体12からHMP20が浮き上がらないことが好ましいのは、ナビゲーションセンサS0が印刷媒体12からの反射光を利用して移動量を検出するためである。印刷媒体12からHMP20が浮き上がると反射光を検出できなくなり移動量を検出できない。印刷媒体12からナビゲーションセンサS0がはみ出した場合も、印刷媒体12の厚みにより反射光を検出できなくなったり、検出できても位置がずれたりする場合がある。このため、ナビゲーションセンサS0は印刷媒体12上で走査されることが好ましく、上記のようにノズル61とナビゲーションセンサS0が印刷媒体12上に共に存在することが好ましい。
HMP20を印刷媒体12上で走査させるとは、HMP20の吐出面の少なくとも一部を、印刷媒体12に接触した状態で移動させることを意味する。なお、図2では、HMP20が走査する対象物上の移動面として机等の平板の上面に載置された印刷媒体12の例を示しているが、印刷媒体12は、壁や天井に貼りつけたポスター等であってもよく、HMP20は、図1(a)に示した吐出面(底面)を横にした状態や、上にした状態でもインクを吐出可能である。
また、HMP20が走査される対象物の移動面は、HMP20が移動できる面であればよく、平面の他、曲面も含まれる。対象物の移動面として印刷媒体12を例に挙げて示しているが、これには限られない。
ここで、HMP20はハンディ型のため、プリントアウトの際に印刷媒体12は、プリンタ内部を通る必要がない。そのため、印刷媒体12は、例えば、製版された本やノート、内容物を包んだ状態の包装紙、貼付されたポスター等の様々な形状の紙媒体を適用できる。さらに、HMP20で使用する液体の種類を選択することで、印刷媒体12として、鞄等の皮製品、Tシャツ等の布、家具等の木製品、プラスティック製品、人体や動物の皮膚(ボディペイント)、爪等も適用可能である。
<HMP20の構成例>
図3は、HMP20のハードウェア構成図の一例を示す。HMP20は、印刷媒体12に画像を形成する液滴吐出装置又は画像形成装置の一例である。HMP20は、制御部25によって全体の動作が制御され、制御部25には通信I/F27、IJ記録ヘッド駆動回路23、OPU26、ROM28、DRAM29、ナビゲーションセンサ30、及びジャイロセンサ31が電気的に接続されている。また、HMP20は電力により駆動されるため、電源22と電源回路21を有している。電源回路21が生成する電力は、点線22aで示す配線などにより、通信I/F27、IJ記録ヘッド駆動回路23、OPU26、ROM28、DRAM29、IJ記録ヘッド24、制御部25、ナビゲーションセンサ30、及び、ジャイロセンサ31に供給されている。
電源22としては主に電池(バッテリー)が利用される。太陽電池や商用電源(交流電源)、燃料電池等が用いられてもよい。電源回路21は、電源22が供給する電力をHMP20の各部に分配する。また、電源22の電圧を各部に適した電圧に降圧や昇圧する。また、電源22が充電可能な電池である場合、電源回路21は交流電源の接続を検出して電池の充電回路に接続し、電源22の充電を可能にする。
通信I/F27は、スマートフォンやPC(Personal Computer)等の画像データ出力機11から画像データの受信等を行う、データ受信部である。通信I/F27は例えば無線LAN、Bluetooth(登録商標)、NFC(Near Field Communication)、赤外線、3G(携帯電話)、又は、LTE(Long Term Evolution)等の通信規格に対応した通信装置である。また、このような無線通信の他、有線LAN、USBケーブルなどを用いた有線通信に対応した通信装置であってもよい。
ROM28は、HMP20のハードウェア制御を行うファームウェアや、IJ記録ヘッド24の駆動波形データ(液滴を吐出するための電圧変化を規定するデータ)や、HMP20の初期設定データ等を格納している。
DRAM29は通信I/F27が受信した画像データを記憶したり、ROM28から展開されたファームウェアを格納したりするために使用される。したがって、CPU33がファームウェアを実行する際のワークメモリとして使用される。
ナビゲーションセンサ30は、所定のサイクル時間ごとにHMP20の移動量、特に印刷媒体12に対して平行な縦横の動きを検出するセンサである。ナビゲーションセンサ30は、例えば、発光ダイオード(LED)やレーザ等の光源と、印刷媒体12を撮像する撮像センサを有している。HMP20が印刷媒体12上を走査されると、印刷媒体12の微小なエッジが次々に検出され(撮像され)エッジ間の距離を解析することで移動量が得られる。
図1では、ナビゲーションセンサ30のセンサ部Soは、HMP20の底面に1つ搭載されている例を示しているが、ナビゲーションセンサ30は、2つ以上であってもよい。
なお、ナビゲーションセンサ30として、さらに多軸の加速度センサを用いてもよく、HMP20は加速度センサのみでHMP20の移動量を検出してもよい。
ここで、物体の姿勢とは、剛体の6つの自由度のうち回転角を表す自由度(剛体の重心を通って直交する3つの軸をそれぞれ中心とする回転角)をいう。このうち、ナビゲーションセンサ30が検出する、平面における物体の姿勢は、平面に垂直な軸を中心とする回転角で表される。
ジャイロセンサ31は、印刷媒体12に垂直な軸を中心にHMP20が回転した際の角速度を検出するセンサである。詳細は図5とともに後述する。
例えば、封筒に宛名書きを印刷したり、まとまった文章をノート等にプリントアウトする場合、あるいは、タブレットに作画した絵やパワーポイントさ作成するプリントアウトする場合は、HMPを改行させながら移動することが想定されるため、改行を検知する必要がある。
ここで、改行をする際に、例えば、同じ方向に繰り返し走査させたり、あるいは、往路と復路とで少しずつずらしながら往復走査させたりする場合が想定しうる。あるいは、急いでプリントしたい場合などは、印刷媒体12上で、HMP20を振るように、斜めにずらしながら移動させて画像を出力することも想定しうる。
上述のように改行、あるいは斜めにずらしながら移動する際、使用者は、手首の捻りにより、3次元に移動することがありうるため、縦横以外の空間的な動きがジャイロセンサ31で検出する。
OPU(Operation panel Unit)26は、HMP20の状態を表示するLED、ユーザがHMP20に画像形成を指示するためのスイッチ等を有している。ただし、これに限定するものではなく、液晶ディスプレイを有していてよく、さらにタッチパネルを有していてもよい。また、音声入力機能を有していてもよい。
IJ記録ヘッド駆動回路23は上記の駆動波形データを用いて、IJ記録ヘッド24を駆動するための駆動波形(電圧)を生成する。インクの液滴のサイズなどに応じた駆動波形を生成できる。
IJ記録ヘッド24は、インクを吐出するためのヘッドである。図ではCMYKの4色のインクを吐出可能になっているが、単色でもよく5色以上の吐出が可能でもよい。各色ごとに一列(二列以上でもよい)に列状に並んだ複数のインク吐出用のノズル61(吐出部)が配置されている。また、インクの吐出方式はピエゾ方式でもサーマル方式でもよく、この他の方式でもよい。IJ記録ヘッド24は、ノズル61から液体を吐出・噴射する機能部品である。
吐出される液体は、IJ記録ヘッド24から吐出可能な粘度や表面張力を有するものであればよく、特に限定されないが、常温、常圧下において、または加熱、冷却により粘度が30〔mPa・s〕以下となるものであることが好ましい。より具体的には、水や有機溶媒等の溶媒、染料や顔料等の着色剤、重合性化合物、樹脂、界面活性剤等の機能性付与材料、DNA、アミノ酸やたんぱく質、カルシウム等の生体適合材料、天然色素等の可食材料、などを含む溶液、懸濁液、エマルジョンなどであり、これらは例えば、インクジェット用インク、表面処理液、電子素子や発光素子の構成要素や電子回路レジストパターンの形成用液、3次元造形用材料液等の用途で用いることができる。
制御部25はCPU33を有しHMP20の全体を制御する。制御部25は、ナビゲーションセンサ30により検出される移動量及びジャイロセンサ31により検出される角速度を元に、IJ記録ヘッド24の各ノズルの位置、該位置に応じて形成する画像の決定、後述する吐出ノズル可否判定等を行う。下記、制御部25についての詳細を説明する。
図4は、制御部25の構成を説明する図の一例である。制御部25はSoC50とASIC/FPGA40を有している。SoC50とASIC/FPGA40はバス46,47を介して通信する。ASIC/FPGA40はどちらの実装技術で設計されてもよいことを意味し、ASIC/FPGA40以外の他の実装技術で構成されてよい。また、SoC50とASIC/FPGA40を別のチップにすることなく1つのチップや基板で構成してもよい。あるいは、3つ以上のチップや基板で実装してもよい。
SoC50は、バス47を介して接続されたCPU33、位置算出回路34、メモリCTL(コントローラ)35、及び、ROM CTL(コントローラ)36等の機能を有している。なお、SoC50が有する構成要素はこれらに限られない。
また、ASIC/FPGA40は、バス46を介して接続されたImage RAM37、DMAC38、回転器39、割込みコントローラ41、ナビゲーションセンサI/F42、印字/センサタイミング生成部43、IJ記録ヘッド制御部44及びジャイロセンサI/F45を有している。なお、ASIC/FPGA40が有する構成要素はこれらに限られない。ASIC/FPGA40は、制御手段として機能する。
CPU33は、ROM28からDRAM29に展開されたファームウェア(プログラム)などを実行し、SoC50内の位置算出回路34、メモリCTL35、及び、ROM CTL36の動作を制御する。また、ASIC/FPGA40内のImage RAM37、DMAC38、回転器39、割込みコントローラ41、ナビゲーションセンサI/F42、印字/センサタイミング生成部43、IJ記録ヘッド制御部44及びジャイロセンサI/F45等の動作を制御する。
位置算出回路34は、ナビゲーションセンサ30が検出するサンプリング周期ごとの移動量及びジャイロセンサ31が検出するサンプリング周期ごとの角速度に基づいてHMP20の位置(座標情報)を算出する。HMP20の位置とは、厳密にはノズル61の位置であるが、ナビゲーションセンサ30のある位置が分かればノズル61の位置を算出できる。本実施例では、特に断らない限りナビゲーションセンサ30の位置としてナビゲーションセンサS0の位置をいう。また、位置算出回路34は目標吐出位置を算出する。なお、位置算出回路34をCPU33がソフト的に実現してもよい。
ナビゲーションセンサ30の位置は、後述するように例えば所定の原点(画像形成が開始される時のHMP20の初期位置)を基準に算出されている。また、位置算出回路34は、過去の位置と最も新しい位置の差に基づいて移動方向や加速度を推定し、例えば次回の吐出タイミングにおけるナビゲーションセンサ30の位置を予測する。こうすることで、ユーザの走査に対する遅れを抑制してインクを吐出できる。
メモリCTL35は、DRAM29とのインタフェースであり、DRAM29に対しデータを要求し、取得したファームウェアをCPU33に送出したり、取得した画像データをASIC/FPGA40に送出したりする。
ROM CTL36は、ROM28とのインタフェースであり、ROM28に対しデータを要求し、取得したデータをCPU33やASIC/FPGA40に送出する。
回転器39は、DMAC38が取得した画像データを、インクを吐出するヘッド、ヘッド内のノズル位置、及び、取り付け誤差などによるヘッド傾きに応じて回転させる。DMAC38は回転後の画像データをIJ記録ヘッド制御部44へ出力する。
Image RAM37はDMAC38が取得した画像データを一時的に格納する。すなわち、ある程度の画像データがバッファリングされ、HMP20の位置に応じて読み出される。
IJ記録ヘッド制御部44は、画像データ(ビットマップデータ)にディザ処理などを施して大きさと密度で画像を表す点の集合に画像データを変換する。これにより、画像データは吐出位置と点のサイズのデータとなる。IJ記録ヘッド制御部44は点のサイズに応じた制御信号をIJ記録ヘッド駆動回路23に出力する。IJ記録ヘッド駆動回路23は上記のように制御信号に対応した駆動波形データを用いて、駆動波形(電圧)を生成する。
ナビゲーションセンサI/F42は、ナビゲーションセンサ30と通信し、ナビゲーションセンサ30からの情報として移動量ΔX´、ΔY´(これらについては図7~図9と共に後述する)を受信し、その値を内部レジスタに格納する。
印字/センサタイミング生成部43は、ナビゲーションセンサI/F42とジャイロセンサI/F45が情報を読み取るタイミングを通知し、IJ記録ヘッド制御部44に駆動タイミングを通知する。情報を読み取るタイミングの周期はインクの吐出タイミングの周期よりも長い。IJ記録ヘッド制御部44は吐出ノズル可否判定を行い、インクを吐出すべき目標吐出位置があればインクを吐出し、目標吐出位置がなければ吐出しないと判定する。
ジャイロセンサI/F45は印字/センサタイミング生成部43により生成されたタイミングになるとジャイロセンサ31が検出する角速度を取得してその値をレジスタに格納する。
割込みコントローラ41は、ナビゲーションセンサI/F42がナビゲーションセンサ30との通信が完了したことを検知して、SoC50へそれを通知するための割込み信号を出力する。CPU33はこの割込みにより、ナビゲーションセンサI/F42が内部レジスタに記憶するΔX´、ΔY´を取得する。その他、エラー等のステータス通知機能も有する。ジャイロセンサI/F45に関しても同様に、割込みコントローラ41はSoC50に対し、ジャイロセンサ31との通信が終了したことを通知するための割込み信号を出力する。
<ジャイロセンサ>
図5は、ジャイロセンサ31が角速度を検出する原理を説明する図の一例である。移動している物体に回転が加わると、物体の移動方向と回転軸の両方に直行する方向にコリオリ力が発生する。
物体を移動させるため、ジャイロセンサ31ではMEMS(Micro Electro Mechanical Systems)素子を振動させることで速度v(ベクトル)を発生させる。振動している質量mのMEMS素子に外部から角速度ω(ベクトル)の回転が加わると、MEMS素子にコリオリ力が加わる。コリオリ力Fは以下のように表すことができる。
F=-2mΩ×v
なお、「×」はベクトルの外積を表し、上記のように物体の移動方向と回転軸に直交する方向がコリオリ力Fの方向である。MEMS素子は例えば櫛歯構造の電極を有しており、ジャイロセンサ31はコリオリ力Fにより発生した変位を静電容量の変化として捉える。コリオリ力Fの信号はジャイロセンサ31内で増幅されフィルタリングされた後、角速度に演算されて出力される。すなわち、F,m、vが既知なので角速度ωを取り出すことができる。
また、図5では、ジャイロセンサ31により印刷媒体12における姿勢を検出すると説明したが、地磁気センサによって水平方向の姿勢(方位、浮き量)を検出してもよい。
<ナビゲーションセンサ>
図6は、ナビゲーションセンサのハードウェア構成の構成例を示す図である。ナビゲーションセンサ30は、ホストI/F301、イメージプロセッサ302、LEDドライバ303、2つのレンズ304、306及び、イメージアレイ305を有する。LEDドライバ303は、LEDと制御回路が一体となっておりイメージプロセッサ302からの命令によりLED光を照射する。イメージアレイ305は、レンズ304を介して印刷媒体12からのLED光の反射光を受光する。2つのレンズ304,306は、印刷媒体12の表面に対して光学的に焦点が合うように設置されている。
イメージアレイ305は、LED光の波長に感度を有するフォトダイオードなどを有し、受光したLED光からイメージデータを生成する。イメージプロセッサ302はイメージデータを取得して、イメージデータからナビゲーションセンサの移動距離(上記のΔX´、ΔY´)を算出する。イメージプロセッサ302は、算出した移動距離を、ホストI/F301を介して制御部25へ出力する。
光源として使用される発光ダイオード(LED)は、表面が粗い印刷媒体12、例えば紙を使用する場合に有用である。これは、表面が粗い場合、影が発生するため、その影を特徴部分として、X軸方向及びY軸方向の移動距離を正確に算出することが可能になるからである。一方、表面が滑らか、あるいは透明な印刷媒体12に対しては、光源としてレーザ光を発生させる半導体レーザ(LD)を使用することができる。半導体レーザで、印刷媒体12上に例えば縞模様等を形成することで特徴部分を作ることができ、それを基に正確に移動距離を算出することができるからである。
次に、図7を用いて、ナビゲーションセンサ30の動作について説明する。図7はナビゲーションセンサ30による移動量の検出方法を説明する図である。LEDドライバ303が照射した光は、レンズ306を介して印刷媒体12の表面に照射される。印刷媒体12の表面は、図7(a)に示すように様々な形状の微小な凹凸を有している。このため、様々な形の影が発生する。
イメージプロセッサ302は、予め決められたサンプリングタイミング毎に、レンズ304及びイメージアレイ305を介して反射光を受光し、イメージデータ310を取得する。図7(b)に示すように生成したイメージデータ310を、イメージプロセッサ302は規定の分解能単位でマトリクス化する。すなわち、イメージデータ310を複数の矩形領域に分割する。そして、イメージプロセッサ302は、前回のサンプリングタイミングで得られたイメージデータ310と、今回のサンプリングタイミングで得られたイメージデータ310とを比較してイメージデータ310が移動した矩形領域の数を検出し、それを移動距離として算出する。図7(b)で図示するΔX方向にHMP20が移動したとする。t=0とt=1のイメージデータ310を比較すると、右端にある形状が中央の形状と一致する。したがって、形状は-X方向に移動しているので、HMP20がX方向に一マス分移動したことが分かる。時刻t=1とt=2についても同様である。
<IJ記録ヘッドにおけるノズル位置>
次に、図8を用いて、IJ記録ヘッド24におけるノズル位置等について説明する。図8(a)は、HMP20の平面図の一例である。図8(b)はIJ記録ヘッド24のみを説明する図の一例である。図示されている面が印刷媒体12に対向する面である。
本実施形態のHMP20は、1つのナビゲーションセンサS0を有している。図8(a)のS1は、説明の便宜上、ナビゲーションセンサが2つある場合の設置位置を示す。ナビゲーションセンサ30が2つある場合の、2つのナビゲーションセンサS0,S1の間の長さは距離Lである。距離Lは長いほどよい。これは、距離Lが長いほど検出可能な最小の回転角θが小さくなり、HMP20の位置の誤差が少なくなるからである。
ナビゲーションセンサ30からIJ記録ヘッド24までの距離はそれぞれ距離a、bである。距離aと、距離bは等しくてもよいし、ゼロでもよい(IJ記録ヘッド24に接している)。また、ナビゲーションセンサ30が1つだけの場合、ナビゲーションセンサS0はIJ記録ヘッド24の周囲の任意の場所に配置される。したがって、図示するナビゲーションセンサS0の位置は一例である。ただし、IJ記録ヘッド24とナビゲーションセンサS0の距離が短いことでHMP20の底面のサイズを削減しやすくなる。
図8(b)に示すように、IJ記録ヘッド24の端から最初のノズル61までの距離は距離d、隣接するノズル間の距離は距離eである。a~eの値はROM28などに予め記憶されている。
位置算出回路34などがナビゲーションセンサS0の位置を算出すれば、距離a(距離b)、距離d及び距離eを用いて、位置算出回路34はノズル61の位置を算出できる。
<印刷媒体12におけるHMP20の位置>
図9は、HMP20の座標系と位置の算出方法を説明する図の一例である。本実施形態では、印刷媒体12に水平な方向をX軸、垂直な方向をY軸に設定する。原点は画像形成が開始された際のナビゲーションセンサS0の位置である。
この座標を印刷媒体座標と称することにする。これに対し、ナビゲーションセンサS0は図9の座標軸(X´軸、Y´軸)で移動量を出力する。すなわち、ノズル61の配列方向をY´軸、Y´軸に直交する方向をX´軸として移動量を出力する。
また、図9は、図2のハンディモバイルプリンタにおける座標系と位置の算出方法を説明するための図である。ここで、ジャイロセンサ31で得られる角速度ωは、
となる。
得られたθ、dθを、以下の式(4)に代入し、X0'、Y0'の原点からの二次元座標を算出する。
このように、ナビゲーションセンサの座標を算出できれば、既存の演算フローに従い、予め機器のレイアウトが決定されている、メカ的(物理的)なナビゲーションセンサとノズルの位置関係より、各ノズルの座標を算出することができる。
<動作手順>
図10は、画像データ出力機11とHMP20の動作手順を説明するフローチャートの一例である。まず、ユーザは画像データ出力機11の電源ボタンを押下する(U101)。画像データ出力機11はそれを受け付け、電池等から電源が供給されて起動する。
ユーザは画像データ出力機11で出力したい画像を選択する(U102)。画像データ出力機11は画像の選択を受け付ける。ワープロアプリケーションのようなソフトウェアの文書データが画像として選択されてもよいし、JPEGなどの画像データが選択されてもよい。必要であればプリンタドライバが画像データ以外のデータを画像に変更してもよい。
ユーザは選択した画像をHMP20で印刷する操作を行う(U103)。HMP20は印刷ジョブの実行の要求を受け付ける。印刷ジョブの要求により画像データがHMP20へ送信される。
ユーザは、HMP20を持ち、印刷媒体12(例えばノート)の上で初期位置を決定する(U104)。
そして、ユーザはHMP20の印刷開始ボタンを押下する(U105)。HMP20は印刷開始ボタンの押下を受け付ける。
ユーザはHMP20を印刷媒体12の上で滑らせるように自由に走査する(U106)。
続いて、HMP20の動作を説明する。以下の動作はCPU33がファームウェアを実行することで行われる。
HMP20も電源のONにより起動する。HMP20のCPU33は、HMP20に内蔵されている図3,4のハードウェア要素を初期化する(S101)。例えば、ナビゲーションセンサI/F42やジャイロセンサI/F45のレジスタを初期化したり、印字/センサタイミング生成部43にタイミング値を設定したりする。また、HMP20と画像データ出力機11との間の通信を確立する。
HMP20のCPU33は初期化が完了したかどうかを判定し、完了していない場合はこの判定を繰り返す(S102)。
初期化が完了すると(S102のYes)、HMP20のCPU33は、OPU26の例えばLED点灯によりユーザに印刷可能な状態であることを報知する(S103)。これにより、ユーザは印刷可能な状態であることを把握し、上記のように印刷ジョブの実行を要求する。
印刷ジョブの実行の要求により、HMP20の通信I/F27は画像データ出力機11から画像データの入力を受け付け、画像が入力された旨をOPU26のLEDを点滅させる等によりユーザに対し報知する(S104)。
ユーザが印刷媒体12上でHMP20の初期位置を決め印刷開始ボタンを押下すると、HMP20のOPU26はこの操作を受け付け、CPU33がナビゲーションセンサI/F42に位置(移動量)を読み取らせ(リード)、CPU33はナビゲーションセンサI/F42から移動量を読み出す。(S105)。この際、ナビゲーションセンサI/F42はナビゲーションセンサS0と通信し、ナビゲーションセンサS0が検出した移動量を取得しレジスタなどに格納する(S1001)。
ユーザが印刷開始ボタンを押下した直後に取得された移動量はゼロであるがゼロでないとしても、CPU33は例えば座標(0,0)の初期位置としてDRAM29やCPU33のレジスタなどに格納する(S106)。
また、初期位置を取得すると印字/センサタイミング生成部43がタイミングの生成を開始する(S107)。印字/センサタイミング生成部43は、初期化で設定されたナビゲーションセンサS0の移動量の取得タイミングに達するとナビゲーションセンサI/F42にタイミングとジャイロセンサI/F45にタイミングを指示する。これが周期的に行われ上記のサンプリング周期となる。
HMP20のCPU33は、移動量と角速度情報を取得するタイミングであるか否かを判定する(S108)。この判定は、割込みコントローラ41からの通知により行うが、印字/センサタイミング生成部43と同じタイミングをCPU33がカウントすることで判定してもよい。
移動量と角速度情報を取得するタイミングになると、HMP20のCPU33はナビゲーションセンサI/F42から移動量を取得し、ジャイロセンサI/F45から角速度情報を取得する(S109)。上記のように、ジャイロセンサI/F45は印字/センサタイミング生成部43が生成するタイミングでジャイロセンサ31から角速度情報を取得しており、ナビゲーションセンサI/F42は印字/センサタイミング生成部43が生成するタイミングでナビゲーションセンサS0から移動量を取得している。
次に、位置算出回路34は角速度情報と移動量を用いてナビゲーションセンサS0の現在の位置を算出する(S110)。具体的には、位置算出回路34は、前回のサイクルで算出した位置(X,Y)と、今回取得した移動量(ΔX´、ΔY´)及び角速度情報から算出した移動距離を加えて、現在のナビゲーションセンサS0の位置を算出する。初期位置のみで、前回算出した位置がない場合は、初期位置に今回取得した移動量(ΔX´、ΔY´) 及び角速度情報から算出した移動距離を加えて、現在のナビゲーションセンサS0の位置を算出する。S110の詳細については、図16、図17とともに詳述する。
次に、位置算出回路34はナビゲーションセンサS0の現在の位置を用いて各ノズル61の現在の位置を算出する(S111)。
このように、印字/センサタイミング生成部43により角速度情報と移動量が同時に又はほぼ同時に取得されるので、回転角と回転角が検出されたタイミングで取得された移動量でノズル61の位置を算出できる。したがって、種類が異なるセンサの情報でノズル61の位置が算出されても、ノズル61の位置の精度が低下しにくい。
次に、CPU33はDMAC38を制御して、算出した各ノズル61の位置を基に、各ノズル61の周辺画像の画像データをDRAM29からImage RAM37へ送信する(S112)。なお、回転器39は、ユーザにより指定されたヘッド位置(HMP20の持ち方など)及びIJ記録ヘッド24の傾きに応じて、画像を回転させる。
次に、IJ記録ヘッド制御部44は周辺画像を構成する各画像要素の位置座標と、各ノズル61の位置座標とを比較する(S113)。位置算出回路34は、ノズル61の過去の位置と現在の位置を用いてノズル61の加速度を算出している。これにより、位置算出回路34は、ナビゲーションセンサI/F42が移動量を取得しジャイロセンサI/F45が角速度情報を取得する周期よりも短いIJ記録ヘッド24のインク吐出周期ごとにノズル61の位置を算出している。
IJ記録ヘッド制御部44は、位置算出回路34が算出するノズル61の位置から所定範囲内に画像要素の位置座標が含まれるか否かを判定する(S114)。
吐出条件を満たさない場合、処理はステップS108に戻る。吐出条件を満たす場合、IJ記録ヘッド制御部44はノズル61ごとに画像要素のデータをIJ記録ヘッド駆動回路23に出力する(S115)。これにより、印刷媒体12にはインクが吐出される。
次に、CPU33は全画像データを出力したかを判定する(S116)。出力していない場合、ステップS108からS115までの処理を繰り返す。
全画像データを出力した場合、CPU33は、例えばOPU26のLEDを点灯させユーザに印刷が終了したことを報知する(S117)。
なお、全画像データを出力しなくても、ユーザが十分と判断した場合には、ユーザは印刷完了ボタンを押下し、OPU26がそれを受け付けて、印刷を終了してよい。印刷終了後、ユーザが電源をOFFにすることもできるし、印刷が終了した時点で、自動で電源がOFFにされるようになっていてもよい。
<検出波形の信号リード>
図11は、ナビゲーションセンサの処理周期と検出値について説明する図である。
詳しくは、図11は、ナビゲーションセンサと、FPGA40における信号のタイミングについて、説明する図であり、図11において、(a)はナビセンサ処理周期とFPGAリードタイミングが同期している場合の図、(b)はナビセンサ処理周期とFPGAリードタイミングが非同期の場合の図である。
なお、下記の説明において、用語の短縮のため、ナビゲーションセンサ30を、ナビセンサ30と称することもある。また、下記でナビゲーションセンサ30と通信して検出値を取得する制御手段をFPGA40と示すが、図4に示すように制御手段は、ASICであってもよい。
上述の図4で説明したように、制御部25とは別に設けられる位置検出手段の一例であるナビゲーションセンサ30は、移動量ΔX´、ΔY´を受信する。そして、制御部25内のFPGA40内のナビゲーションセンサI/F42は、ナビゲーションセンサ30と通信し、ナビゲーションセンサ30からの情報として移動量ΔX´、ΔY´を受信し、その値を内部レジスタに格納する。
ここで、ナビセンサ30はナビセンサ内の処理周期で、移動量を算出し外部からリードされるまで値を蓄積し、FPGA40によってリードされると、そのタイミングで値をクリアする仕組みとなっている。
ナビセンサ30のレジスタにナビセンサ処理周期毎に移動量をため込んで、蓄積して記憶しておく。ナビセンサ30のナビセンサ処理周期は、ナビセンサ30に内蔵されたクロック信号の周期に相当する。例えば、ナビセンサ処理周期は、10[KHz]程度である。
そして、ナビセンサ30の受信先のFPGA40は、リードタイミングで、ナビセンサ30のレジスタにアクセスして、データを読み取る。FPGAリードタイミングとは、ナビセンサ30の信号を受信するFPGA40におけるリードタイミング、即ち、FPGA40に内蔵されたクロック信号のタイミングに相当する。
ナビセンサ処理周期とリードタイミングが同期している場合であれば、図11(a)で示すように、リード周期間で常に同じ回数ナビセンサ処理を実施後、センサ情報がリードされる。図11(a)では、リードタイミングの繰り返し周期は、ナビセンサ処理周期の約5倍である例を示している。
一方、非同期の場合、即ち、ナビセンサ処理周期と、FPGA40が異なるクロックで動作している場合、リード周期間でのナビセンサ処理回数が一定とはならないため、HMP20が定速で移動していても、図11(b)の丸で示すように、処理回数が少ない部分が発生してしまう。
図12は、ナビセンサ処理周期とFPGAリードタイミングが非同期の場合のナビゲーションセンサの検出波形である。図12において、(a)は全体図であり、(b)は拡大図である。
図11(b)の丸で示したように、ナビセンサ処理周期とFPGA処理周期とが、非同期で、リード周期間で処理回数が少ない期間は、図12(b)に示すように、他の波形よりも顕著に小さいスパイク状の波形となって出力される。
なお、図12(a)、図12(b)では、ナビセンサ処理周期とFPGA処理周期とが、非同期で、図11(b)のように、同期状態から少しリードタイミングが早くなったため、リード周期においてナビセンサ処理回数が他よりも少なくなる現象が発生して、下側に凸のスパイクが発生する例を示しているが、リード周期の同期状態からナビセンサ処理回数が他よりも多くなる場合は、上側に凸のスパイクが発生する。ナビセンサ処理周期と、FPGA処理周期の同期のずれ方に応じて、スパイクが発生するスパイク周期やスパイクの発生方向は、変化する。
ナビセンサ30は、上述のように、制御部25とは別に設けられる位置検出手段の一例であるため、ナビセンサ処理周期を制御部25のFPGA40のリードタイミングと完全に一致させることは難しい。
しかし、HMP20を同一の方向に滑らかに走査させている最中に、位置検出信号において他の信号よりも落ち込むスパイク波形が発生し、実際の位置情報を正しく検知できないと、IJ記録ヘッド24での画像形成において、例えば、ベタ画像などで、薄い部分が発生し、塗り潰しに濃淡の差が発生してしまう。
そこで、本発明では、ナビセンサの処理周期と受信先のFPGAが非同期である場合であっても、ASIC40とは別に設けられるSoC50(図4参照)において位置算出での検出値(位置情報)を調整するように信号処理を行うことで、信号のスパイクに起因するノイズを低減させる。
下記、SoC50内で実施する検出値の位置調整について説明する。
<位置調整装置の概略ブロック>
図13は、本発明の位置情報調整部(位置情報調整装置)510を含む位置算出部500の一例の機能ブロック図である。
位置算出部500は、位置情報調整部510に加えて、ジャイロセンサ31からの角速度情報を調整する現在位置演算部570を含んでいる。よって、位置算出部500、ナビゲーションセンサの位置情報を信号処理後、ジャイロセンサ31で検出したヒネリの情報を含めて現在位置演算を実施する構成である。
位置情報調整部510を含む位置算出部500は、図4に示すSoC50における、コンピュータであるCPU33に含まれるアルゴリズムの一部又は電子回路で構成される位置算出回路34に実装される。あるいは、位置情報調整部510又は現在位置演算部570のどちらか一方が、CPU33に実装され、他方が位置算出回路34に実装されてもよい。
位置情報調整部510と、現在位置演算部570を含む位置算出部500が、図10のステップS11の「ナビゲーションセンサ現在位置算出・格納」の処理を実行する。
なお、図10のS108のFPGA40のセンサリード周期を1[msec]とすると、現在の位置情報算出を実行するステップS110の位置算出部500での処理周期も1[msec]に設定されることになる。
位置情報調整部510は、位置情報調整装置の一例であって、速度判定部520と、スパイク波形除去・拡散部530、LPF(Low Pass Filter)540,550と、出力確定部560とを備える。
速度判定部520では、ハンディ装置であるHMP20の移動速度に応じて、速度フラグをON/OFFする。
図13に示す、スパイク波形除去・拡散部530では、スパイク信号の検知および、入力信号の代替値算出を実施する。スパイク波形除去・拡散部530の詳細については、図15~図19とともに後述する。
出力確定部560では、速度フラグ及び蓄積超過フラグに応じて最終出力を決定する。出力確定部560の詳細については、図20、図21とともに詳述する。
位置情報調整装置510において、ナビセンサ30の検出値に対して、スパイク波形除去・拡散部530による信号処理と、LPF540によるフィルター処理を実施し、第1の位置出力情報(出力1)を出力する第1の処理SAと、ナビゲーションセンサ30の検出値に対して、LPF550によるフィルター処理を実施して第2の位置出力信号(出力2)を出力する第2の処理SBと、を並列で実行している。
そして、出力確定部560は、速度判定部520による速度フラグ及びスパイク波形除去・拡散部530による蓄積超過フラグに基づいて、状況に応じた比率で、出力1又は出力2を混合して出力する、あるいは、出力1又は出力2のいずれかを出力する。
第1のフィルター部であるLPF540と、第2のフィルター部であるLPF550では、高帯域のノイズをカットしている。LPF540と、LPF550が設けられていることで、いずれの処理SA、SBの実施した信号においても、全体的にフィルターを掛けることができる。
詳しくは、ナビゲーションセンサ30の分解能が固定なので、特に、低い速度の場合に、スパイクが埋もれてしまう傾向にある。そのため、スパイクは、HMP20の移動速度が遅い場合には検知できないため、後段に説明するように、移動速度が低速の場合は、スパイク除去、拡散した波形を出力波形に使用しないように設定することがある。このように、スパイクが発見しづらい、低速度移動の場合に、バックアップとして、第2のフィルターであるLPF550を介在させることで、信号のノイズを低減することができる。
さらに、スパイク波形除去・拡散部530の後段にも、第1のフィルター部であるLPF540が設けられている。スパイクは、速度が高速であっても、速度が変動する時に、検知できないこともある。LPF540は、スパイクがうまく検出できずに高帯域側にノイズが発生してしまい、想定とは違う高帯域側にノイズが発生してしまった場合のバックアップ、補償として使用される。また、LPF540は、スパイクを検出・除去し、拡散させるだけでは、十分に平滑化されない場合もあるので、それをさらに滑らかにするためにも使用される。
ここで、図14に速度判定部520における速度フラグ制御フローを示す。
S201で、検出したハンディ装置の移動速度と速度閾値とを比較する。
速度判定部520は、ハンディ装置であるHMP20の移動速度が、速度閾値以上になった場合に(S201でYes)、速度フラグをONにする(S202)。
ここで、移動速度が低速の場合は、スパイクは発生していたとしても、ナビゲーションセンサ30の量子化誤差に埋もれてしまい、検出しづらい。そのため、スパイクがナビゲーションセンサ内の量子化誤差に埋もれない程度に高速のときのみ、スパイク除去・拡散機能を実行するように、移動速度が、速度閾値以上のときに速度フラグを発生させる。速度フラグは、後段の出力確定部560で使用される。
一方、移動速度が、速度閾値未満(S201でNo)のときには、S203で、速度フラグは発生させない。
<スパイク波形除去・拡散部>
図15は、図13に示すスパイク波形除去・拡散部530の第1の構成例の機能ブロック図である。
図15に示すように、スパイク波形除去・拡散部530は、スパイク監視部71、代替値設定部72、誤差積算値算出・判定部73、誤差拡散量算出・設定部74、誤差拡散量反映部75を実施可能に有している。誤差積算値算出・判定部73、誤差拡散量算出・設定部74、及び誤差拡散量反映部75は、誤差調整部76として機能する。
このスパイク波形除去・拡散部530における各構成要素の機能は、上述のように、SoC50のCPU33の位置処理アルゴリズムとしてソフトウェアで実施されてもよいし、又は位置算出回路34で実施されてもよい。
スパイク監視部71は、位置検出手段であるナビゲーションセンサ30の検出値を、急峻な変化がないかどうか監視する検出値監視部である。
代替値設定部72は、検出値が急峻な変化をした場合に、その検出値を補正するように置き換える代替値を途中値として設定し、検出値が急峻な変化をしない場合には、検出値を途中値として設定する。
誤差積算値算出・判定部73、誤差拡散量算出・設定部74、及び誤差拡散量反映部75は、ナビゲーションセンサ30の検出値と、設定した代替値との差分を積算した誤差積算値に基づいて、代替値を拡散するように調整する、誤差調整部76を構成する。
詳しくは、誤差積算値算出・判定部73は、ナビゲーションセンサ30の検出値と、設定した代替値との差分から誤差拡散量を減算した誤差を蓄積した蓄積誤差を記憶して、誤差積算値を算出するとともに、必要に応じて蓄積超過フラグを生成する。
誤差拡散量算出・設定部74は、誤差積算値を基に、誤差拡散量を設定する。誤差拡散量反映部75は、誤差拡散量算出・設定部74で前回の検出タイミングで設定した誤差拡散量を、今回の途中値(検出値又は代替値)に対して、加算する。
詳しくは、本実施形態では、スパイク監視部71は、平均値算出部711と、検出値蓄積記憶部712と、検出値平均値比較部713と、スパイク閾値記憶部714とを有している。
ナビゲーションセンサ30が今回検出した検出値は、スパイク監視部71の平均値算出部711と、検出値蓄積記憶部712と、検出値平均値比較部713に入力される。
平均値算出部711は、検出値蓄積記憶部712から直前の数回(例えば、5回)分の検出値を呼び出して、今回の分も含めた直前数回分の平均値を算出する。
検出値平均値比較部713は、スパイク閾値記憶部714からスパイク閾値を呼び出し、入力された今回の検出値と、算出された平均値を比較して、検出値と平均値の差がスパイク閾値以上となるかどうかを検出する。
この構成により、スパイク監視部71は、位置検出手段の検出値が急峻な変化をするかどうかを、今回の検出値と、過去の複数回の検出値の平均値の差分が閾値を超えるかどうかで判断する。
また、代替値設定部72には、今回検出した検出値と、算出した平均値と、検出値と平均値との差分が閾値以上であるかの判断結果が入力されるため、差分が閾値以上であった場合は、代替値として、検出値が急峻な変化した検出値を、過去の複数回の検出値の平均値に置き換える。一方、差分が閾値未満の場合は、検出値をそのまま途中値として出力する。
誤差積算値算出・判定部73は、差分算出部731と、誤差積算値算出部732と、蓄積誤差記憶部733と、誤差積算値判定部734と、蓄積閾値記憶部735と、蓄積誤差算出部736とを備える。
差分算出部731は、代替値に用いた平均値と、今回検出した検出値との差分を算出する。誤差積算値算出部732は、蓄積誤差記憶部733に記憶されている蓄積誤差に今回の検出での差分を加算して、誤差積算値を算出する。
誤差積算値判定部734と、蓄積閾値記憶部735は、算出された誤差積算値を利用した、蓄積超過フラグのON/OFFの切り替えに使用される。
蓄積誤差算出部736は、今回の誤差積算値から、後述する誤差拡散量を減算した値を誤差として算出する。
誤差拡散量算出・設定部74は、誤差積算値比較部741、最小拡散値記憶部742、誤差拡散量算出部743、係数記憶部744、算出値比較部745、及び誤差拡散量設定部746を備える。誤差拡散量算出・設定部74での詳細な処理については、図17とともに後述する。
誤差拡散量反映部75は、誤差拡散量呼び出し部751と、誤差拡散量加算部752とを備える。誤差拡散量呼び出し部751は、前回検出時に設定された誤差拡散量を呼び出し、誤差拡散量加算部752は、途中値に呼び出した誤差拡散量を加算して、調整出力値として出力する。
このような構成の誤差調整部76では、誤差積算値算出・判定部73により、センサ入力と代替信号として採用した平均値との差分の一部を誤差として蓄積し、その蓄積誤差と今回の差分とを基に、誤差拡散量を決めて代替信号に加算する。そして検出値が急峻な変化をした検出の後、検出値が急峻な変化をしない検出が連続する場合に、蓄積誤差が徐々に0になるよう信号を処理する。即ち、ナビセンサ入力値と代替値との差分値は、積算後、徐々に拡散する仕組みとなる。
ここで、スパイク波形除去・拡散部530での信号処理については、下記、図16~図18とともに説明する。
<スパイク波形検出・除去・拡散の全体フロー>
図16は、本発明の第1の構成例に対応するスパイク波形除去・拡散部530におけるスパイク波形除去・拡散動作のフローチャートである。
図18は、スパイク波形除去・拡散の波形図である。図18において(a)は、平均値を利用したスパイク波形除去の波形図であり、(b)は誤差拡散の波形図である。図18(a)(b)において、横軸は時間、左側の軸は、センサ検出値であるナビセンサ入力値、平均値途中値である代替信号、調整出力信号の信号値を示している。また、図18(b)の右側の軸は、蓄積誤差、誤差拡散量を示している。
図16のS301~S305、S307と、図18(a)を用いて、途中値の設定について説明する。
図16のS301で、ナビゲーションセンサから検出値が入力される。
S302で、スパイク監視部71で、平均値を算出する。例えば、今回を含めた直前の過去5回の検出値(サンプル)の平均値を算出する。
S303で、スパイク監視部71で、検出値と、平均値の差分を算出する。
S304で、スパイク監視部71で、差分とスパイク閾値とを比較する。
S304で、差分がスパイク閾値よりも大きい場合は(Yes)、異常値と判断し、S305で、代替値設定部72は、「途中値」を、算出された平均値に設定する。即ち、平均値を、代替信号(代替値)して設定する。
図18(a)において、t=454[msec]、457[msec]で、検知波形が落ち込むスパイクが発生している。スパイクが発生すると、図16のS303で、入力信号と平均値との差分がスパイク閾値以上と判定されるため、図18のスパイク発生箇所で、異常と判断し、平均値を代替信号(途中値)として使用する。
S306で、S305で途中値に設定した平均値と、検出値との差分を、記憶されている前回までの蓄積誤差に加算して、「誤差積算値」とする。なお、検出開始後、初めてスパイクが検出される場合は、蓄積誤差=0のため、誤差積算値=差分となる。
一方、S303で、算出した差分が、スパイク閾値よりも小さい場合は、S307で、代替値設定部は、検出値(ナビセンサからの入力値)を途中値に設定する。そのため、検出値からの差分は発生しない。
そして、S308で、記憶されている蓄積誤差を、誤差積算値に設定する。
その後、S309で、S306またはS308で設定された誤差積算値が、蓄積閾値以上かどうか比較し、蓄積閾値以上の場合(Yes)は、S310で蓄積超過フラグをONにし、後段の出力確定部560における出力決定の判断で使用する。
一方、誤差積算値が蓄積閾値未満の場合は、蓄積超過フラグはOFFのままにする。蓄積超過フラグについては、図21とともに詳述する。
図16の、S311~S313と、図18(b)を用いて、誤差拡散について説明する。
そして、S311で、誤差拡散量を設定する。誤差拡散量の算出方法の詳細については、図17とともに後述する。
S312で、途中値に、S311で設定した誤差拡散量を加算して、調整出力値に設定する。この調整出力値に、後段のLPF540でフィルター処理した値が、出力1となる。
そして、S313で、S306またはS308で設定された誤差積算値から、今回使用した誤差拡散量を差し引いて蓄積誤差として、次回検出のために記憶する。
詳しくは、検出開始後初めてスパイクが検出される場合は、差分から今回使用した誤差拡散量を差し引いた値が、誤差(蓄積誤差)となる。二回目以降にスパイクが検出される場合は、差分と記憶されている蓄積誤差との合計である誤差積算値から、今回使用した誤差拡散量を差し引いた値が、蓄積誤差となる。
一方、スパイクが検出されない場合は、記憶されている蓄積誤差から今回使用した誤差拡散量を差し引いて、今回記憶する蓄積誤差とする。なお、記憶された蓄積誤差が無い状態でスパイクが検出されない場合は、誤差拡散量は拡散せず、今回記憶する蓄積誤差は0となる。
このフローはハンディ装置であるHMP20の移動が終了する(S314でYes)まで、繰り返す。
このような制御により、ハンディ装置が移動中(走査中)に、タイミング生成回路がタイミング信号を生成する毎に、ナビゲーションセンサの各出力値を読み込んでサンプリングし、その各出力値とセンサの取り付け距離とに基づいて、ノイズ除去演算部が各センサの出力値にノイズが含まれているか否かを判断する。そして、ノイズが含まれていると判断した出力値を補正するか又は不採用にしてノイズを除去し、その除去したノイズの蓄積量に応じて、誤差拡散量を加算された、所定サンプリング回数の各センサの出力値に基づいて、位置算出回路が記録ヘッドの基準点からの移動量を算出して位置情報を決定する。
これにより、ナビゲーションセンサ出力の急峻な変化を除去後、除去分を後段の信号に拡散することで、総移動量を正しく検知し且つ信号の平滑化が実現できる。
<誤差拡散量算出の詳細フロー>
図17は、図16の誤差拡散値を設定する処理の詳細フローチャートである。このフローは、図16のステップS311の処理の詳細に相当する。図13、図17、図18を用いて、誤差拡散について説明する。
S401で、誤差積算値比較部741は、誤差積算値の絶対値が、最小拡散値よりも、小さいかどうか確認する。
S401で、誤差積算値の絶対値が最小拡散値よりも小さい場合(Yes)、S402で、誤差拡散量設定部746は、誤差積算値を、誤差拡散量に設定する。例えば、誤差積算値が0の場合は、誤差拡散量は0になり、誤差拡散量の途中値への加算は実施しない。
S401で、誤差積算値の絶対値が最小拡散値以上の場合(No)、S403に進み、誤差拡散量算出部743は、誤差積算値に、係数をかけ合わせて、誤差拡散量を算出する。スパイクが検出される場合は、誤差積算値は、蓄積誤差に平均値と検出値との差分が加算された値であり、誤差積算値の絶対値は必然的に最小拡散値より大きくなるため、スパイク検出回は、S403に進む。
ここで、係数記憶部744で記憶される係数は、0よりも大きく、1よりも小さい、一定割合に設定されている。例えば、図18(b)では、係数を0.15に設定した例を示している。
そして、S404で、算出値比較部745は、S403で算出した誤差拡散量の絶対値が、最小拡散値(拡散閾値)よりも小さいかどうか比較する。
S404で、算出した誤差拡散量の絶対値が、最小拡散量よりも大きい場合は、S405で、誤差拡散量設定部746は、算出した誤差拡散量を、使用する誤差拡散量に設定する。
このように設定することで、誤差積算値が大きい場合に、誤差拡散量は、現在の誤差積算値の一定割合ずつに設定して拡散する。誤差積算値は、スパイク検出時に、蓄積誤差に差分が加算されて大きくなりスパイクが検出されない場合、誤差積算値は記憶されている蓄積誤差に設定される。そのため、以後、スパイクが検出されない検出が続くと検出毎に、図15のS313で、記憶されている蓄積誤差から、使用する誤差拡散量が差し引かれるため、徐々に今回記憶する蓄積誤差、即ち、次回使用される誤差積算値は減少していく。
例えば、図18(b)において、t=455~456[msec]の期間、及び、t=458~464、[msec]の期間では、徐々に、蓄積誤差の減少に比例して、誤差拡散量は減っている。
S403で、算出誤差拡散量が0以上の値の場合、S404で、誤差拡散量を<+最小拡散値>に設定する。一方、S403で、算出誤差拡散量が0未満でマイナスの値の場合、S405で、誤差拡散量を、<-最小拡散値>に設定する。
例えば、図18(b)において、t=453[msec]以前の期間では、誤差拡散量は、一定値である最小拡散値に設定されている。
なお、図17では、誤差積算値の大小関係の場合分けのため、誤差積算値を誤差拡散量に設定する例を上方に示したが、実際の処理でスパイクが検出された後は、誤差拡散量は、絶対値が大きい順に、算出誤差拡散量(算出値)⇒|最小誤差拡散量|⇒誤差積算値の順に、徐々に減少しながら設定される。
即ち、スパイク検出直後は、差分により誤差積算値が急激に増加するため、S404で算出誤差拡散量が最小拡散値よりも小さくなるまで、誤差拡散値は、算出誤差拡散量が設定される。
そして、S404で算出誤差拡散量が最小拡散値よりも小さくなると、誤差拡散量には最小拡散量を設定し、S401で誤差積算値が最小拡散量よりも小さくなるまで、一定値である最小拡散量で拡散し続ける。
そして、スパイクを検出しないで拡散を繰り返すと、誤差積算値が最小拡散量よりも小さくなり、その場合は、S402で示したように、誤差積算値を誤差拡散量に設定する。「誤差拡散量=誤差積算値」となることで、図16のS313での減算「蓄積誤差=誤差積算値-誤差拡散量」により、次回スパイクが検出されない場合に誤差積算値に設定される蓄積誤差が0なる。これ以降、スパイクが検出されて代替値と検出値に差分が生じるまでは、誤差積算値が存在しないため、誤差は拡散しない。
図16~図18に示すように、本発明では、ハンディ装置での位置検知での位置情報調整おいて、
(1). ナビゲーションセンサ出力の急峻な変化を検知する機能、
(2). 過去の出力データから、適当な移動量を算出する機能、
(3). (1)で検知したナビゲーションセンサ出力と、(2)で算出した適当な移動量の差分を、今回及び以降の信号に拡散し、蓄積誤差を平滑化する機能、を有している。
このように処理をすることで、位置調整装置において、ミクロな視点において、対象物上のハンディ装置の移動量を検出する位置検出手段の検出値の急峻な変化を、平均値を用いて平滑化する。そして、平滑化の際の平均値と検出値との差分が蓄積した誤差積算値を次回以降で拡散させることで、マクロの視点である移動域全体における平滑化の悪影響を抑制することができる。即ち、ナビゲーションセンサ出力の急峻な変化を除去後、除去分を後段の信号に拡散することで、総移動量を正しく検知し且つ信号の平滑化が実現できる。
この位置調整を、ハンディ型液滴吐出装置に適用すると、ナビゲーションセンサ出力の急峻な変化(ノイズや、センサとCPUの処理周期の不一致による蓄積誤差に起因)を平滑化し、印刷品質を向上することができる。
このように、本発明では、ナビセンサの周期と受信先のFPGAが非同期である場合であっても、後段の制御部の位置算出において、信号処理を行うことで、信号のスパイクに起因するノイズを低減させている。
そして、上述のように、本発明では、ナビセンサの受信先で信号の位置調整を実施するため、この信号処理により非同期に伴うスパイクを低減できるため、ハンディ装置において、どのような処理周期のナビセンサを搭載した場合であっても、適宜スパイクのタイミングを検出することで、適宜、信号を平滑化することが可能である。
なお、本フローでは、誤差調整部は、今回の検出値と、置き換えた代替値との差分を誤差として積算し、次回以降の検出値に、誤差積算値の大きさに基づいて、その誤差積算値の少なくとも一部を誤差拡散量として誤差が0になるまで加算する例を説明した。
<誤差拡散の他の制御例>
さらに、本発明では、誤差拡散量設定部において、次回以降の検出値に加算する誤差拡散量を、誤差積算値の大きさに加えて、ハンディ装置の走査速度を考慮して、誤差積算値を最大値として、誤差拡散量の値を変動させてもよい。
この場合、例えば、S403で算出する算出誤差拡散量を、
「誤差拡散量=誤差積算値×誤差拡散速度係数×速度」
と設定してもよい。なお、誤差拡散速度係数は所定の定数である。
このように、演算することで、誤差拡散の際に、走査速度の変動によって想定される検出値の変動を加味して誤差拡散量を設定することができる。
<スパイク波形除去・拡散部の第2の構成例>
図20は、図13に示すスパイク波形除去・拡散部530Aの第2の構成例の機能ブロック図である。
本構成例では、スパイク検出において、検出値と比較する対象が、平均値ではなく、補間演算値を用いる点が異なる。そのため、スパイク監視部71Aでは、補間演算部715と、検出演算値比較部716を有している。なお、補間演算で使用する、サンプルデータとしての検出値は、少なくとも2個以上必要であるため、少なくとも直前の2回分は記憶して、平均の式ではなく、補間演算の式によって演算された演算値を用いて、スパイクの検出を行う。
即ち、本構成では、スパイク監視部71Aは、位置検出手段の検出値が急峻な変化をするかどうかを、今回の検出値と、過去の複数回の検出値の補間演算値(代替値)との差分がスパイク閾値を超えるかどうかで判断する。その他の構成は、第1の構成例と同様である。
本構成例では、位置調整装置において、ミクロな視点において、対象物上のハンディ装置の移動量を検出する位置検出手段の検出値の急峻な変化を、補間演算値を用いて平滑化する。そして、平滑化の際の補間演算値と検出値との差分が蓄積した誤差積算値を次回以降で拡散させることで、マクロの視点である移動域全体における平滑化の悪影響を抑制することができる。
<出力確定部>
図20は、図13に示す出力確定部560の機能ブロック図である。
図20で示すように出力確定部560は、速度フラグ有無確認部81、蓄積超過フラグ有無確認部82、出力割合設定部83、出力増減係数記憶部84、出力割合混合部85、出力調整機能使用有無入力部86、出力選択スイッチ87、及び位置情報出力選択部88を備えている。
速度フラグ有無確認部81は、速度判定部520で判定したハンディ装置20が移動する速度に起因する速度フラグの有無を確認する。
蓄積超過フラグ有無確認部82は、スパイク波形除去・拡散部530で生成される蓄積フラグの有無を確認する。
出力割合設定部83は、出力増減係数を用いた出力割合増減量を用いて、速度フラグ、蓄積超過フラグの有無に基づいて、出力1と出力2との割合を決定する。なお、図20では、出力増減係数は予め出力増減係数記憶部84で記憶されている例を示しているが、外部から受信した信号や、過去の履歴を用いて、出力増減係数を設定してもよい。
出力割合混合部85は、設定された出力割合に基づいて、出力1と出力2とを混合する。
位置情報出力選択部88は、出力割合混合部85で混合した出力値、又は、出力1、出力2のいずれかを出力3として出力する。
図21は、出力確定部560における処理の詳細フローチャートである。図20、図21を用いて出力確定での信号処理を説明する。
S501で、出力調整機能を使用するかどうかを確認する。出力調整機能とは、スパイク除去・拡散処理を含む処理SAと、フィルターのみの処理SBとの切り替えを段階的に変化させる機能である。本機能はON/OFF選択可能で、OFFの場合入力信号のどちら(出力1、出力2)を出力するか選択が可能である。
S502で、速度フラグがONかどうか確認する。速度フラグは、図14のS202でONされる。上述のように、ハンディ装置の移動速度が一定値未満のとき、センサの量子化誤差に紛れスパイク波形を検知することが出来ないため、速度フラグがONの時のみ出力1(スパイク除去・拡散処理値)の値を使用するように、後段でSAの割合を徐々に調整する。
S503で、蓄積超過フラグがOFFかどうか確認する。蓄積超過フラグは、図15のS310で、誤差積算値が、蓄積閾値以上の場合に、ONされる。ここで、蓄積閾値は、誤差が徐々に蓄積していき、異常な動作を作動させる可能性がある閾値に設定する。蓄積超過フラグによって、出力確定部560はスパイク波形除去・拡散部530での処理の実施/不実施を判断し、続く処理で、出力全体である出力3に対する出力1の割合を増減させる。
蓄積超過フラグが発生する例として、例えば、連続する検出値の変動量が大きく、平均値に対して、複数回連続してスパイクが検出されてしまう場合や、今回検出したスパイクと平均値との差が大きすぎる場合等が想定しうる。
速度フラグONで且つ蓄積超過フラグOFF(S502、S503でYes)の場合、S504で、出力割合設定部83は、出力割合を、前回割合に対して、出力割合増減量を追加する。
そして、S505で、出力割合が1よりも大きいかどうか判定し、出力割合が1よりも小さい場合は(No)、そのまま、その出力割合をS510で利用する。
S505で出力割合が1よりも大きい場合(Yes)は、S506で出力割合を1に調整し、出力割合「1」を、ステップS510で利用する。
一方、速度フラグのON/OFFに依らず、蓄積超過フラグON(S503でNo)の場合、S507で、出力割合設定部83は、出力割合を、前回割合に対して、出力割合増減量を削減する。
S508で、出力割合が、0よりも小さいかどうか判定し、0よりも大きい場合は(No)、そのままその出力割合をS510で利用する。
S508で出力割合が0よりも小さい場合は(Yes)、S509で出力割合を0に調整し、出力割合「0」を、ステップS510で利用する。
S510で、最終出力値(出力3)を、「出力割合×出力1+(1-出力割合)×出力2」で算出する。
上記のように、蓄積誤差に差分が加算されて算出される誤差積算値が一定値である蓄積閾値を超えて蓄積超過フラグがONのときはスパイク除去・拡散機能が正常動作していないと判断できる。そのため、このフローのS503~S510により、出力確定部560は、蓄積超過フラグOFFの時に、出力1(スパイク除去・拡散処理を含む処理SA)を積極的に採用するように出力1の割合を増加させ、蓄積超過フラグONの時に、出力1の割合を減少させるように制御する。
そして、S510で出力1の比率が0(出力割合=1)になると、出力確定部560は、スパイク波形除去・拡散部530における検出値監視処理、代替値設定処理、誤差拡散調整処理が、不実施の、フィルターによる処理のみを実施した信号を出力値である出力2を出力する。
一方、S501で、出力調整機能を使用しない場合は、S511で出力選択スイッチ87が、出力1に設定するか出力2に設定されているかを判定する。出力調整機能がOFFの場合は、出力1又は出力2を混合せずに、出力1又は出力2のいずれかを出力する。
出力選択スイッチ87が出力1の設定の場合は、最終出力値を出力1に設定し(S512)、出力2の設定の場合は、最終出力値を「出力2」に設定する(S513)。ここで、出力選択スイッチ87は、起動時や、HMP20のプリンタ動作停止時に、出力1/出力2を選択しておき、HMP20が移動中は、切り替えずに固定されている。
上述の図13で示したように、位置情報調整装置において、ナビゲーションセンサの検出値に対して、スパイク波形除去拡散部による信号処理と、第1のLPFによるフィルター処理を実施し、第1の位置出力情報(出力1)を出力する第1の処理と、位置検出手段の検出値に対して、フィルター処理を実施して第2の位置出力信号(出力2)を出力する第2の処理と、を並列で実行している。
そして、出力確定部560で、出力1から出力2、または出力2から出力1への切替りは、急激な変化となる恐れがあったが、移動中に調整される場合は、図21に示すように、速度フラグ又は/及び蓄積超過フラグに基づいて、状況に応じた比率で、出力1又は出力2を混合して出力する一定割合ずつ出力を調整することで、出力調整の度合いを、滑らかに変化させることができる。
上記実施形態では、本発明の位置情報調整装置及び位置検出手段を搭載するハンディ装置として、ハンディモバイルプリンタ(HMP20)である例を説明したが、例えば、移動して原稿を読み取る、ハンディモバイルスキャナーに対して、本発明の位置情報調整装置を適用してもよい。さらに、対象物上の移動した距離を検出することができるため距離測定器も、ハンディ装置の一例となりうる。
以上、本発明を実施するための最良の形態について実施例を用いて説明したが、本発明はこうした実施例に何等限定されるものではなく、本発明の要旨を逸脱しない範囲内において種々の変形及び置換を加えることができる。
例えば、上記したSoC50、ASIC/FPGA40の構成要素は、CPU性能やASIC/FPGA40の回路規模等により、どちらに含まれていてもよい。
また、本実施形態ではインクを吐出して画像を形成すると説明したが、可視光、紫外線、赤外線、レーザなどを照射して画像を形成してもよい。この場合、印刷媒体12として例えば、熱や光に反応するものが用いられる。また、透明な液体を吐出してもよい。この場合、特定の波長域の光が照射されると可視情報が得られる。また、金属ペーストや樹脂などを吐出してもよい。