Commit a264e175 authored by Olivier Lantsoght's avatar Olivier Lantsoght
Browse files

[MBsysPy][MbsEquil] New error management. and create error test in example.

parent b681ab1c
...@@ -88,7 +88,7 @@ class MbsEquil(object): ...@@ -88,7 +88,7 @@ class MbsEquil(object):
symbolic_path = os.path.join(project_path, symbolic_path) symbolic_path = os.path.join(project_path, symbolic_path)
# Error handeling # Error handeling
if not os.path.isdir(symbolic_path): if not os.path.isdir(symbolic_path):
mbs_msg('Thesymbolic function directory for direct dynamic module does not exist: "' + symbolic_path + '"') mbs_msg('The symbolic function directory for direct dynamic module does not exist: "' + symbolic_path + '"')
mbs_msg('The current root folder is: "' + os.getcwd() + '"') mbs_msg('The current root folder is: "' + os.getcwd() + '"')
mbs_msg('The following directory is used instead: "' + self.symbolic_path + '".') mbs_msg('The following directory is used instead: "' + self.symbolic_path + '".')
else: else:
...@@ -146,6 +146,7 @@ class MbsEquil(object): ...@@ -146,6 +146,7 @@ class MbsEquil(object):
def __del__(self): def __del__(self):
"""Delete the object by freeing the C - related memory.""" """Delete the object by freeing the C - related memory."""
libmodules.mbs_delete_equil(self.mbs_equil_ptr, self.mbs.mbs_data_ptr) libmodules.mbs_delete_equil(self.mbs_equil_ptr, self.mbs.mbs_data_ptr)
self.mbs_equil_ptr = None
if __DEBUG__: if __DEBUG__:
mbs_msg("DEBUG>> MbsEquil pointer deleted") mbs_msg("DEBUG>> MbsEquil pointer deleted")
...@@ -185,7 +186,7 @@ class MbsEquil(object): ...@@ -185,7 +186,7 @@ class MbsEquil(object):
error = libmodules.mbs_run_equil(self.mbs_equil_ptr, self.mbs.mbs_data_ptr) error = libmodules.mbs_run_equil(self.mbs_equil_ptr, self.mbs.mbs_data_ptr)
if self.store_results: if not error and self.store_results:
self.load_results() self.load_results()
# Unassign user functions # Unassign user functions
...@@ -211,10 +212,10 @@ class MbsEquil(object): ...@@ -211,10 +212,10 @@ class MbsEquil(object):
" - An error in user function (joint force, external forces) return wrong value.\n" " - An error in user function (joint force, external forces) return wrong value.\n"
"\n" "\n"
"If the simulation runs a little you should:\n" "If the simulation runs a little you should:\n"
" - In all cases, open the results/animation file and check the motion of the \n" " - In some cases if it was created open the results/animation file and check \n"
" system until it fails.\n" " the different equilibrium steps of the module until it fails.\n"
" - In case of loop closure problem, you can alos check the dedicated animation\n" " - In case of loop closure problem, you can alos check the dedicated animation\n"
" under the name 'Failed_loop_closing_procedure_q.res'.\n" " under the name 'Failed_loop_closing_procedure_q.res' if the option was enable.\n"
"\n--------------------------------------------------\n" "\n--------------------------------------------------\n"
"\n--------------------------------------------------\n") "\n--------------------------------------------------\n")
raise RuntimeError("MbsEquil.run() failed, read previous messages.") raise RuntimeError("MbsEquil.run() failed, read previous messages.")
......
...@@ -7,7 +7,7 @@ Both project and MBsysC must be build with `FLAG_RELEASE=OFF`. ...@@ -7,7 +7,7 @@ Both project and MBsysC must be build with `FLAG_RELEASE=OFF`.
We should always ensure that no memory is definitively lost with: We should always ensure that no memory is definitively lost with:
* MBsys**C**_: `valgrind --error-limit=yes --leak-check=full --show-leak-kinds=all --track-origins=yes --undef-value-errors=yes -v --log-file=valgrindout.txt ./exe_PendulumSpringC` * MBsys**C**_: `valgrind --error-limit=yes --leak-check=full --show-leak-kinds=all --track-origins=yes --undef-value-errors=yes -v --log-file=valgrindout.txt ./exe_PendulumSpringC`
* MBsys**Py**: `valgrind --tool=memcheck --suppressions=valgrind-python.supp --log-file="valgrindout.txt" python3 -E -tt main_MBsysPy.py` * MBsys**Py**: `valgrind --tool=memcheck --leak-check=full --suppressions=valgrind-python.supp --log-file="valgrindout.txt" python3 -E -tt main_MBsysPy.py`
check both _valgrindout.txt_ files and verify the following line: check both _valgrindout.txt_ files and verify the following line:
``` ```
......
...@@ -47,6 +47,28 @@ mbs_equil = Robotran.MbsEquil(mbs_data) ...@@ -47,6 +47,28 @@ mbs_equil = Robotran.MbsEquil(mbs_data)
# Error: joints have change # Error: joints have change
# mbs_data.set_qdriven(2) # mbs_data.set_qdriven(2)
# Error: Mass matrix full of 0.
# Set all mass to 0
# mbs_data.m[1] = 0.0
# mbs_data.m[3] = 0.0
# mbs_data.m[4] = 0.0
# mbs_data.m[5] = 0.0
# Set all inertia to 0
# mbs_data.In[5][1] = 0.0
# mbs_data.In[5][4] = 0.0
# mbs_data.In[5][5] = 0.0
# Error: impossible cut
# mbs_data->dpt[3][4] = 10;
# Error: no sensitive variables
# Replace all independent joints
# By anchor point coordinates with no symbol
# mbs_equil.add_exchange(mbs_data.dpt[2], 1, 1, "dpt[2][1]")
# mbs_equil.add_exchange(mbs_data.dpt[3], 1, 2, "dpt[3][1]")
# mbs_equil.add_exchange(mbs_data.dpt[2], 2, 3, "dpt[2][2]")
mbs_equil.set_options(method=1, senstol=1e-2, verbose=1) mbs_equil.set_options(method=1, senstol=1e-2, verbose=1)
mbs_equil.run() mbs_equil.run()
......
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment