示例#1
0
    def run_centroidal(self, iter_dynamic_filter = 0):
        print("------------------------------")
        print("### MLP : centroidal  ###")
        generate_centroidal, CentroidalInputs, CentroidalOutputs = self.cfg.get_centroidal_method()
        if not CentroidalInputs.checkAndFillRequirements(self.cs, self.cfg, self.fullBody):
            raise RuntimeError(
                "The current contact sequence cannot be given as input to the centroidal method selected.")
        if iter_dynamic_filter > 0:
            if self.cs_wb:
                self.cs_initGuess = self.cs_wb
        self.cs_com = generate_centroidal(self.cfg, self.cs, self.cs_initGuess,
                                                             self.fullBody, self.viewer,
                                                             iter_dynamic_filter == 0)
        CentroidalOutputs.assertRequirements(self.cs_com)
        self.cs_com_iters += [self.cs_com]

        if self.cfg.WRITE_STATUS and iter_dynamic_filter == 0:
            with open(self.cfg.STATUS_FILENAME, "a") as f:
                f.write("centroidal_success: True\n")

        if self.cfg.DISPLAY_COM_TRAJ:
            colors = [self.viewer.color.blue, self.viewer.color.green]
            display_tools.displayCOMTrajectory(self.cs_com, self.gui, self.viewer.sceneName, self.cfg.SOLVER_DT, colors)
        if self.cfg.PLOT_CENTROIDAL:
            plot.plotCOMTraj(self.cs_com, self.cfg.SOLVER_DT, " - iter " + str(iter_dynamic_filter))
            plot.plotAMTraj(self.cs_com, self.cfg.SOLVER_DT, " - iter " + str(iter_dynamic_filter))
            plot.plt.show(block=False)
def loadMotionFromFiles(gui, path, npzFilename, csFilename):
    # load cs from file :
    cs = ContactSequenceHumanoid(0)
    cs.loadFromBinary(path + csFilename)
    displaySteppingStones(cs, gui, sceneName, Robot)
    colors = [[0., 0., 1., 1.], [0., 1., 0., 1.]]
    displayCOMTrajectory(cs, gui, sceneName, colors)
    #extract data from npz archive :
    res = wb_res.loadFromNPZ(path + npzFilename)
    displayFeetTrajFromResult(gui, sceneName, res, Robot)
    plot.plotALLFromWB(cs, res)
    return res, cs
示例#3
0
    def run_centroidal_init_guess(self):
        print("------------------------------")
        print("### MLP : centroidal, initial Guess ###")
        generate_centroidal_initguess, CentroidalInitGuessInputs, CentroidalInitGuessOutputs = self.cfg.get_centroidal_initguess_method()
        if not CentroidalInitGuessInputs.checkAndFillRequirements(self.cs, self.cfg, self.fullBody):
            raise RuntimeError(
                "The current contact sequence cannot be given as input to the centroidalInitGuess method selected.")
        self.cs_initGuess = generate_centroidal_initguess(self.cfg, self.cs,
                                                                             fullBody=self.fullBody,
                                                                             viewer=self.viewer)
        CentroidalInitGuessOutputs.assertRequirements(self.cs_initGuess)

        if self.cfg.DISPLAY_INIT_GUESS_TRAJ and self.cs_initGuess:
            colors = [self.viewer.color.red, self.viewer.color.yellow]
            display_tools.displayCOMTrajectory(self.cs_initGuess, self.gui, self.viewer.sceneName, self.cfg.SOLVER_DT, colors, "_init")
    print "Write contact sequence binary file : ", filename
    cs.saveAsBinary(filename)
if cfg.DISPLAY_CS_STONES:
    display_tools.displaySteppingStones(cs, viewer.client.gui,
                                        viewer.sceneName, cfg.Robot)

print "------------------------------"
print "### MLP : centroidal, initial Guess ###"
from mlp.centroidal import generateCentroidalInitGuess
cs_initGuess = generateCentroidalInitGuess(cs,
                                           fullBody=fullBody,
                                           viewer=viewer)

if cfg.DISPLAY_INIT_GUESS_TRAJ and cs_initGuess:
    colors = [viewer.color.red, viewer.color.yellow]
    display_tools.displayCOMTrajectory(cs_initGuess, viewer.client.gui,
                                       viewer.sceneName, colors, "_init")

print "------------------------------"
print "### MLP : centroidal  ###"
from mlp.centroidal import generateCentroidalTrajectory
cs_com = generateCentroidalTrajectory(cs, cs_initGuess, fullBody, viewer)

if cfg.WRITE_STATUS:
    f = open(cfg.STATUS_FILENAME, "a")
    f.write("centroidal_success: True\n")
    f.close()

if cfg.SAVE_CS_COM:
    filename = cfg.CONTACT_SEQUENCE_PATH + "/" + cfg.DEMO_NAME + "_COM.cs"
    print "Write contact sequence binary file with centroidal trajectory : ", filename
    cs_com.saveAsBinary(filename)
if cfg.DISPLAY_CS:
    if display_tools.DisplayContactSequenceRequirements.checkAndFillRequirements(cs, cfg, fullBody):
        input("Press Enter to display the contact sequence ...")
        display_tools.displayContactSequence(viewer, cs)

print("------------------------------")
print("### MLP : centroidal, initial Guess ###")
import mlp.centroidal.initGuess as centroidalInitGuess
if not centroidalInitGuess.Inputs.checkAndFillRequirements(cs,cfg, fullBody):
    raise RuntimeError("The current contact sequence cannot be given as input to the centroidalInitGuess method selected.")
cs_initGuess = centroidalInitGuess.generateCentroidalTrajectory(cs, fullBody=fullBody, viewer=viewer)
centroidalInitGuess.Outputs.assertRequirements(cs_initGuess)

if cfg.DISPLAY_INIT_GUESS_TRAJ and cs_initGuess:
    colors = [viewer.color.red, viewer.color.yellow]
    display_tools.displayCOMTrajectory(cs_initGuess, gui, viewer.sceneName, cfg.SOLVER_DT, colors, "_init")

cs_ref = None
cs_wb = None
cs_wb_iters = []
cs_com_iters = []
cs_ref_iters = []
for iterDynFilter in range(cfg.ITER_DYNAMIC_FILTER + 1):
    if iterDynFilter > 0:
        print("\n########################################")
        print("#### Iter " + str(iterDynFilter) + " of the dynamic filter.  #### ")
        print("######################################## \n")
        cfg.IK_trackAM = False
        cfg.w_am = cfg.w_am_track
        cfg.kp_am = cfg.kp_am_track
        if cs_wb is not None: