Technical

Report

University

of

Karlsruhe

Computer

Science

Department

ISSN

A

Review

of

Parallel

Processing

Approaches

to

Robot

Kinematics

and

Jacobian

Dominik

HENRICH

Joachim

KARL

und

Heinz

W?RN

Institute

for

Real-Time

Computer

Systems

and

Robotics

University

of

Karlsruhe

Karlsruhe

Germany

e-mail

Abstract

Due

to

continuously

increasing

demands

in

the

area

of

advanced

robot

control

it

became

necessary

to

speed

up

the

computation

One

way

to

reduce

the

computation

time

is

to

distribute

the

computation

onto

several

processing

units

In

this

survey

we

present

different

approaches

to

parallel

computation

of

robot

kinematics

and

Jacobian

Thereby

we

discuss

both

the

forward

and

the

reverse

problem

We

introduce

a

classification

scheme

and

classify

the

references

by

this

scheme

Introduction

Due

to

continuously

increasing

demands

in

the

area

of

advanced

robot

control

it

became

necessary

to

speed

up

the

computation

Since

it

should

be

possible

to

control

the

motion

of

a

robot

manipulator

in

real-time

it

is

necessary

to

reduce

the

computation

time

to

less

than

the

cycle

rate

of

the

control

loop

One

way

to

reduce

the

computation

time

is

to

distribute

the

computation

over

several

processing

units

There

are

other

overviews

and

reviews

on

parallel

processing

approaches

to

robotic

problems

Earlier

overviews

include

-LSB-

-RSB-

and

-LSB-

-RSB-

Lee

takes

a

closer

look

at

parallel

approaches

in

-LSB-

-RSB-

He

tries

to

find

common

features

in

the

different

problems

of

kinematics

dynamics

and

Jacobian

computation

The

latest

summary

is

from

Zomaya

et

al.

-LSB-

-RSB-

They

summarize

by

saying

that

the

field

of

research

is

still

widespread

and

can

be

roughly

divided

into

two

categories

approaches

using

general-purpose

processing

units

and

approaches

using

customized

chips

Their

conclusion

is

that

further

research

in

this

field

is

still

required

Further

information

can

be

found

on

the

Web

pages

of

the

PaRo

group

-LRB-

Parallel

Robotics

-RRB-

of

the

IPR

at

Here

we

show

how

the

computation

of

robot

control

can

be

done

in

parallel

and

try

to

give

a

complete

overview

In

Section

we

introduce

a

classification

scheme

In

Section

we

discuss

the

achievements

in

the

field

of

parallel

computation

of

robot

kinematics

The

parallel

computation

of

Jacobian

is

discussed

in

Section

Both

of

the

last

two

sections

are

again

split

up

into

the

forward

and

the

reverse

problem

In

the

summary

we

give

an

overview

of

parallel

computation

and

point

out

the

most

efficient

approaches

to

robot

control

Classification

Scheme

To

review

the

literature

of

the

past

years

we

will

introduce

a

classification

scheme

which

allows

us

to

structure

and

compare

the

approaches

up

to

now

-LRB-

Table

I

-RRB-

With

each

reference

in

the

list

at

the

end

of

this

article

there

is

a

list

of

keywords

indicating

the

classification

of

the

work

The

classification

scheme

is

divided

into

a

couple

of

aspects

The

aspect

Problem

refers

to

the

problem

that

is

treated

in

the

reference

The

aspect

level

of

parallelism

indicates

on

which

level

the

algorithm

exploits

the

parallelism

The

aspect

Interconnection

topology

indicates

about

the

logical

or

physical

topology

of

the

communication

network

The

aspect

processing

paradigm

describes

which

basic

approach

is

used

in

parallel

processing

The

aspect

Scalability

is

used

to

determine

whether

the

design

is

scalable

by

adding

or

removing

processing

units

or

whether

it

is

designed

for

a

fixed

number

of

processors

Other

aspects

include

coordinate

rotation

digital

computer

-LRB-

CORDIC

-RRB-

arithmetic

that

cover

a

large

number

of

references

But

there

are

approaches

that

are

only

used

in

very

few

references

and

that

are

introduced

to

show

that

there

is

an

alternative

We

introduce

four

levels

of

parallelism

with

decreasing

granularity

as

described

in

-LSB-

-RSB-

If

several

problems

-LRB-

e.g.

forward

kinematics

and

forward

Jacobian

-RRB-

are

solved

in

parallel

we

call

it

parallelism

on

the

task

level

The

characteristic

of

parallelism

on

the

joint

level

is

that

the

computations

are

done

for

all

joints

at

once

Another

level

involves

the

exploitation

of

parallelism

in

the

computation

chain

e.g.

if

there

are

several

independent

equations

The

fine-grained

parallelism

is

the

parallelism

on

the

operation

level

such

as

matrix

or

matrix/vector

multiplication

etc.

We

classify

the

processing

paradigm

in

multiple

instruction

multiple

data

-LRB-

MIMD

-RRB-

single

instruction

multiple

data

-LRB-

SIMD

-RRB-

and

systolic

architectures

There

is

a

slight

difference

between

SIMD

and

systolic

architectures

In

SIMD

the

same

instruction

is

applied

to

many

pieces

of

data

at

the

same

time

and

the

instruction

stream

is

a

stream

with

respect

to

time

whereas

in

systolic

architectures

several

instructions

are

applied

to

many

pieces

of

data

at

the

same

time

but

the

instructions

in

each

processing

unit

depend

only

on

the

arrival

of

the

data

So

there

is

nothing

like

an

instruction

stream

with

respect

to

time

We

also

distinguish

between

static

and

dynamic

load

balancing

If

static

load

balancing

is

used

the

task

schedule

is

computed

before

the

program

is

started

Dynamic

load

balancing

also

considers

the

current

workload

of

the

processors

and

different

communication

times

at

runtime

In

the

literature

both

possibilities

are

called

scheduling

Aspect

Keywords

Problem

forward

kinematics

reverse

kinematics

forward

Jacobian

reverse

Jacobian

Level

of

parallelism

task

level

joint

level

computation

chain

level

operation

level

Interconnection

topology

array

tree

complete

mesh

pipeline

hypercube

special

purpose

Processing

paradigm

MIMD

SIMD

systolic

architectures

Scalability

scalable

not

scalable

Others

CORDIC

dynamic

load

balancing

static

load

balancing

VLSI

line-oriented

robot

model

Table

I

List

of

Keywords

for

the

classification

of

the

different

approaches

to

parallel

computation

of

robot

kinematics

and

Jacobian

Parallel

Kinematics

Forward

kinematics

In

order

to

determine

the

current

position

and

orientation

of

the

end-effector

it

is

necessary

to

compute

matrix

multiplications

and

trigonometric

functions

The

matrices

are

following

the

notation

of

Denavit-Hartenberg

Altogether

this

computation

defines

a

function

from

the

joint

angle

set

to

the

end-effector

position

and

orientation

For

a

manipulator

with

n

joints

there

are

n

matrices

to

multiply

It

is

possible

to

do

these

matrix-multiplications

in

parallel

-LRB-

joint

level

parallelism

-RRB-

It

is

also

possible

to

do

a

matrixmultiplication

in

parallel

since

the

matrices

have

rows

and

columns

which

can

be

multiplied

independently

-LRB-

operation

level

parallelism

-RRB-

The

computation

the

trigonometric

functions

can

not

be

easily

done

in

parallel

But

there

are

also

approaches

that

go

in

this

direction

In

the

following

we

present

the

different

approaches

to

the

operation

level

computation

chain

level

joint

level

and

task

level

Hamisi

and

Fraser

exploit

the

parallelization

possibilities

on

the

operation

level

in

-LSB-

-RSB-

They

use

a

transputer

network

with

seven

In

this

article

the

developing

process

and

design

of

the

MIMD

computation

analysis

and

optimization

is

shown

in

detail

Because

of

limited

transputer

communication

paths

their

system

is

designed

with

only

seven

Transputers

Due

to

the

small

number

of

processors

the

process

is

mapped

onto

the

processing

units

-LRB-

PEs

-RRB-

without

an

extra

scheduling

mechanism

Since

they

compute

the

forward

kinematics

incrementally

they

compute

the

forward

kinematics

by

computing

the

forward

and

reverse

Jacobian

in

parallel

Hence

there

is

also

parallelism

on

the

task

level

-LRB-

See

Section

for

Jacobian

-RRB-

For

a

six

degree-of-freedom

-LRB-

DOF

-RRB-

manipulator

the

forward

kinematics

is

computed

in

ms.

Another

approach

exploiting

parallelism

on

the

operation

level

can

be

found

in

-LSB-

-RSB-

Funda

and

Paul

test

several

distinct

line-oriented

representations

of

a

spatial

screw

displacement

They

consider

line-based

geometry

of

screws

as

a

valuable

tool

for

transforming

lines

-LRB-

for

example

joint

axes

-RRB-

between

coordinate

frames

-LRB-

of

the

joints

-RRB-

They

obtain

parallel

solutions

with

up

to

PEs

and

a

speed-up

by

a

factor

of

to

One

of

the

conclusions

is

that

the

point-based

representations

are

simple

compact

and

computationally

very

efficient

and

are

therefore

preferable

in

real-time

applications

in

robotic

control

This

approach

should

be

studied

more

closely

as

it

was

never

proved

that

line-oriented

approaches

are

slower

on

special-purpose

architectures

Another

article

dealing

with

operation

level

parallelism

is

-LSB-

-RSB-

Fijany

and

Bejczy

offer

an

architecture

that

uses

parallelization

on

the

joint

and

operation

level

They

combine

the

computation

of

forward

kinematics

with

the

computation

of

the

Jacobian

The

design

called

Algorithmically

Specialized

Parallel

Architecture

for

Robotic

Computations

-LRB-

ASPARC

-RRB-

is

a

MIMD

architecture

on

the

processing

unit

level

and

each

processing

unit

is

a

SIMD

architecture

to

exploit

the

parallelism

on

the

operation

level

The

speed-up

from

the

joint

level

parallelism

is

and

the

overall

speed-up

is

for

a

six

DOF

manipulator

Walker

and

Cavallaro

use

an

array

of

CORDIC

PEs

to

compute

forward

kinematics

in

-LSB-

-RSB-

The

coordinate

transformation

between

the

single

joint

frames

are

done

in

CORDIC

PEs

as

vector

rotations

so

they

exploit

operation

level

parallelism

Since

they

compute

all

four

types

of

problems

at

the

same

time

they

make

use

of

task

level

parallelism

and

achieve

total

cycle

rates

of

ms.

There

is

only

one

implementation

of

forward

kinematics

on

a

single

VLSI

chip

This

architecture

is

developed

in

-LSB-

-RSB-

Leung

and

Shanblatt

exploit

parallelism

on

the

operation

level

to

achieve

a

cycle

rate

of

about

ms

for

a

six

DOF

manipulator

They

conclude

that

the

kinematic

computation

is

no

longer

the

bottleneck

but

rather

the

data

communication

Barhen

uses

a

scalable

hypercube

architecture

for

robot

control

Barhen

presents

an

implementation

for

robot

dynamics

but

the

architecture

is

also

suitable

for

the

computation

of

robot

kinematics

-LSB-

-RSB-

Static

and

dynamic

load

balancing

techniques

are

used

for

distributing

the

computation

tasks

on

the

processors

In

this

way

he

considers

the

data

transfer

caused

by

the

fact

that

the

processors

are

not

equally

suited

for

the

tasks

since

data

transfer

to

neighbour

processors

is

cheaper

than

data

transfer

to

further

processors

Similar

to

this

Ahmad

and

Li

propose

a

robot

controller

based

on

a

multiple

arithmetic

processing

unit

-LRB-

APU

-RRB-

in

-LSB-

-RSB-

They

claim

that

special-purpose

architectures

are

expensive

to

design

and

inflexible

so

they

decide

to

use

a

MIMD

architecture

similar

to

-LSB-

-RSB-

With

APUs

or

microprocessors

able

to

execute

floating

point

instructions

in

ns

it

is

possible

to

design

a

fast

multi-processor

network

Also

such

a

design

may

be

updated

with

faster

processor

types

as

they

come

onto

the

market

The

authors

present

simulation

results

for

a

PUMA

manipulator

computed

with

a

MC

Arithmetic

Coprocessor

They

ignore

the

communication

overhead

and

get

a

computation

time

with

APUs

of

ms

with

a

multiplying

time

of

ms

and

a

speed-up

of

They

use

a

scheduling

algorithm

of

the

type

depthfirst/implicit

heuristic

search

-LRB-

DF/IHS

-RRB-

for

the

distribution

of

the

computation

on

multiple

APUs

In

-LSB-

-RSB-

they

modify

the

DF/IHS

algorithm

and

consider

the

communication

overhead

and

even

a

possible

contention

They

compare

several

scheduling

algorithms

and

conclude

that

the

depth-first/minimized

overhead

heuristic

search

-LRB-

DF/MOHS

-RRB-

is

more

suitable

for

forward

kinematics

since

it

minimizes

the

data

transfer

Under

the

same

conditions

they

now

get

a

computation

time

of

ms.

Another

result

of

their

simulations

is

that

there

is

an

optimal

number

of

processors

since

the

communication

time

increases

with

an

increasing

number

of

processors

Pedicone

and

Johnson

present

a

Concurrent

Processor

Architecture

for

Control

-LRB-

CPAC

-RRB-

in

-LSB-

-RSB-

They

design

this

special

purpose

architecture

with

two

concurrent

processors

One

is

a

continuous

processing

element

-LRB-

CPE

-RRB-

the

other

is

a

discrete

processing

element

-LRB-

DPE

-RRB-

The

CPE

is

a

vector

signal

processor

for

computing

the

joint

angles

the

DPE

controls

discrete

inputs

and

outputs

It

also

monitors

and

if

necessary

intervenes

in

the

operation

of

the

CPE

Since

the

CPE

computes

the

joint

angles

for

all

joints

at

the

same

time

this

design

exploits

the

joint

level

parallelism

Further

exploitation

of

parallelism

at

the

joint

level

is

described

in

-LSB-

-RSB-

Lin

and

Lee

try

to

compute

all

the

kinematic

and

dynamic

problems

with

one

architecture

The

characteristics

of

the

kinematic

Jacobian

and

dynamic

algorithms

are

analyzed

and

the

common

features

are

extracted

Starting

from

this

they

propose

a

reconfigurable

dual

network

SIMD

with

n

PEs

Thus

they

are

on

the

joint

level

of

parallelization

They

are

able

to

solve

all

kinematic

and

dynamic

problems

by

changing

the

configuration

of

the

network

by

software

Another

aim

of

their

work

is

to

make

the

network

fault-tolerant

An

article

exploiting

the

parallelism

on

the

task

level

besides

-LSB-

-RSB-

is

-LSB-

-RSB-

Chen

et

al.

present

a

multiprocessor

architecture

with

a

bus

network

using

five

PEs

as

a

linear

array

While

a

single

floating

point

operation

needs

ms

their

kinematics

computation

achieves

rates

of

Hz

They

divide

orientation

and

position

computations

With

five

PEs

there

are

two

for

orientation

two

for

position

and

one

as

the

Programming

level

Their

system

manages

the

dynamics

computation

at

the

same

time

They

achieve

a

relative

speed-up

from

to

PEs

of

The

only

articles

dealing

with

scheduling

extensively

are

-LSB-

-RSB-

and

-LSB-

-RSB-

However

Ahmad

and

Li

also

achieve

speed-ups

of

which

is

less

than

the

predicted

speedup

of

calculated

by

the

product

of

the

joint

number

-LRB-

-RRB-

and

the

number

of

fine

grained

operations

done

in

parallel

-LRB-

-RRB-

With

a

higher

number

of

PEs

no

further

speed-up

is

possible

This

indicates

that

scheduling

is

not

necessary

for

forward

kinematics

and

that

parallelism

can

be

more

easily

achieved

by

exploiting

the

parallelism

on

several

levels

like

in

-LSB-

-RSB-

of

the

speed-ups

are

higher

than

in

the

presented

approaches

Parallelization

on

the

joint

level

will

achieve

a

maximum

speed-up

of

n

for

a

manipulator

with

n

joints

Most

approaches

parallelize

on

the

operation

level

On

this

level

the

maximum

speed-up

is

four

due

to

the

representation

as

matrices

Therefore

for

common

industrial

robots

like

PUMA

or

Stanford

arm

there

will

be

a

speed-up

of

less

than

n

Since

most

of

the

articles

address

only

one

level

of

parallelism

the

actual

speed-up

is

much

less

Reverse

Kinematics

The

task

of

reverse

kinematics

is

to

compute

the

joint

angle

set

from

the

position

and

orientation

of

the

end-effector

This

is

the

inverse

of

the

function

defined

in

the

previous

section

There

are

several

ways

to

compute

this

inverse

function

as

described

by

Lee

and

Chang

in

-LSB-

-RSB-

inverse

transform

-LRB-

closed

form

-RRB-

screw

algebra

dual

matrices

dual

quaternion

iterative

and

the

geometric

approach

In

the

following

we

present

the

iterative

form

and

the

closed

form

where

the

closed

form

references

are

classified

as

to

whether

they

use

the

CORDIC

architecture

or

not

The

iterative

way

as

proposed

by

-LSB-

-RSB-

has

not

been

further

investigated

for

parallel

processing

This

is

because

the

iterative

solution

requires

more

computations

than

the

closed

form

Additionally

neither

guarantees

convergence

nor

is

it

suited

for

parallelizing

since

the

next

iteration

step

can

be

computed

as

soon

as

the

previous

one

has

been

finished

For

the

most

common

industrial

robots

like

PUMA

Stanford

ASEA

or

MINIMOVER

there

is

the

solution

for

the

joint

angle

set

in

closed

form

In

this

case

the

computation

is

much

easier

because

the

problems

of

existence

and

uniqueness

are

solved

In

-LSB-

-RSB-

the

necessary

computations

are

given

multiplications

additions

square

root

and

transcendental

function

operations

All

these

are

floating

point

operations

and

so

the

main

goal

should

be

to

speed

up

the

computation

of

these

floating

point

operations

rather

than

to

speed

up

the

matrix

operations

as

for

forward

kinematics

They

propose

that

a

CORDIC

architecture

should

do

the

computation

work

and

they

present

an

architecture

with

a

latency

time

of

ms

and

a

new

computation

result

every

ms.

They

decompose

the

joint

angle

equations

manually

in

computational

modules

which

are

executed

by

a

CORDIC

processor

Then

the

acyclic

directed

graph

resulting

from

the

data

dependencies

is

balanced

by

inserting

delay

buffers

By

using

special

tapped-delay-line-buffers

the

number

of

buffers

resulting

in

a

maximum

pipelined

design

is

reduced

In

the

same

year

Wang

and

Butner

presented

a

new

architecture

in

-LSB-

-RSB-

for

which

they

also

used

a

CORDIC

subsystem

which

computes

new

results

every

ms.

A

special

purpose

processor

is

designed

to

do

the

computational

work

Up

to

four

of

these

can

work

in

parallel

and

hence

parallelize

on

the

highest

level

The

processors

can

be

controlled

independently

so

that

besides

reverse

kinematics

other

computations

can

be

done

on

idle

processors

A

minimal

configuration

consists

of

one

processor

and

can

control

up

to

ten

synchronized

axes

The

maximal

configuration

has

four

processors

and

can

control

up

to

axes

Since

there

are

three

separate

buses

and

three

independent

data

paths

in

the

special

purpose

processor

it

parallelizes

the

vector

additions

and

multiplications

-LRB-

operation

level

parallelism

-RRB-

But

there

is

a

CORDIC

subsystem

which

does

the

expensive

floating

point

and

trigonometric

evaluations

efficiently

The

authors

of

-LSB-

-RSB-

use

the

results

of

-LSB-

-RSB-

and

enhance

them

to

construct

the

system

on

a

single

VLSI

chip

The

original

work

has

been

modified

to

allow

the

use

of

bitserial

CORDIC

processors

The

computation

time

is

reduced

and

the

throughput

of

the

pipeline

is

increased

since

normalization

of

the

output

of

a

CORDIC

processor

is

avoided

They

do

the

normalization

not

as

usual

done

by

introducing

additional

CORDIC

iterations

but

by

adding

stand-alone

bit-serial

constant

multipliers

which

do

this

in

less

time

Another

architecture

using

CORDIC

processors

is

the

one

by

Walker

and

Cavallaro

-LSB-

-RSB-

They

use

an

array

of

CORDIC

processors

as

a

systolic

array

and

combine

it

with

a

general-purpose

processor

They

compute

the

reverse

kinematics

in

parallel

by

computing

the

Jacobian

matrix

and

its

pseudoinverse

in

parallel

Then

they

use

a

resolved-rate

approach

to

compute

the

joint

velocities

from

the

pseudoinverse

Jacobian

in

the

general-purpose

processor

Therefore

matrix-vector

multiplications

have

to

be

executed

The

desired

joint

angles

can

be

obtained

from

the

current

joint

velocities

and

joint

angles

The

array

is

also

able

to

perform

the

computation

of

forward

kinematics

Thus

all

kinematic

and

Jacobian

computations

can

be

done

by

this

architecture

They

have

a

higher

flexibility

than

-LSB-

-RSB-

because

they

use

the

same

systolic

array

for

multiple

algorithms

and

thus

the

CORDIC

processors

are

no

longer

a

part

of

one

pipeline

but

of

many

It

is

more

suitable

than

most

approaches

since

they

do

not

depend

on

an

existing

closed

form

solution

and

their

architecture

is

able

to

manage

nonredundant

manipulators

They

implement

the

systolic

array

in

VLSI

since

they

achieve

shorter

computation

times

with

it

Using

this

they

exploit

the

parallelism

at

the

task

level

and

at

the

operation

level

The

authors

of

-LSB-

-RSB-

and

-LSB-

-RSB-

propose

a

MIMD

architecture

with

static

load

balancing

They

compare

different

scheduling

algorithms

and

compute

the

reverse

kinematics

in

about

ms.

They

use

a

scalable

number

of

arithmetic

processing

units

-LRB-

APU

-RRB-

so

that

they

can

adapt

to

closed

form

solutions

for

different

manipulators

independent

of

the

number

of

joints

As

mentioned

in

Section

they

parallelize

at

the

computation

chain

level

The

authors

Zhang

and

Paul

also

apply

the

MIMD

processing

paradigm

in

the

references

-LSB-

-RSB-

and

-LSB-

-RSB-

They

use

the

closed

form

solution

to

compute

the

reverse

kinematics

They

extrapolate

the

joint

angles

for

the

current

computation

from

that

from

earlier

computations

in

order

to

remove

the

data

dependencies

between

the

single

equations

With

this

loss

of

dependency

the

equations

can

be

easily

done

in

parallel

Not

only

do

they

try

to

increase

the

data

throughput

as

in

-LSB-

-RSB-

but

also

to

reduce

the

latency

time

They

use

a

multiprocessor

system

with

one

computing

processor

for

each

joint

and

one

supervisor

