-
Thomas Moulard authoredThomas Moulard authored
tools.py 3.60 KiB
#!/usr/bin/env python
# -*- coding: utf-8 -*-
# Copyright 2011, Florent Lamiraux, Thomas Moulard, JRL, CNRS/AIST
#
# This file is part of dynamic-graph.
# dynamic-graph is free software: you can redistribute it and/or
# modify it under the terms of the GNU Lesser General Public License
# as published by the Free Software Foundation, either version 3 of
# the License, or (at your option) any later version.
#
# dynamic-graph is distributed in the hope that it will be useful, but
# WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
# General Lesser Public License for more details. You should have
# received a copy of the GNU Lesser General Public License along with
# dynamic-graph. If not, see <http://www.gnu.org/licenses/>.
from optparse import OptionParser
from dynamic_graph import plug
from dynamic_graph.sot.core import SOT
from dynamic_graph.sot.dynamics.hrp2 import Hrp2
# Robotviewer is optional
hasRobotViewer = True
try:
import robotviewer
except ImportError:
hasRobotViewer = False
####################
# Helper functions #
####################
def toList(tupleOfTuple):
result = [[0, 0, 0, 0],
[0, 0, 0, 0],
[0, 0, 0, 0],
[0, 0, 0, 0]]
for i in xrange(4):
for j in xrange(4):
result[i][j] = tupleOfTuple[i][j]
return result
def toTuple(listOfList):
return ((listOfList[0][0], listOfList[0][1],
listOfList[0][2], listOfList[0][3]),
(listOfList[1][0], listOfList[1][1],
listOfList[1][2], listOfList[1][3]),
(listOfList[2][0], listOfList[2][1],
listOfList[2][2], listOfList[2][3]),
(listOfList[3][0], listOfList[3][1],
listOfList[3][2], listOfList[3][3]))
def displayHomogeneousMatrix(matrix):
"""
Display nicely a 4x4 matrix (usually homogeneous matrix).
"""
import itertools
matrix_tuple = tuple(itertools.chain.from_iterable(matrix))
formatStr = ''
for i in xrange(4*4):
formatStr += '{0[' + str(i) + ']: <10} '
if i != 0 and (i + 1) % 4 == 0:
formatStr += '\n'
print formatStr.format(matrix_tuple)
def initRobotViewer():
"""Initialize robotviewer is possible."""
clt = None
if hasRobotViewer:
try:
clt = robotviewer.client()
except:
print "failed to connect to robotviewer"
return clt
##################
# Helper classes #
##################
class Solver:
robot = None
sot = None
def __init__(self, robot):
self.robot = robot
self.sot = SOT('solver')
self.sot.signal('damping').value = 1e-6
self.sot.setNumberDofs(self.robot.dimension)
if robot.robotSimu:
plug(self.sot.signal('control'), robot.robotSimu.signal('control'))
plug(self.robot.robotSimu.signal('state'),
self.robot.dynamicRobot.signal('position'))
##################
# Initialization #
##################
# Parse options and enable robotviewer client if wanted.
clt = None
parser = OptionParser()
parser.add_option("-d", "--display",
action="store_true", dest="display", default=False,
help="enable display using robotviewer")
(options, args) = parser.parse_args()
if options.display:
if not hasRobotViewer:
print "Failed to import robotviewer client library."
clt = initRobotViewer()
if not clt:
print "Failed to initialize robotviewer client library."
# Initialize the stack of tasks.
robot = Hrp2("robot", True)
timeStep = .02
solver = Solver(robot)