They

achieve

a

speedup

of

approximately

For

parallel

manipulators

Gosselin

exploits

the

mechanical

architectur

to

obtain

parallel

computational

algorithms

-LSB-

-RSB-

For

the

reverse

kinematics

he

obtains

an

independent

equation

for

each

joint

computing

the

length

of

each

manipulator

with

given

position

and

orientation

of

the

platform

Thus

this

is

joint

level

parallelism

He

achieves

a

theoretical

speedup

of

n

The

last

article

-LSB-

-RSB-

in

this

section

deals

with

the

general

parallelization

of

robotic

computational

tasks

Nabhan

and

Zomaya

use

a

graph-based

approach

to

map

computational

tasks

on

a

MIMD

architecture

Their

algorithm

automatically

generates

the

task

graph

for

a

given

architecture

The

algorithm

considers

the

network

topology

and

communication

constraints

making

it

scalable

for

a

different

number

of

processors

The

whole

parallelizing

process

is

done

automatically

For

a

chosen

robot

manipulator

the

computational

model

is

generated

and

simplified

a

task

graph

is

generated

compressed

and

the

tasks

are

assigned

to

the

processors

They

develop

a

special

annealing

algorithm

since

the

dynamic-highest-levelfirst/most-immediate-successors

first

-LRB-

DHLF/MISF

-RRB-

is

time

consuming

Other

computation

methods

than

the

iterative

or

the

closed

form

are

listed

in

-LSB-

-RSB-

seem

to

be

interesting

enough

to

encourage

further

research

work

Parallel

Jacobian

Forward

Jacobian

The

computation

of

the

forward

Jacobian

is

similar

to

the

forward

kinematics

so

many

references

deal

with

both

problems

The

velocity

of

the

end-effector

should

be

computed

from

the

joint

rates

This

requires

coordinate

transformations

from

one

joint

to

every

other

joint

Coordinate

transformations

require

for

example

the

multiplication

of

matrices

as

introduced

by

Denavit

and

Hardenberg

There

are

three

main

approaches

to

the

forward

Jacobian

General-purpose

architectures

not

specially

designed

for

the

problem

of

robot

control

spezialized

architectures

with

generalpurpose

processors

or

arithmetic

units

and

architectures

especially

designed

for

robot

control

with

microprocessors

that

are

not

off-the-shelf

In

the

following

we

will

discuss

these

three

approaches

of

robot

arm

control

The

early

approaches

using

general-purpose

architectures

use

only

scheduling

approaches

Luh

and

Lin

divided

the

entire

task

into

subtasks

in

-LSB-

-RSB-

and

rearranged

them

to

distribute

the

computational

tasks

efficiently

on

multiple

PEs

They

ignored

the

data

transfer

time

since

this

consumes

less

time

then

their

simulated

time

of

ms

per

multiplication

They

assumed

a

MIMD

architecture

with

general-purpose

PEs

and

they

assigned

one

PE

to

each

joint

exploiting

parallelism

at

the

joint

level

Although

they

mainly

consider

dynamic

computations

their

work

is

adaptable

for

Jacobian

computations

since

the

main

issue

of

their

work

is

the

design

of

a

near-optimal

scheduling

algorithm

This

work

is

continued

by

Kasahara

and

Narita

in

-LSB-

-RSB-

who

use

common

and

processors

and

a

scalable

MIMD

architecture

They

also

consider

the

dynamics

problem

but

their

results

in

scheduling

and

load

balancing

are

also

applicable

for

the

forward

Jacobian

They

employ

two

scheduling

algorithms

DF/IHS

as

discussed

in

Section

and

Critical

Path

Most

Immediate

Successors

First

-LRB-

CP/MISF

-RRB-

They

recommend

DF/IHS

since

with

CP/MISF

the

optimality

and

accuracy

of

the

result

can

not

be

guaranteed

Another

approach

based

on

general-purpose

architectures

was

investigated

by

Kokusho

et

al.

in

-LSB-

-RSB-

In

a

multi-transputer

network

they

use

a

double-layered

load

distribution

with

a

DF/IHS

for

the

logical

layer

and

a

Distributed

Problem

Solver

for

Task

Scheduling

-LRB-

DPSTS

-RRB-

for

the

physical

layer

This

is

because

the

DF/IHS

can

not

consider

timedelay

due

to

inter-processor

communication

and

the

cost

for

message

routings

The

DPSTS

modifies

and

optimizes

the

schedule

received

from

DF/IHS

according

to

the

architectural

features

The

DPSTS

is

implemented

as

a

part

of

the

firmware

on

each

PE

Finally

an

article

handling

the

parallel

processing

on

general

MIMD

architectures

is

-LSB-

-RSB-

by

Nabhan

and

Zomaya

They

exploit

the

parallelism

on

the

level

of

the

computation

chain

using

a

graph-based

approach

that

considers

the

communication

overhead

congestion

possibilities

and

the

network

topology

Therefore

it

is

independent

of

the

concrete

hardware

implementation

They

achieved

computation

times

for

the

forward

Jacobian

in

the

range

of

ms

and

a

speed-up

of

with

PEs

for

a

Thus

they

showed

that

it

is

not

necessary

to

develop

an

expensive

special-purpose

architecture

or

even

special

PEs

to

solve

the

forward

Jacobian

These

approaches

with

general-purpose

architectures

can

be

scalable

and

a

change

in

the

algorithm

does

not

cause

any

change

in

the

hardware

As

mentioned

in

Section

Hamisi

and

Fraser

described

the

implementation

on

a

network

of

transputers

in

-LSB-

-RSB-

This

article

covers

another

approach

They

use

a

specialpurpose

network

topology

and

general-purpose

PEs

Therefore

they

can

use

cheap

components

to

adapt

their

hardware

to

the

problem

of

robot

control

and

exploit

the

potential

of

parallelism

in

the

algorithm

The

main

difference

from

the

previously

discussed

approaches

is

to

adapt

the

specialization

of

the

network

topology

to

the

problems

of

robot

control

In

-LSB-

-RSB-

the

control

itself

is

done

by

computing

the

actual

position

of

the

end-effector

with

forward

kinematics

and

at

the

same

time

computing

the

forward

Jacobian

From

that

the

reverse

Jacobian

is

calculated

to

compute

the

necessary

joint

rates

from

the

difference

of

the

actual

and

desired

positions

of

the

end-effector

in

order

to

correct

the

position

The

level

of

parallelism

is

the

joint

level

since

it

assigns

a

PE

to

each

column

of

the

Jacobian

matrix

The

columns

of

the

Jacobian

describe

the

corresponding

joint

rates

There

is

also

parallelism

at

the

task

level

since

Hamisi

and

Fraser

compute

forward

kinematics

and

the

Jacobian

in

parallel

They

achieve

a

computation

time

of

ms

and

a

speed-up

of

for

a

six

DOF

manipulator

with

PEs

A

second

approach

uses

common

PEs

with

no

special

assumptions

and

a

specialized

hardware

and

software

architecture

-LSB-

-RSB-

Contrary

to

-LSB-

-RSB-

Lin

and

Lee

do

not

use

a

MIMD

but

a

SIMD

topology

They

assume

that

advanced

robot

control

schemes

require

all

four

kinematics

and

Jacobian

problems

and

additionally

the

dynamics

problem

So

they

designed

a

machine

providing

the

flexibility

to

solve

all

problems

while

maintaining

high

efficiency

To

achieve

this

they

study

these

features

of

the

robot

control

problems

and

describe

a

parallel

architecture

that

matches

the

common

features

They

exploit

parallelism

at

the

jointlevel

using

identical

PEs

for

each

joint

and

two

reconfigurable

networks

They

show

the

implementation

of

dynamics

computations

but

as

the

authors

point

out

it

is

also

suited

for

kinematics

and

Jacobian

computation

In

-LSB-

-RSB-

Zomaya

presents

different

architectures

to

implement

parallel

Jacobian

computation

In

all

architectures

the

parallelism

at

the

joint

level

is

exploited

using

and

transputers

Various

network

schemes

to

minimize

the

data

transfer

between

the

PEs

are

investigated

As

a

result

the

minimization

of

data

transfer

between

the

PEs

is

more

important

than

a

uniform

load

of

each

PE

With

an

architecture

with

PEs

for

a

six

DOF

manipulator

a

computation

time

of

ms

and

a

speed-up

of

is

achieved

The

article

by

Gosselin

-LSB-

-RSB-

presents

no

processing

paradigm

but

since

the

algorithms

for

reverse

kinematics

and

forward

Jacobian

are

presented

with

each

PE

doing

the

same

we

suggest

the

SIMD

topology

Hence

this

reference

with

a

speed-up

of

n

is

classified

as

one

with

a

special-purpose

network

topology

and

general-purpose

PEs

One

of

the

first

articles

using

systolic

networks

to

compute

the

forward

Jacobian

is

-LSB-

-RSB-

by

Orin

Olson

and

Chao

Orin

and

Schrader

have

published

a

serial

algorithm

to

compute

the

Jacobian

in

-LSB-

-RSB-

The

difficulties

in

implementing

in

real

time

led

them

to

a

parallel

approach

They

discuss

a

serial

a

pipeline

and

a

parallel

algorithm

for

the

computation

of

the

Jacobian

They

conclude

that

it

is

possible

to

reduce

the

computation

time

from

O

-LRB-

n

-RRB-

to

O

-LRB-

log?n

-RRB-

and

for

n

to

achieve

a

speed-up

of

with

PEs

with

a

parallel

algorithm

exploiting

the

joint

level

parallelism

The

pipeline

algorithm

can

reduce

the

computation

time

and

therefore

improve

data

throughput

but

the

latency

time

is

the

same

as

in

the

serial

case

They

introduce

additional

redundant

computations

in

the

parallel

algorithm

to

achieve

local

communication

They

use

the

hypercube

topology

since

the

single

matrix

operations

can

be

simply

mapped

on

it

Furthermore

it

is

possible

to

propagate

a

result

in

log?n

steps

to

n

PEs

so

that

the

desired

O

-LRB-

log?n

-RRB-

time

could

be

achieved

After

the

algorithm

and

the

architecture

were

designed

they

designed

a

robotics

processor

on

a

VLSI

chip

with

four

ports

and

four

internal

buses

based

on

a

Harvard

architecture

In

-LSB-

-RSB-

and

-LSB-

-RSB-

Yeung

and

Lee

compared

the

Jacobian

computation

on

the

uniprocessor

SIMD

and

systolic

architectures

They

offer

two

possibilities

for

the

systolic

case

a

linear

pipeline

with

PEs

and

a

computation

time

of

O

-LRB-

n

-RRB-

or

a

parallel

pipeline

with

O

-LRB-

n?log?n

-RRB-

PEs

and

a

computation

time

of

cycles

The

systolic

architectures

are

completely

implemented

in

VLSI

The

main

point

of

these

four

articles

on

systolic

architectures

and

their

implementation

in

VLSI

is

the

fact

that

the

Jacobian

computation

is

not

only

faster

because

of

faster

computation

times

of

primitive

operations

and

communication

times

in

a

systolic

array

but

also

because

the

algorithms

implementable

in

VLSI

are

in

O

-LRB-

log?n

-RRB-

In

-LSB-

-RSB-

and

in

the

later

publication

-LSB-

-RSB-

Sadayappan

Ling

Olson

and

Orin

introduced

the

idea

of

parallelism

on

different

levels

They

designed

an

architecture

on

two

levels

They

developed

a

Robotics

Vector

Processor

-LRB-

RVP

-RRB-

which

contains

three

multipliers

and

three

adders

controlled

as

a

SIMD

to

exploit

parallelism

on

the

operation

level

since

the

main

task

was

to

multiply

matrices

and

vectors

The

RVPs

themselves

are

controlled

as

MIMD

so

that

their

task

can

be

presented

in

the

usual

task

graph

for

applying

schedule

optimization

Hence

the

level

exploited

here

is

the

computation

chain

level

Two

further

references

-LSB-

-RSB-

and

-LSB-

-RSB-

consider

the

implementation

of

CORDIC

arithmetic

for

Jacobian

computation

The

CORDIC

arithmetic

is

implemented

in

VLSI

In

-LSB-

-RSB-

the

architecture

is

systolic

since

that

is

the

most

suitable

for

CORDIC

processors

Hemkumar

and

Cavallaro

consider

the

difficulty

of

computing

the

forward

and

reverse

Jacobian

for

redundant

manipulators

See

Section

They

also

use

CORDIC

PEs

to

combine

them

in

a

systolic

array

to

form

a

systolic

machine

which

is

then

implemented

in

VLSI

Comparing

the

different

approaches

it

seems

that

there

are

advantages

and

disadvantages

for

all

of

them

But

since

the

general-purpose

PEs

in

special-purpose

interconnection

networks

achieve

a

computation

time

of

ms

in

-LSB-

-RSB-

making

real-time

control

possible

it

is

questionable

whether

the

further

speed-up

of

VLSI

implementation

justifies

its

inflexibility

On

the

other

hand

the

exploitation

of

the

operation

level

is

only

valuable

in

VLSI

implementation

since

the

communication

overhead

would

otherwise

be

too

big

Reverse

Jacobian

The

problem

of

the

reverse

Jacobian

is

to

compute

the

joint

velocities

from

the

desired

endeffector

velocity

There

are

more

computations

to

be

made

than

for

the

former

three

problems

The

computations

are

matrix

multiplication

vector

addition

matrix-vector

multiplication

and

the

computation

of

the

inverse

or

pseudo-inverse

of

the

Jacobian

For

non-redundant

manipulators

the

computation

of

the

reverse

Jacobian

is

the

inversion

of

the

Jacobian

matrix

computed

for

the

forward

Jacobian

The

articles

-LSB-

-RSB-

consider

this

case

In

the

redundant

case

where

the

inverse

matrix

does

not

exist

a

pseudo-inverse

must

be

computed

This

case

is

treated

in

-LSB-

-RSB-

There

are

two

equations

to

compute

the

joint

velocities

using

the

pseudo-inverse

one

with

a

projection

of

an

arbitrary

vector

on

the

space

of

the

Jacobian

the

other

using

some

secondary

criterion

to

fix

the

arbitrary

vector

The

first

equation

is

the

faster

one

in

most

references

since

there

are

less

operations

to

do

The

first

article

considering

the

singularities

in

robot

work

space

is

-LSB-

-RSB-

Chang

and

Lee

concentrate

on

the

problem

of

numerical

instabilities

in

the

computation

in

the

pseudoinverse

of

the

Jacobian

They

use

a

residue

arithmetic

to

avoid

floating

point

errors

Their

parallelization

is

hence

on

three

levels

they

use

a

data-driven

processor

array

for

exploiting

the

operation

level

parallelism

a

linear

array

as

a

pipeline

to

exploit

the

joint

level

parallelism

and

separate

processing

units

for

any

modulus

in

the

residue

arithmetic

as

a

very

fine

grained

level

under

the

operation

level

The

number

of

moduli

is

in

the

range

of

two

to

ten

depending

on

the

desired

numerical

precision

Especially

exploiting

parallelism

in

the

residue

arithmetic

makes

the

parallel

design

valuable

The

theoretical

speed-up

is

m.n

where

n

is

the

joint

number

and

m

the

number

of

moduli

For

a

six

DOF

manipulator

the

speed-up

is

about

They

achieve

a

latency

time

of

ms

for

a

manipulator

The

architecture

proposed

by

Walker

and

Cavallaro

-LSB-

-RSB-

is

also

capable

of

computing

the

pseudo-inverse

Jacobian

since

their

CORDIC

array

is

able

to

compute

the

singular

value

decomposition

-LRB-

SVD

-RRB-

With

this

the

pseudo-inverse

can

be

easily

computed

As

mentioned

in

Section

they

exploit

parallelism

at

the

task

level

and

similar

to

-LSB-

-RSB-

at

the

operation

level

by

computing

the

rows

of

the

pseudo-inverse

Jacobian

A

further

approach

for

redundant

manipulators

is

discussed

by

Hemkumar

and

Cavallaro

in

-LSB-

-RSB-

They

use

an

array

of

CORDIC

PEs

to

exploit

parallelism

on

the

operation

level

Different

implementations

of

CORDIC

PEs

are

investigated

to

speed-up

the

SVD

computation

and

matrix

multiplication

The

use

of

CORDIC

leads

to

an

operation

level

parallelism

In

contrast

to

-LSB-

-RSB-

they

do

not

use

an

array

of

CORDIC

PEs

but

a

specialpurpose

topology

The

latest

work

investigating

parallel

computations

of

reverse

Jacobian

for

redundant

manipulators

is

-LSB-

-RSB-

Maciejewski

and

Reagin

achieve

a

speed-up

of

with

four

digital

signal

processors

-LRB-

DSP

-RRB-

for

a

seven

DOF

manipulator

-LRB-

CESAR

-RRB-

As

opposed

to

other

approaches

they

exploit

parallelism

at

the

joint

level

since

they

calculate

two

columns

of

the

SVD

in

each

PE

Each

of

four

PEs

communicate

with

two

other

PEs

since

the

PEs

are

lined

up

in

a

linear

array

An

approach

not

considering

singularities

in

the

manipulator

work

space

is

presented

in

-LSB-

-RSB-

They

compute

the

reverse

Jacobian

as

an

inversion

of

the

forward

Jacobian

using

Gaussian

elimination

Their

transputer

cluster

exploits

joint

level

parallelism

since

each

of

the

six

PEs

calculates

a

column

needed

for

a

six

DOF

manipulator

They

use

the

MIMD

as

the

processing

paradigm

though

they

do

not

use

a

scheduling

algorithm

Since

they

use

a

special

purpose

interconnection

topology

their

approach

is

not

scalable

without

complete

redesign

Zomaya

uses

a

Transputer

network

like

Hamisi

and

Fraser

in

-LSB-

-RSB-

He

discusses

the

methods

for

parallel

inversion

As

a

result

he

concludes

that

the

Gaussian

elimination

method

is

faster

then

the

Gauss-Jordan

method

Although

the

speed-ups

with

Gauss-Jordan

are

higher

The

computation

time

for

a

six

DOF

is

ms

and

the

speed-up

is

with

PEs

An

interesting

approach

is

-LSB-

-RSB-

Fujioka

and

Kameyama

design

a

PE

using

VLSI

techniques

They

combine

two

adders

and

two

multipliers

on

each

PE

to

exploit

operation

level

parallelism

Since

each

PE

has

a

switching

unit

for

its

input

and

output

they

can

be

configured

in

different

topologies

for

different

problems

E.g.

for

vector

addition

they

can

be

configured

as

a

linear

array

and

for

matrix

multiplication

they

can

be

configured

as

an

two-dimensional

array

Since

the

PEs

are

reconfigurable

the

architecture

is

scalable

Fujioka

and

Kameyama

achieve

a

latency

time

of

less

than

ms

for

a

twelve

DOF

redundant

manipulator

As

the

number

of

PEs

increases

with

increasing

number

of

controlled

joints

they

also

exploit

the

parallelism

of

joint

level

Finally

Kokusho

et

al.

discuss

the

use

of

scheduling

algorithms

and

load-distribution

mechanisms

for

MIMD

architectures

for

computing

robot

control

in

-LSB-

-RSB-

Since

they

use

scheduling

algorithms

it

is

obvious

that

they

exploit

parallelism

at

the

computation

chain

level

They

achieve

speed-ups

up

to

with

PEs

for

the

Stanford

arm

They

assume

a

square

array

as

the

interconnection

topology

As

presented

there

are

approaches

using

all

levels

of

parallelism

The

most

promising

approaches

seem

to

be

the

ones

using

parallelism

on

the

joint

and

operation

levels

whereas

the

computation

chain

level

suffers

from

low

efficiency

As

shown

in

-LSB-

-RSB-

for

nonredundant

manipulators

it

is

neither

necessary

to

implement

the

algorithm

in

VLSI

nor

to

use

special-purpose

PEs

like

CORDIC

Even

the

most

complex

problem

of

robot

position

control

the

reverse

Jacobian

can

be

computed

in

real-time

using

appropriate

parallel

architectures

with

general-purpose

PEs

For

redundant

manipulators

the

additional

computation

work

requires

a

parallelization

on

many

levels

like

in

-LSB-

-RSB-

but

this

case

seems

to

be

solvable

in

real-time

also

Summary

We

have

shown

that

the

parallel

processing

approaches

of

robot

kinematics

and

Jacobian

render

short

computation

times

Hence

the

architectures

and

algorithms

developed

for

parallel

robot

control

allow

real-time

applications

since

common

latency

times

are

less

than

ms

for

all

four

problems

of

robot

control

This

is

far

below

the

cycle

rates

of

a

manipulator

-LRB-

a

few

ms

-RRB-

There

is

still

a

great

demand

for

faster

computation

since

with

increasing

number

of

manipulator

joints

e.g.

for

a

replica

of

the

human

hand

or

for

mechanically

stiff

parallel

manipulators

only

parallel

approaches

can

calculate

this

in

about

the

same

time

as

for

six

DOF

manipulators

-LSB-

-RSB-

The

other

main

reason

for

perpetual

demand

on

more

computational

power

is

the

wish

to

reduce

positioning

errors

through

further

reduction

of

the

sample

rate

-LSB-

-RSB-

Other

incentives

for

reducing

computation

time

are

the

skills

of

advanced

robots

Tactile

and

vision

sensors

make

it

possible

to

avoid

moving

obstacles

but

to

do

this

the

robot

kinematics

has

to

be

fast

enough

to

evade

or

stop

effectively

-LSB-

-RSB-

The

individual

articles

reflect

the

variety

of

possible

approaches

Our

list

of

keywords

in

Table

I

serves

as

an

overview

of

these

approaches

The

conclusion

as

to

which

architecture

or

parallelization

is

best

can

not

be

made

There

are

too

many

advantages

and

disadvantages

for

each

approach

There

is

no

such

thing

as

a

universal

parallel

robot

control

architecture

though

some

authors

claim

this

There

is

still

a

wide

field

of

research

to

be

done

for

developing

small

cheap

flexible

fast

robot

control

systems

with

parallel

processing

Acknowledgements

The

work

was

performed

at

the

Institute

for

Real-Time

Computer

Systems

and

Robotics

-LRB-

IPR

-RRB-

under

Prof.

Dr.-Ing

U.

Rembold

Prof.

Dr.-Ing

H.

W?rn

and

Prof.

Dr.-Ing

R.

Dillmann

at

University

of

Karlsruhe

We

wish

to

thank

Albert

Y.

Zomaya

for

his

interest

in

our

work

Many

thanks

to

Stefanie

Grupp

for

proof-reading

References

-LSB-

-RSB-

S.

Ahmad

B.

Li

Optimal

design

of

multiple

arithmetic

processor-based

robot

controllers

Proc

IEEE

Int

Conf

on

Robotics

and

Automation

pp.

Keywords

forward

and

reverse

kinematics

computation

chain

level

one

dimensional

array

MIMD

static

load

balancing

scalable

-LSB-

-RSB-

S.

Ahmad

B.

Li

Robot

control

computation

in

microprocessor

systems

with

multiple

arithmetic

processors

using

a

modified

DF/IHS

scheduling

algorithm

IEEE

Trans

on

Systems

Mman

and

Cybernetics

Vol

No

September/October

pp.

Keywords

forward

and

reverse

kinematics

computation

chain

level

one

dimensional

array

MIMD

static

load

balancing

scalable

-LSB-

-RSB-

J.

Barhen

Hypercube

ensembles

an

architecture

for

intelligent

robots

Computer

architectures

for

robotics

and

automation

-LRB-

Eds

J.

H.

Graham

-RRB-

Gordon

and

Breach

science

publishers

New

York

Keywords

forward

kinematics

dynamics

computation

chain

level

hypercube

MIMD

dynamic

load

balancing

static

load

balancing

scalable

-LSB-

-RSB-

F.

D.

Capriot

S.

S.

Khanuja

M.

M.

Stanisic

O.

Duta

A

singularity

free

six

degree

of

freedom

manipulator

in

Advances

in

robot

kinematics

by

S.

Stifter

Jadran

Lenarcic

Springer-Verlag/Wien

pp.

Keywords

General

-LSB-

-RSB-

P.

R.

Chang

C.

S.

G.

Lee

Residue

arithmetic

VLSI

array

architecture

for

manipulator

pseudo-inverse

Jacobian

computation

IEEE

Trans

on

Robotics

and

Automation

Vol

No.

October

pp.

Keywords

reverse

Jacobian

operation

and

joint

level

array

network

linear

pipe

systolic

array

SIMD

VLSI

integer

arithmetic

scalable

-LSB-

-RSB-

J.

B.

Chen

R.

S.

Fearing

B.

S.

Armstrong

J.

W.

Burdick

NYMPH

A

multiprocessor

for

manipulation

applications

Proc

IEEE

Int

Conf

on

Robotics

and

Automation

pp.

Keywords

forward

kinematics

task

level

bus

network

MIMD

scalable

-LSB-

-RSB-

A.

Fijany

A.

Bejczy

Parallel

computation

systems

for

robotics

algorithms

and

architectures

New

York

World

Scientific

Publishing

Co.

Pte.

Ltd.

Keywords

forward

kinematics

and

forward

Jacobian

operation

and

joint

level

SIMD

MIMD

non-scalable

-LSB-

-RSB-

Y.

Fujioka

M.

Kameyama

reconfigurable

parallel

VLSI

processor

for

robot

control

Proc

Int

Conf

on

Robotics

and

Automation

Keywords

forward

kinematics

and

reverse

Jacobian

operation

and

joint

level

one

or

two

dimensional

array

SIMD

VLSI

scalable

-LSB-

-RSB-

J.

Funda

R.

P.

Paul

A

computational

analysis

of

screw

transformations

in

robotics

IEEE

Trans

on

Robotics

and

Automation

Vol

No.

June

pp.

Keywords

forward

kinematics

operation

level

line-oriented

-LSB-

-RSB-

C.

M.

Gosselin

Parallel

computational

algorithms

for

the

kinematics

and

dynamics

of

planar

and

spatial

parallel

manipulators

Trans

of

the

ASME

Journal

of

dynamic

Systems

Measurement

and

Control

Vol

No

March

pp.

Keywords

reverse

kinematics

forward

Jacobian

joint

level

SIMD

nonscalable

-LSB-

-RSB-

J.

H.

Graham

Special

computer

architectures

for

robotics

tutorial

and

survey

IEEE

Trans

on

Robotics

and

Automation

Vol

No.

October

pp.

Keywords

Overview

-LSB-

-RSB-

F.

Hamisi

D

A

Fraser

Transputer-based

implementation

of

real-time

robot

position

control

Microprocessors

and

microsystems

Vol

No.

December

pp.

Keywords

forward

kinematics

forward

and

reverse

Jacobian

operation

task

and

joint

level

special

purpose

MIMD

non-scalable

-LSB-

-RSB-

R.

G.

Harber

J.

Li

X.

Hu

S.

C.

Bass

The

application

of

bit-serial

CORDIC

units

to

the

design

of

inverse

kinematics

processors

Proc

IEEE

Conf

on

Robotics

and

Automation

pp.

Keywords

reverse

kinematics

computation

chain

level

CORDIC

VLSI

non-scalable

-LSB-

-RSB-

N.

D.

Hemkumar

J.

R.

Cavallaro

Redundant

and

on-line

CORDIC

for

unitary

transformations

IEEE

Trans

on

computers

Vol

No.

August

pp.

Keywords

forward

and

reverse

Jacobian

operation

level

systolic

array

VLSI

CORDIC

non-scalable

-LSB-

-RSB-

H.

Kasahara

S.

Narrita

Parallel

processing

of

robot-arm

control

computation

on

a

multimicroprocessor

system

IEEE

Journal

of

Robotics

and

Automation

Vol

No.

pp.

Keywords

forward

kinematics

MIMD

static

load

balancing

scalable

-LSB-

-RSB-

P.

K.

Khosla

Choosing

sampling

rates

for

robot

control

Proc

IEEE

Int

Conf

on

Robotics

and

Automation

Vol

pp

Keywords

General

-LSB-

-RSB-

Y.

Kokusho

Parallel

computation

for

manipulator

control

using

the

doublelayered

load-distribution

mechanism

on

multi-transputer

networks

Intelligent

Autonomy

Systems

IOS

Press

Keywords

forward

and

reverse

Jacobian

computation

chain

level

MIMD

scheduling

scalable

-LSB-

-RSB-

C.

S.

G.

Lee

P.

R.

Chang

A

maximum

pipelined

CORDIC

architecture

for

inverse

kinematic

position

computation

IEEE

Journal

of

Robotics

and

Automation

Vol

No.

October

pp.

Keywords

reverse

kinematics

computation

chain

level

pipeline

CORDIC

static

load

balancing

non-scalable

-LSB-

-RSB-

C.

S.

G.

Lee

Introduction

Robot

manipulators

algorithms

and

architectures

IEEE

Trans

on

Robotics

and

Automation

Vol

No.

October

pp.

Keywords

Overview

-LSB-

-RSB-

C.

S.

G.

Lee

On

the

parallel

algorithms

for

robotics

computation

Sensorbased

Robots

Algorithms

and

Architectures

-LRB-

Eds

C.

S.

G.

Lee

-RRB-

SpringerVerlag

New

York

pp.

Keywords

Overview

-LSB-

-RSB-

S.

S.

Leung

M.

A.

Shanblatt

Real-time

DKS

on

a

single

chip

IEEE

Journal

of

Robotics

and

Automation

Vol

No.

August

pp.

Keywords

forward

kinematics

operation

level

VLSI

non-scalable

-LSB-

-RSB-

C.-T

Lin

C.

S.

G.

Lee

Fault-tolerant

reconfigurable

architecture

for

robot

kinematics

and

dynamics

computations

IEEE

Trans

on

Systems

Man

and

Cybernetics

Vol

No.

September/October

Keywords

kinematics

and

Jacobian

joint

level

generalized

cube

network

SIMD

fault-tolerant

-LSB-

-RSB-

J.

Y.

S.

Luh

C.

S.

Lin

Scheduling

of

parallel

computation

for

a

computercontrolled

mechanical

manipulator

IEEE

Trans

on

Systems

Man

and

Cybernetics

Vol

No.

March/April

pp.

Keywords

forward

Jacobian

joint

level

MIMD

scheduling

-LSB-

-RSB-

A.

A.

Maciejewski

J.

M.

Reagin

A

parallel

algorithm

and

architecture

for

the

control

of

kinematically

redundant

manipulators

IEEE

Trans

on

Robotics

and

Automation

Vol

No.

August

pp.

Keywords

reverse

Jacobian

joint

level

linear

array

MIMD

non-scalable

-LSB-

-RSB-

T.

M.

Nabhan

A.

Y.

Zomaya

Application

of

parallel

processing

to

robotic

computational

tasks

The

Int

Journal

of

Robotics

Research

Vol

No.

February

Keywords

forward

Jacobian

computation

chain

level

MIMD

scalable

-LSB-

-RSB-

D.

E.

Orin

W.

W.

Schrader

Efficient

computation

of

the

Jacobian

for

robot

manipulators

Int

Journal

of

Robotics

Research

Vol

No.

Winter

pp.

Keywords

forward

Jacobian

-LSB-

-RSB-

D.

E.

Orin

K.

W.

Olson

H.

H.

Chao

Systolic

architectures

for

computation

of

the

Jacobian

for

robot

manipulators

in

Computer

Architectures

for

Robotics

and

Automation

-LRB-

Eds

James

H.

Graham

-RRB-

Gordon

and

Breach

Science

Publishers

pp.

Keywords

forward

Jacobian

joint

level

hypercube

systolic

scalable

-LSB-

-RSB-

D.

E.

Orin

P.

Sadayappan

Y.

L.

C.

Ling

K.

W.

Olson

Robotics

Vector

Processor

architecture

for

real-time

control

Sensor-based

Robots

Algorithms

and

Architectures

-LRB-

Eds

C.

S.

G.

Lee

-RRB-

Springer-Verlag

New

York

pp.

Keywords

forward

Jacobian

and

forward

kinematics

operation

and

computation

chain

level

MIMD

SIMD

VLSI

-LSB-

-RSB-

J.

T.

Pedicone

T.

L.

Johnson

Robot

motion

control

with

CPAC

in

Computer

Architectures

for

Robotics

and

Automation

-LRB-

Eds

J.

Graham

-RRB-

New

York

Gordon

and

Breach

Science

Publishers

March

pp

Keywords

forward

kinematics

joint

level

MIMD

non-scalable

-LSB-

-RSB-

P.

Sadayappan

Y.-L

C.

Ling

K.

W.

Olson

D.

E.

Orin

A

restructable

VLSI

robotics

vector

processor

architecture

for

real-time

control

IEEE

Trans

on

Robotics

and

Automation

Vol

No

October

pp.

Keywords

forward

kinematics

and

forward

Jacobian

operation

and

computation

chain

level

MIMD

SIMD

VLSI

-LSB-

-RSB-

L.

W.

Tsai

A.

P.

Morgan

Solving

the

kinematics

of

the

most

general

sixand

five-DOF

manipulators

by

continuation

methods

Trans

ASME

J.

Mechanism

Transmissions

Automation

in

Design

June

pp

Keywords

reverse

kinematics

iterative

form

-LSB-

-RSB-

I.

D.

Walker

Parallel

VLSI

architectures

for

real-time

kinematics

of

redundant

robots

IEEE

Int

Conf

on

Robotics

and

Automation

pp.

Keywords

forward

kinematics

reverse

kinematics

forward

and

reverse

Jacobian

task

and

operation

level

systolic

array

VLSI

CORDIC

-LSB-

-RSB-

Y.

Wang

S.

E.

Butner

A

new

architecture

for

robot

control

Proc

IEEE

Conf

on

Robotics

and

Automation

pp.

Keywords

reverse

kinematics

task

and

operation

level

MIMD

CORDIC

non-scalable

-LSB-

-RSB-

T.

B.

Yeung

C.

S.

G.

Lee

Efficient

parallel

algorithms

and

VLSI

architectures

for

manipulator

Jacobian

computation

Proc

IEEE

Conf

on

Robotics

and

Automation

pp.

Keywords

forward

Jacobian

operation

level

SIMD

systolic

VLSI

scalable

-LSB-

-RSB-

T.

B.

Yeung

C.

S.

G.

Lee

Efficient

parallel

algorithms

and

VLSI

architectures

for

manipulator

Jacobian

computation

IEEE

Trans

on

Systems

Man

and

Cybernetics

Vol

No.

September/October

pp.

Keywords

forward

Jacobian

operation

level

SIMD

systolic

VLSI

scalable

-LSB-

-RSB-

H.

Zhang

R.

P.

Paul

A

parallel

inverse

kinematics

solution

for

robot

manipulators

based

on

multiprocessing

and

linear

extrapolation

IEEE

Trans

on

Robotics

and

Automation

pp.

Keywords

reverse

kinematics

joint

level

MIMD

non-scalable

-LSB-

-RSB-

H.

Zhang

R.

P.

Paul

A

parallel

inverse

kinematics

solution

for

robot

manipulators

based

on

multiprocessing

and

linear

extrapolation

IEEE

Trans

on

Robotics

and

Automation

Vol

No.

October

pp.

Keywords

reverse

kinematics

joint

level

MIMD

non-scalable

-LSB-

-RSB-

A.

Y.

Zomaya

Modelling

and

simulation

of

robot

manipulators

A

parallel

processing

approach

World

Scientific

Publishing

Co.

Pte.

Ltd.

Keywords

forward

Jacobian

reverse

Jacobian

joint

and

computation

chain

level

tree

MIMD

non-scalable

-LSB-

-RSB-

A.

Y.

Zomaya

Parallel

and

distributed

computing

handbook

McGraw-Hill

pp.

Keywords

Overview

O O O O O O O O O O O O O O O O O B I O O O O O B O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O B I O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O B I O B O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O B I O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O B I O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O B O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O B I O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O B I O O O O O B O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O B I O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O B I O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O B O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O B O B O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O B I O B O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O B O O O O O O O O O O O O O O O O O O O B O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O B O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O B I O O O O O O O O O O O O O O O O O O B I O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O B O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O B I O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O B O O O O O O O O O O O O O O O O O O O O O O O B O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O B O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O B O O B O O O O O B O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O B O O O O O O O O O O B I O O O O O O O O O O O O O O O B I O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O B O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O B O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O B I O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O B O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O B O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O B I O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O B I O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O B O O O O O B O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O B O O O O O O B O O O O O O O O O O O O O O O O O O O O O O O B O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O B I O O O O O O B O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O B I O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O B O O O O O O O O O O O O O O B O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O B O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O B O O O O O O O O O O O O O O O O O O O O O O B O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O B O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O B O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O B O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O B O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O B O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O B O O O O O B O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O B O O O O O O O O O O B O O O O O B O O O O O B O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O B O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O B O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O B O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O B O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O B O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O B O O O O O O B O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O B I O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O B O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O B I O O B I O B O O O O O O O O O O O O O O B I O O O O O O O O O O O O O O O O O O B I O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O B I O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O B I O O O O O O O O O O O O O O O O O O O O O O O O O O O O B I O O B I O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O B I O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O B I O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O B O O O O O O O O O O O O O O O O O O O O O O O O O O O B O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O B O O O O O O O O O O O O O O O O O O O O O O O O O O O B I O O O O O O O O O O O O O O O O O O O O O O O B O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O B O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O B O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O B O O O O O O O O O O O O O O O O O O O O O O B I O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O B I O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O B O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O B I O O O O O O O O O O O O O O O O O O O O O O O O O O O O O B O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O B O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O B O O O O O O O O O O O O O O O O O O O O O O O O B I O O O O O O O O O O O O O O O O O O O O O O O O O O O O O B O O O O O O O O O O O O O O O O O O O O O O O O B O O O O O O O O O O O O O O O O O O O O O O O O O O O O B O O O O O O O O O O O O O O O O O O O O O O B O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O B O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O B O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O B O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O B O O O O O O O O O O O O O O O O O O O O O O O O O O O B I O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O B O O O O O O O O O O O O O O O O O O O O O B O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O B O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O B O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O B I O O O O O O O O O O O O O O O B O O B O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O

jacobian
parallel processing
robot control
robot kinematics