From 7fb3cbc438f11c8fc65136928511aaf680310abe Mon Sep 17 00:00:00 2001 From: Mikhail Chaikovskii Date: Mon, 12 Aug 2024 02:00:16 +0300 Subject: [PATCH] add dummy link --- rostok/block_builder_chrono/blocks_utils.py | 4 +- rostok/criterion/simulation_flags.py | 2 +- tests_jupyter/wheels_ruleset.ipynb | 249 +++++++++++++------- 3 files changed, 168 insertions(+), 87 deletions(-) diff --git a/rostok/block_builder_chrono/blocks_utils.py b/rostok/block_builder_chrono/blocks_utils.py index 4a4657b6..b3eff8d7 100644 --- a/rostok/block_builder_chrono/blocks_utils.py +++ b/rostok/block_builder_chrono/blocks_utils.py @@ -72,8 +72,8 @@ def evaluate(self, time, rest_angle, angle, vel, link): torque: torque, that is created by spring """ torque = 0 - - torque = -self.spring_coef * (angle - rest_angle) - self.damping_coef * vel + if self.spring_coef > 10**-5: + torque = -self.spring_coef * (angle - rest_angle) - self.damping_coef * vel # if angle <= 0: # torque = -self.spring_coef * (angle - rest_angle) - self.damping_coef * vel # else: diff --git a/rostok/criterion/simulation_flags.py b/rostok/criterion/simulation_flags.py index c88b0a98..4fa995b3 100644 --- a/rostok/criterion/simulation_flags.py +++ b/rostok/criterion/simulation_flags.py @@ -507,7 +507,7 @@ def __init__(self): super().__init__() def event_check(self, current_time: float, step_n: int, robot_data: Sensor, env_data: Sensor): - if step_n == 0: + if step_n <=3: n_contacts = env_data.get_amount_contacts() if n_contacts[0] > 0: return EventCommands.STOP diff --git a/tests_jupyter/wheels_ruleset.ipynb b/tests_jupyter/wheels_ruleset.ipynb index 236b1565..7229eafd 100644 --- a/tests_jupyter/wheels_ruleset.ipynb +++ b/tests_jupyter/wheels_ruleset.ipynb @@ -2,7 +2,7 @@ "cells": [ { "cell_type": "code", - "execution_count": 19, + "execution_count": 22, "metadata": {}, "outputs": [], "source": [ @@ -26,7 +26,7 @@ }, { "cell_type": "code", - "execution_count": 20, + "execution_count": 23, "metadata": {}, "outputs": [], "source": [ @@ -51,7 +51,7 @@ }, { "cell_type": "code", - "execution_count": 21, + "execution_count": 24, "metadata": {}, "outputs": [], "source": [ @@ -70,7 +70,7 @@ }, { "cell_type": "code", - "execution_count": 22, + "execution_count": 25, "metadata": {}, "outputs": [], "source": [ @@ -83,9 +83,9 @@ " Box(0.5, 0.1, 0.3), material=def_mat, color=[255, 0, 0], density=100+i*100,is_collide=False))\n", " \n", "wheel_def_mat = deepcopy(def_mat)\n", - "wheel_def_mat.Friction = 0.7\n", - "wheel_def_mat.RollingFriction=0.01\n", - "wheel_def_mat.SpinningFriction=0.01\n", + "wheel_def_mat.Friction = 0.5\n", + "wheel_def_mat.RollingFriction=0.0001\n", + "wheel_def_mat.SpinningFriction=0.0001\n", "wheel_body_cyl = PrimitiveBodyBlueprint(\n", " Cylinder(0.03, 0.02), material=wheel_def_mat, color=[0, 120, 255], density=500)\n", "\n", @@ -105,12 +105,35 @@ "link = list(map(lambda x: PrimitiveBodyBlueprint(Box(0.02, x, 0.02),\n", " material=def_mat,\n", " color=[0, 120, 255],\n", - " density=500), length_link))" + " density=500), length_link))\n", + "\n", + "dummy_link = PrimitiveBodyBlueprint(\n", + " Box(0.01, 0.001, 0.01), material=def_mat, density=1000000)" ] }, { "cell_type": "code", - "execution_count": 23, + "execution_count": 26, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "282600000.0" + ] + }, + "execution_count": 26, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "0.3**2*3.14*0.2*500/(0.01**3*0.1)\n" + ] + }, + { + "cell_type": "code", + "execution_count": 27, "metadata": {}, "outputs": [], "source": [ @@ -122,12 +145,15 @@ "\n", "node_vocab.create_node(label=\"B\", is_terminal=True,block_blueprint=base)\n", "node_vocab.create_node(label=\"WC\", is_terminal=True,block_blueprint=wheel_body_cyl)\n", - "node_vocab.create_node(label=\"WE\", is_terminal=True,block_blueprint=wheel_body_ell)" + "node_vocab.create_node(label=\"WE\", is_terminal=True,block_blueprint=wheel_body_ell)\n", + "\n", + "node_vocab.create_node(label=\"DB\", is_terminal=True,\n", + " block_blueprint=dummy_link)" ] }, { "cell_type": "code", - "execution_count": 24, + "execution_count": 28, "metadata": {}, "outputs": [], "source": [ @@ -156,7 +182,7 @@ }, { "cell_type": "code", - "execution_count": 25, + "execution_count": 29, "metadata": {}, "outputs": [], "source": [ @@ -175,7 +201,7 @@ }, { "cell_type": "code", - "execution_count": 26, + "execution_count": 30, "metadata": {}, "outputs": [], "source": [ @@ -191,7 +217,7 @@ }, { "cell_type": "code", - "execution_count": 27, + "execution_count": 31, "metadata": {}, "outputs": [], "source": [ @@ -202,7 +228,7 @@ }, { "cell_type": "code", - "execution_count": 28, + "execution_count": 32, "metadata": {}, "outputs": [], "source": [ @@ -211,7 +237,7 @@ "no_control_joint = list(\n", " map(lambda x: RevolveJointBlueprint(JointInputType.UNCONTROL,\n", " stiffness=x,\n", - " damping=0.05,\n", + " damping=0.005,\n", " equilibrium_position=0), stiffness))\n", "motor_bp = RevolveJointBlueprint(JointInputType.TORQUE, stiffness=0, damping=0.002)\n", "neutral_bp = RevolveJointBlueprint(JointInputType.UNCONTROL, stiffness=0, damping=0.002)" @@ -219,7 +245,7 @@ }, { "cell_type": "code", - "execution_count": 29, + "execution_count": 33, "metadata": {}, "outputs": [], "source": [ @@ -233,7 +259,7 @@ }, { "cell_type": "code", - "execution_count": 30, + "execution_count": 34, "metadata": {}, "outputs": [], "source": [ @@ -243,15 +269,15 @@ "rule_vocab.create_rule(\"Add_Leg_Base\",[\"MB\"],[\"MB\",\"XT\",\"ZT\",\"B\",\"G\"],0,0,[(0,1),(1,2),(2,3),(3,4)])\n", "\n", "rule_vocab.create_rule(\"Extension\",[\"G\"],[\"J\",\"L\", \"G\"], 0,2,[(0, 1), (1, 2)])\n", - "rule_vocab.create_rule(\"R_Wheel\",[\"G\"], [\"RM\",\"W\"],0,0,[(0,1)])\n", - "rule_vocab.create_rule(\"L_Wheel\",[\"G\"], [\"LM\",\"W\"],0,0,[(0,1)])\n", - "rule_vocab.create_rule(\"Wheel\",[\"G\"], [\"NM\",\"W\"],0,0,[(0,1)])\n", + "rule_vocab.create_rule(\"R_Wheel\",[\"G\"], [\"J\",\"DB\",\"RM\",\"W\"],0,0,[(0,1),(1,2),(2,3)])\n", + "rule_vocab.create_rule(\"L_Wheel\",[\"G\"], [\"J\",\"DB\",\"LM\",\"W\"],0,0,[(0,1),(1,2),(2,3)])\n", + "rule_vocab.create_rule(\"Wheel\",[\"G\"], [\"J\",\"DB\",\"NM\",\"W\"],0,0,[(0,1),(1,2),(2,3)])\n", "rule_vocab.create_rule(\"Rotation\",[\"G\"],[\"R\",\"G\"],0,0,[(0,1)])" ] }, { "cell_type": "code", - "execution_count": 31, + "execution_count": 35, "metadata": {}, "outputs": [], "source": [ @@ -284,12 +310,12 @@ }, { "cell_type": "code", - "execution_count": 32, + "execution_count": 36, "metadata": {}, "outputs": [ { "data": { - "image/png": "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", + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAgMAAAGFCAYAAABg2vAPAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjYuMCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy89olMNAAAACXBIWXMAAA9hAAAPYQGoP6dpAABVuElEQVR4nO3de3wU5b0/8M/MZJOQezb3hMsGwlUNIhKsorSoeCnVIxcNoMhBW7XVczgX4ZyevtqentPzU6ivY62//uqltopoIsQW7xfq/RoMxhARBEkgbAJJ2GRJNiTZzMzvj7BrrjObZDc7s/N5v16+THZnl2cznzzzzTzPzCOoqqqCiIiILEsMdwOIiIgovFgMEBERWRyLASIiIotjMUBERGRxLAaIiIgsjsUAERGRxbEYICIisrioQDZSFAX19fVITEyEIAihbhMREREFgaqqaGtrQ25uLkRx+L//AyoG6uvrMWnSpKA1joiIiMZPXV0dJk6cOOzzARUDiYmJ/jdLSkoKTsuIiIgopE6fPo1Jkyb5j+PDCagY8A0NJCUlsRggIiIyGb0hfk4gJCIisjgWA0RERBbHYoCIiMjiWAwQERFZHIsBIiIii2MxQEREZHEsBoiIiCyOxQAREZHFsRggIiKyOBYDREREFsdigIiIyOJYDBAREVkciwEiIiKLYzFARERkcSwGiIiILI7FABERkcWxGCAiIrI4FgNEREQWx2KAiKAoaribQERhFBXuBhDR+Kt2urGjog7lNS4cbmqHV1ZhkwQUZCSgKN+OVfMn4dy85HA3k4jGCYsBIgupbfZgU1kVymtdkEQBcp8zAl5ZxVcn2vB1Yzue/Pgoihx2bFlRCEd6fBhbTETjgcMERBaxq9KJpQ++h4pjLQDQrxDoy/d4xbEWLH3wPeyqdI5bG4koPHhmgMgCdlU6sbG0EiOZGSArKmSo2FhaCQC4/vy8kLSNiMKPZwaIIlxNswf37qwaUSHQlwrg3p1VqG32BLNZRGQgLAaIItzmsirI6tiuFpBVFZvKqoLUIiIyGg4TEEUoh8OB0+0eJG54HILU+6veebQKJ5/9KRIvvA5x0y9C445fIsp+9vS/IiPxwuuQeP7VAICWd5/CmcOfAkLv3wynL1qJ6mVzeJUBUQRiMUAUwWJTMtH1TTliZ1wMAGivegPR2dP9z0fZ85C74XcAgJ7TzXA+cjviZ18GMSYOyQuXI3Xxut7n2ppR/9hdePLtH2DrzZeO/wchopDiMAFRBEs5fylOf/EGAEDp9KDLeRATpl4w5LZKdwdEW6z/LIIYm+B/Tu3uBADsPdoS4hYTUTjwzABRBGtPmYoe9/PoaTuFM4c/RdysS/yn/QGgx+VE/RP3AHIPvK0NsF95J4SoaP/zpz97AW17X4bc1oy0a/4Bx86wyyCKRPzNJopQqqqiRwHiz/kePPv+ho5DHyP9B/8Kz5fv+LcZOExw4ul7EZ1dgJjsAgBA0oXXIenC69B98giaX3oAsfnzoCgqRFEIx0ciohBhMUBkQrIso6GhAXV1dairq8OxY8cGfd3Y2IgcRUb8uUvQ8Od/hC01Dzb78PcKiEpKR0zuTHQe/cJfDPhEZ02FlJCGzppK5ORsxKRJkzB58uR+//d9nZ2dDUmSQv0jIKIgYjFAZDCqqsLlcg15gPd9XV9fj56eHv9rEhIS/AflefPm4frrr8dvf/tb5KXEomlCGlIX3wpb2kTNf1fp9KD7xGHEn/M9AEB38zFEp08GAHhbGtB98ghyr5mIlXff7W/P7t27cezYMbS3t/vfJyoqCrm5uYOKhL5f2+12CALPLhAZBYsBonHW3t7uP7AP91f9mTNn/NvbbDb/gdThcOCyyy4bdJBNTk72H1y7urrw2muv4cyZM6jd+z4SF61BQuGVQ7bFP2cAgCp7EX/O9xA3fSEAoPXtP6HHfRIQJQiiBPsVP8IEeDF37lxs2rQJMTExva9TVbjd7n7t7/uZPvnkExw/fhxer9f/706YMGHIIqHv/+PjuSYC0XgRVFX/biSnT59GcnIy3G43kpKSxqNdRKbk9XrhdDqHPCj6vm5p+XZGviAIyM7O1jwoZmZmQhS1L/zxer146623UFJSgr/85S9wu90oLCzE5SvX4/mOGUH7fAkfPIwvP3gNycnJWL58OYqLi7FkyRJERWn/XaEoChobGzXPdpw4cQJ9u6PU1FTNswt5eXmw2WxB+2xEkSjQ4zeLAaIAheKAlpubi+joaI1/Vbs977//PkpKSrBz5040Nzdj+vTpWL16NW666SbMmTMHAHDjIx+j4ljLsAsTBUISBcyfnIrn7vgO9u/fj5KSEpSUlODQoUNIT0/HqlWrUFxcjEWLFukWLsPp7u5GfX295s830ELK93UghRRRJGMxQDQCvlPdWgcivVPdAw9EEydOREJCgsa/Orp2lpeXo6SkBM899xzq6+sxefJkFBcXo7i4GOeff/6gsfjaZg+WPvgeumVl1P9utCTijY2X9VvOWFVVfP755ygpKUFpaSmOHTuG3Nxc3HTTTSguLsaCBQuCPi9gpEMs0dHRyMvLG3YfDRxiIYo0LAaI+jhz5ozuQaTvJDhJkvodRMI5CU5VVVRVVfkPujU1NcjOzsaNN96I4uJiLFy4UPev39GsWugjAHjwpvM1Vy1UFAWffPKJv0g5efIk8vPz/UXKeeedN24/K73Jl06nE7Is+1/Td/LlcEXdhAkTQt52olBgMUCW0dPTg4aGBs0DQHNzc7/XZGZmah4AjHB53MGDB1FaWopnn30WBw4cgN1ux8qVK1FcXIzLLrtsxO3bVenEvTt7Fy0KZMhAEgVIgoCtKwtHtHyxLMt49913UVJSgrKyMrhcLsyePdtfGMyYEbw5DKMhyzJOnDihOa+jsbGx32vS09M153Xk5OTozpsgCgcWAxQRVFVFc3Oz7mV2ivLtKfCkpCTdiWexsbFh/FTDq62txXPPPYeSkhJ8/vnnSExMxA033IDi4mJcccUVY54wV9vswaayKpTXuiCJwpBFge/xhfl23L+8sN/QwEh1d3dj9+7dKCkpwV//+le0tbVh3rx5KC4uxk033YQpU6aM5eOETGdnJ44fP655Jun06dP+7SVJQm5u7rCZmzRpEtLT0zkcQeOOxQCZQltb27CdrW+cvrOz0799TEwMJk6cOOzB3jcGbCYNDQ3YsWMHSkpK8PHHH2PChAlYtmwZVq9ejWuuuSYkhUu1040dFXXYU9uCQ41t8MoqbJKA6ZmJWOBIxar5k4K+OuGZM2fw6quvoqSkBC+++CI6Ozvxne98B8XFxVi1ahVycnKC+u+Fmu9ySq2Cobu72799bGxsv5wOleHExMQwfiKKRCwGKOy6urr6XWY3VIfpdrv924uiiJycHM2/6jMyMiLir6vm5mY8//zzKCkpwTvvvIOoqChcffXVKC4uxg9+8INxPyiM9y2G29ra8OKLL6KkpASvvfYaenp68N3vfhfFxcVYsWIF0tLSxq0toaIoCpqamjSLhYaGhn5ntZKTkzWHI/Ly8vz3dyAKBIsBCilZlnHy5EnNA/3Jkyf7vSYtLU1z9n1OTk5EXzfudruxa9culJSU4M0334SqqliyZAmKi4txww03IDU1NdxNDIuWlhb85S9/wbPPPou33noLoijiyiuvRHFxMa6//nrTnekZCa/Xi/r6es2C4dSpU/1ek52drXl2ITs7m5dTkp+liwEupDI2qqqipaVl2DvK+WZk970dbnx8/LCdk++/uLi4MH6q/sYrIx0dHXjppZdQUlKCV155BV1dXbj00ktRXFyMlStXIjMzM+RtMJPGxkbs3LkTJSUleP/99xETE4Nrr70WxcXFWLZs2bhlyEh9SEdHh2axUFdXB4/H498+KioKEydO1CwYUlNTI+IMWzgZKSNaLFUM+MY/y2tcONzU7h//LMhIQFG+PSTjn2bm61y0/qrv6Ojwb+/rXLRO36ekpBi6cxnPjHR1deH1119HSUkJXnjhBXg8HixYsADFxcW48cYbMXGi9hoB1Kuurs4/l2LPnj2Ij4/Hddddh+LiYlx11VVBPV1u5j6kb/E+3O/18ePH+xXvcXFxmsMRRivejcCsGbFEMTCSmdFFDju2rBjbzGgz8J121DrQu1yufq/Ru4tbVlaWaU87BjMjra2tWL9+Pe644w5cc801/Z7r6enx3w74+eefh9vtxnnnneefNT9t2rSQfD6r+Oabb1BaWoqSkhLs27dP93bIr776Kh555BH8+c9/RkpKyrDva5U+xDesp1UwnDhxot9rfMN6w51dyM3NjehhPR+zZyTii4HxumbaSPpOSBpu9v2JEyf6TUhKSUnRPH0fyROSgpkRt9uNJUuWYO/evbj00kvx3nvvQVEUfPDBB/7bATc1NaGgoMB/O+BzzjknVB/N0r788kv//RcOHz6MjIwMrFy5EqtXr8Yll1wCURRx6aWX4oMPPsAFF1yAt956a8h5B1bsQ7T4JvwO1a/4HmttbfVv75vwq1UwZGRkmPYPCSAyMhLRxUCo76YWLgNXfhv49XCXKmmN01v1UqVgZqStrQ2XX3459u7dC1mWIQgCbr/9drzyyitwOp2YNGmS/4Y68+bNM/RwSSTpezvkkpIS1NXVIS8vD9deey0ef/xxqKoKSZIwf/587N69u9/vQqT2IaHmuxRYq5/qeylwdHS07uWURp0gGikZidhioKbZg6tCcJ91n87OTuzevRvXXnttUCta301MtE7ft7W1+bf33cRE6/R9WloaDzxDCGZG0mNVLF26FJ9++mm/My6J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", "text/plain": [ "
" ] @@ -302,17 +328,21 @@ "i=9\n", "graph = GraphGrammar()\n", "rules = [\"Init\",\n", - " \"Add_Leg_Base\",\"Positive_Translation_X4\",\"Positive_Translation_Z3\", \"Extension\",\"Extension\",\"R_Wheel\", \"Cyl_Wheel\",\n", - " \"Terminal_Link3\",\"Terminal_Link3\",f'Terminal_Joint{i}',f'Terminal_Joint{i}', \n", + " \"Add_Leg_Base\",\"Positive_Translation_X4\",\"Positive_Translation_Z3\",\"Rotation\",\n", + " 'Rotation_Y', \"Extension\",\"Extension\",f'Terminal_Joint{i}',f'Terminal_Joint{i}', \"Rotation\",\"R_Wheel\", \"Cyl_Wheel\",\n", + " \"Terminal_Link3\",\"Terminal_Link3\", 'Terminal_Joint50','Rotation_Y',\n", "\n", - " \"Add_Leg_Base\",\"Positive_Translation_X4\",\"Negative_Translation_Z3\", \"Extension\",\"Extension\",\"L_Wheel\", \"Cyl_Wheel\",\n", - " \"Terminal_Link3\",\"Terminal_Link3\",f'Terminal_Joint{i}',f'Terminal_Joint{i}', \n", + " \"Add_Leg_Base\",\"Positive_Translation_X4\",\"Negative_Translation_Z3\",\"Rotation\",\n", + " 'Rotation_Y', \"Extension\",\"Extension\",f'Terminal_Joint{i}',f'Terminal_Joint{i}',\"Rotation\",\"L_Wheel\", \"Cyl_Wheel\",\n", + " \"Terminal_Link3\",\"Terminal_Link3\", 'Terminal_Joint50','Rotation_Y',\n", "\n", - " \"Add_Leg_Base\",\"Negative_Translation_X4\",\"Positive_Translation_Z3\", \"Extension\",\"Extension\",\"R_Wheel\", \"Cyl_Wheel\",\n", - " \"Terminal_Link3\",\"Terminal_Link3\",f'Terminal_Joint{i}',f'Terminal_Joint{i}', \n", + " \"Add_Leg_Base\",\"Negative_Translation_X4\",\"Positive_Translation_Z3\",\"Rotation\",\n", + " 'Rotation_Y', \"Extension\",\"Extension\",\"Rotation\",f'Terminal_Joint{i}', f'Terminal_Joint{i}',\"R_Wheel\", \"Cyl_Wheel\",\n", + " \"Terminal_Link3\",\"Terminal_Link3\", 'Terminal_Joint50','Rotation_Y',\n", "\n", - " \"Add_Leg_Base\",\"Negative_Translation_X4\",\"Negative_Translation_Z3\", \"Extension\",\"Extension\",\"L_Wheel\", \"Cyl_Wheel\",\n", - " \"Terminal_Link3\",\"Terminal_Link3\",f'Terminal_Joint{i}',f'Terminal_Joint{i}', \n", + " \"Add_Leg_Base\",\"Negative_Translation_X4\",\"Negative_Translation_Z3\",\"Rotation\",\n", + " 'Rotation_Y', \"Extension\",\"Extension\",f'Terminal_Joint{i}',f'Terminal_Joint{i}', \"Rotation\",\"L_Wheel\", \"Cyl_Wheel\",\n", + " \"Terminal_Link3\",\"Terminal_Link3\",'Terminal_Joint50','Rotation_Y',\n", "\n", " 'Terminal_Main_Body3'\n", " \n", @@ -327,44 +357,60 @@ }, { "cell_type": "code", - "execution_count": 33, + "execution_count": 37, + "metadata": {}, + "outputs": [], + "source": [ + "from rostok.simulation_chrono.simulation_scenario import SuspensionCarScenario\n", + "from rostok.criterion.simulation_flags import EventBodyTooLowBuilder, EventContactInInitialPositionBuilder\n", + "from rostok.control_chrono.controller import SimpleKeyBoardController\n", + "\n", + "parameters = {}\n", + "parameters[\"forward\"] = 1\n", + "parameters[\"reverse\"]= 1\n", + "parameters[\"forward_rotate\"] = 0.5\n", + "parameters[\"reverse_rotate\"] = 0.3" + ] + }, + { + "cell_type": "code", + "execution_count": 16, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - "0.26363636363636367\n" + "0.2\n" ] } ], "source": [ - "from rostok.simulation_chrono.simulation_scenario import SuspensionCarScenario\n", - "from rostok.criterion.simulation_flags import EventBodyTooLowBuilder, EventContactInInitialPositionBuilder\n", - "from rostok.control_chrono.controller import SimpleKeyBoardController\n", - "\n", - "parameters = {}\n", - "parameters[\"forward\"] = 0.5\n", - "parameters[\"reverse\"]= 0.5\n", - "parameters[\"forward_rotate\"] = 0.3\n", - "parameters[\"reverse_rotate\"] = 0.2\n", - "\n", "height = 0\n", "for i in np.linspace(0.1,1,100):\n", - " scenario = SuspensionCarScenario(0.0001, 1,initial_vertical_pos=i, controller_cls=SimpleKeyBoardController)\n", + " scenario = SuspensionCarScenario(0.0001, 0.01,initial_vertical_pos=i, controller_cls=SimpleKeyBoardController)\n", " scenario.add_event_builder(event_builder=EventBodyTooLowBuilder(0.15))\n", " scenario.add_event_builder(event_builder=EventContactInInitialPositionBuilder())\n", - " result = scenario.run_simulation(graph, parameters, starting_positions=[[-30,60,0], [-30,60,0], [-30,60,0], [-30,60,0]], vis = False, delay=False)\n", - " if len(list(result.robot_final_ds.get_data(\"COG\").items())[0][1]) > 2:\n", + " result = scenario.run_simulation(graph, parameters, starting_positions=[[-30,30,0,0], [30,-30,0,0], [-30,30,0,0], [30,-30,0,0]], vis = True, delay=False)\n", + " if len(list(result.robot_final_ds.get_data(\"COG\").items())[0][1]) > 10:\n", " height = i\n", " break\n", "\n", - "print(height)" + "print(height)\n" ] }, { "cell_type": "code", - "execution_count": 34, + "execution_count": 38, + "metadata": {}, + "outputs": [], + "source": [ + "height = 0.29" + ] + }, + { + "cell_type": "code", + "execution_count": 17, "metadata": {}, "outputs": [ { @@ -392,7 +438,7 @@ " 0.96363636, 0.97272727, 0.98181818, 0.99090909, 1. ])" ] }, - "execution_count": 34, + "execution_count": 17, "metadata": {}, "output_type": "execute_result" } @@ -403,7 +449,7 @@ }, { "cell_type": "code", - "execution_count": 16, + "execution_count": 41, "metadata": {}, "outputs": [ { @@ -414,12 +460,24 @@ "10\n", "20\n", "30\n", - "40\n", - "50\n", - "60\n", - "70\n", - "80\n", - "90\n" + "40\n" + ] + }, + { + "ename": "KeyboardInterrupt", + "evalue": "", + "output_type": "error", + "traceback": [ + "\u001b[1;31m---------------------------------------------------------------------------\u001b[0m", + "\u001b[1;31mKeyboardInterrupt\u001b[0m Traceback (most recent call last)", + "Cell \u001b[1;32mIn[41], line 33\u001b[0m\n\u001b[0;32m 31\u001b[0m scenario\u001b[38;5;241m.\u001b[39madd_event_builder(event_builder\u001b[38;5;241m=\u001b[39mEventBodyTooLowBuilder(\u001b[38;5;241m0.15\u001b[39m))\n\u001b[0;32m 32\u001b[0m scenario\u001b[38;5;241m.\u001b[39madd_event_builder(event_builder\u001b[38;5;241m=\u001b[39mEventContactInInitialPositionBuilder())\n\u001b[1;32m---> 33\u001b[0m result \u001b[38;5;241m=\u001b[39m \u001b[43mscenario\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mrun_simulation\u001b[49m\u001b[43m(\u001b[49m\u001b[43mgraph\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mparameters\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mstarting_positions\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43m[\u001b[49m\u001b[43m[\u001b[49m\u001b[38;5;241;43m-\u001b[39;49m\u001b[38;5;241;43m30\u001b[39;49m\u001b[43m,\u001b[49m\u001b[38;5;241;43m30\u001b[39;49m\u001b[43m,\u001b[49m\u001b[38;5;241;43m0\u001b[39;49m\u001b[43m,\u001b[49m\u001b[38;5;241;43m0\u001b[39;49m\u001b[43m]\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43m[\u001b[49m\u001b[38;5;241;43m30\u001b[39;49m\u001b[43m,\u001b[49m\u001b[38;5;241;43m-\u001b[39;49m\u001b[38;5;241;43m30\u001b[39;49m\u001b[43m,\u001b[49m\u001b[38;5;241;43m0\u001b[39;49m\u001b[43m,\u001b[49m\u001b[38;5;241;43m0\u001b[39;49m\u001b[43m]\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43m[\u001b[49m\u001b[38;5;241;43m-\u001b[39;49m\u001b[38;5;241;43m30\u001b[39;49m\u001b[43m,\u001b[49m\u001b[38;5;241;43m30\u001b[39;49m\u001b[43m,\u001b[49m\u001b[38;5;241;43m0\u001b[39;49m\u001b[43m,\u001b[49m\u001b[38;5;241;43m0\u001b[39;49m\u001b[43m]\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43m[\u001b[49m\u001b[38;5;241;43m30\u001b[39;49m\u001b[43m,\u001b[49m\u001b[38;5;241;43m-\u001b[39;49m\u001b[38;5;241;43m30\u001b[39;49m\u001b[43m,\u001b[49m\u001b[38;5;241;43m0\u001b[39;49m\u001b[43m,\u001b[49m\u001b[38;5;241;43m0\u001b[39;49m\u001b[43m]\u001b[49m\u001b[43m]\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mvis\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43m \u001b[49m\u001b[38;5;28;43;01mFalse\u001b[39;49;00m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mdelay\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;28;43;01mFalse\u001b[39;49;00m\u001b[43m)\u001b[49m\n\u001b[0;32m 34\u001b[0m stiffness[i]\u001b[38;5;241m=\u001b[39m\u001b[38;5;28mlist\u001b[39m(result\u001b[38;5;241m.\u001b[39mrobot_final_ds\u001b[38;5;241m.\u001b[39mget_data(\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mCOG\u001b[39m\u001b[38;5;124m\"\u001b[39m)\u001b[38;5;241m.\u001b[39mitems())[\u001b[38;5;241m0\u001b[39m][\u001b[38;5;241m1\u001b[39m][\u001b[38;5;241m-\u001b[39m\u001b[38;5;241m1\u001b[39m][\u001b[38;5;241m1\u001b[39m]\n", + "File \u001b[1;32md:\\work\\projects\\rostok\\rostok\\simulation_chrono\\simulation_scenario.py:302\u001b[0m, in \u001b[0;36mSuspensionCarScenario.run_simulation\u001b[1;34m(self, graph, controller_data, starting_positions, vis, delay)\u001b[0m\n\u001b[0;32m 297\u001b[0m robot_data_dict \u001b[38;5;241m=\u001b[39m {\n\u001b[0;32m 298\u001b[0m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mCOG\u001b[39m\u001b[38;5;124m\"\u001b[39m: (SensorCalls\u001b[38;5;241m.\u001b[39mBODY_TRAJECTORY, SensorObjectClassification\u001b[38;5;241m.\u001b[39mBODY,\n\u001b[0;32m 299\u001b[0m SensorCalls\u001b[38;5;241m.\u001b[39mBODY_TRAJECTORY),\n\u001b[0;32m 300\u001b[0m }\n\u001b[0;32m 301\u001b[0m simulation\u001b[38;5;241m.\u001b[39madd_robot_data_type_dict(robot_data_dict)\n\u001b[1;32m--> 302\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[43msimulation\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43msimulate\u001b[49m\u001b[43m(\u001b[49m\u001b[43mn_steps\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mstep_length\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m10000\u001b[39;49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mevent_list\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mvis\u001b[49m\u001b[43m)\u001b[49m\n", + "File \u001b[1;32md:\\work\\projects\\rostok\\rostok\\simulation_chrono\\simulation.py:320\u001b[0m, in \u001b[0;36mSingleRobotSimulation.simulate\u001b[1;34m(self, number_of_steps, step_length, fps, event_container, visualize)\u001b[0m\n\u001b[0;32m 318\u001b[0m \u001b[38;5;28;01mfor\u001b[39;00m i \u001b[38;5;129;01min\u001b[39;00m \u001b[38;5;28mrange\u001b[39m(number_of_steps):\n\u001b[0;32m 319\u001b[0m current_time \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mchrono_system\u001b[38;5;241m.\u001b[39mGetChTime()\n\u001b[1;32m--> 320\u001b[0m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43msimulate_step\u001b[49m\u001b[43m(\u001b[49m\u001b[43mstep_length\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mcurrent_time\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mi\u001b[49m\u001b[43m)\u001b[49m\n\u001b[0;32m 321\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mresult\u001b[38;5;241m.\u001b[39mtime_vector\u001b[38;5;241m.\u001b[39mappend(\u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mchrono_system\u001b[38;5;241m.\u001b[39mGetChTime())\n\u001b[0;32m 322\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m visualize:\n", + "File \u001b[1;32md:\\work\\projects\\rostok\\rostok\\simulation_chrono\\simulation.py:266\u001b[0m, in \u001b[0;36mSingleRobotSimulation.simulate_step\u001b[1;34m(self, step_length, current_time, step_n)\u001b[0m\n\u001b[0;32m 264\u001b[0m robot\u001b[38;5;241m.\u001b[39msensor\u001b[38;5;241m.\u001b[39mcontact_reporter\u001b[38;5;241m.\u001b[39mreset_contact_dict()\n\u001b[0;32m 265\u001b[0m robot\u001b[38;5;241m.\u001b[39msensor\u001b[38;5;241m.\u001b[39mupdate_current_contact_info(\u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mchrono_system)\n\u001b[1;32m--> 266\u001b[0m \u001b[43mrobot\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mdata_storage\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mupdate_storage\u001b[49m\u001b[43m(\u001b[49m\u001b[43mstep_n\u001b[49m\u001b[43m)\u001b[49m\n\u001b[0;32m 268\u001b[0m \u001b[38;5;66;03m#controller gets current states of the robot and environment and updates control functions\u001b[39;00m\n\u001b[0;32m 269\u001b[0m robot\u001b[38;5;241m.\u001b[39mcontroller\u001b[38;5;241m.\u001b[39mupdate_functions(current_time, robot\u001b[38;5;241m.\u001b[39msensor,\n\u001b[0;32m 270\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39menv_creator\u001b[38;5;241m.\u001b[39mdata_storage\u001b[38;5;241m.\u001b[39msensor)\n", + "File \u001b[1;32md:\\work\\projects\\rostok\\rostok\\virtual_experiment\\sensors.py:257\u001b[0m, in \u001b[0;36mDataStorage.update_storage\u001b[1;34m(self, step_n)\u001b[0m\n\u001b[0;32m 255\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m \u001b[38;5;21mupdate_storage\u001b[39m(\u001b[38;5;28mself\u001b[39m, step_n):\n\u001b[0;32m 256\u001b[0m \u001b[38;5;28;01mfor\u001b[39;00m key, sensor_callback \u001b[38;5;129;01min\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mcallback_dict\u001b[38;5;241m.\u001b[39mitems():\n\u001b[1;32m--> 257\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39madd_data(key, \u001b[43msensor_callback\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43msensor\u001b[49m\u001b[43m)\u001b[49m, step_n)\n", + "File \u001b[1;32md:\\work\\projects\\rostok\\rostok\\virtual_experiment\\sensors.py:114\u001b[0m, in \u001b[0;36mSensor.get_body_trajectory_point\u001b[1;34m(self)\u001b[0m\n\u001b[0;32m 108\u001b[0m \u001b[38;5;28;01mfor\u001b[39;00m idx, body \u001b[38;5;129;01min\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mbody_map_ordered\u001b[38;5;241m.\u001b[39mitems():\n\u001b[0;32m 109\u001b[0m output[idx] \u001b[38;5;241m=\u001b[39m [\n\u001b[0;32m 110\u001b[0m \u001b[38;5;28mround\u001b[39m(body\u001b[38;5;241m.\u001b[39mbody\u001b[38;5;241m.\u001b[39mGetPos()\u001b[38;5;241m.\u001b[39mx, \u001b[38;5;241m4\u001b[39m),\n\u001b[0;32m 111\u001b[0m \u001b[38;5;28mround\u001b[39m(body\u001b[38;5;241m.\u001b[39mbody\u001b[38;5;241m.\u001b[39mGetPos()\u001b[38;5;241m.\u001b[39my, \u001b[38;5;241m4\u001b[39m),\n\u001b[0;32m 112\u001b[0m \u001b[38;5;28mround\u001b[39m(body\u001b[38;5;241m.\u001b[39mbody\u001b[38;5;241m.\u001b[39mGetPos()\u001b[38;5;241m.\u001b[39mz, \u001b[38;5;241m4\u001b[39m)\n\u001b[0;32m 113\u001b[0m ]\n\u001b[1;32m--> 114\u001b[0m output[idx] \u001b[38;5;241m=\u001b[39m \u001b[43mnp\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mnan_to_num\u001b[49m\u001b[43m(\u001b[49m\u001b[43moutput\u001b[49m\u001b[43m[\u001b[49m\u001b[43midx\u001b[49m\u001b[43m]\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mnan\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;241;43m9999\u001b[39;49m\u001b[43m)\u001b[49m\u001b[38;5;241m.\u001b[39mtolist()\n\u001b[0;32m 115\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m output\n", + "File \u001b[1;32md:\\Anaconda\\envs\\rostok\\lib\\site-packages\\numpy\\lib\\type_check.py:497\u001b[0m, in \u001b[0;36mnan_to_num\u001b[1;34m(x, copy, nan, posinf, neginf)\u001b[0m\n\u001b[0;32m 403\u001b[0m \u001b[38;5;129m@array_function_dispatch\u001b[39m(_nan_to_num_dispatcher)\n\u001b[0;32m 404\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m \u001b[38;5;21mnan_to_num\u001b[39m(x, copy\u001b[38;5;241m=\u001b[39m\u001b[38;5;28;01mTrue\u001b[39;00m, nan\u001b[38;5;241m=\u001b[39m\u001b[38;5;241m0.0\u001b[39m, posinf\u001b[38;5;241m=\u001b[39m\u001b[38;5;28;01mNone\u001b[39;00m, neginf\u001b[38;5;241m=\u001b[39m\u001b[38;5;28;01mNone\u001b[39;00m):\n\u001b[0;32m 405\u001b[0m \u001b[38;5;250m \u001b[39m\u001b[38;5;124;03m\"\"\"\u001b[39;00m\n\u001b[0;32m 406\u001b[0m \u001b[38;5;124;03m Replace NaN with zero and infinity with large finite numbers (default\u001b[39;00m\n\u001b[0;32m 407\u001b[0m \u001b[38;5;124;03m behaviour) or with the numbers defined by the user using the `nan`,\u001b[39;00m\n\u001b[1;32m (...)\u001b[0m\n\u001b[0;32m 495\u001b[0m \u001b[38;5;124;03m array([222222.+111111.j, 111111. +0.j, 111111.+222222.j])\u001b[39;00m\n\u001b[0;32m 496\u001b[0m \u001b[38;5;124;03m \"\"\"\u001b[39;00m\n\u001b[1;32m--> 497\u001b[0m x \u001b[38;5;241m=\u001b[39m \u001b[43m_nx\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43marray\u001b[49m\u001b[43m(\u001b[49m\u001b[43mx\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43msubok\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;28;43;01mTrue\u001b[39;49;00m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mcopy\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mcopy\u001b[49m\u001b[43m)\u001b[49m\n\u001b[0;32m 498\u001b[0m xtype \u001b[38;5;241m=\u001b[39m x\u001b[38;5;241m.\u001b[39mdtype\u001b[38;5;241m.\u001b[39mtype\n\u001b[0;32m 500\u001b[0m isscalar \u001b[38;5;241m=\u001b[39m (x\u001b[38;5;241m.\u001b[39mndim \u001b[38;5;241m==\u001b[39m \u001b[38;5;241m0\u001b[39m)\n", + "\u001b[1;31mKeyboardInterrupt\u001b[0m: " ] } ], @@ -430,17 +488,21 @@ " print(i)\n", " graph = GraphGrammar()\n", " rules = [\"Init\",\n", - " \"Add_Leg_Base\",\"Positive_Translation_X4\",\"Positive_Translation_Z3\", \"Extension\",\"Extension\",\"R_Wheel\", \"Cyl_Wheel\",\n", - " \"Terminal_Link3\",\"Terminal_Link3\",f'Terminal_Joint{i}',f'Terminal_Joint{i}', \n", + " \"Add_Leg_Base\",\"Positive_Translation_X4\",\"Positive_Translation_Z3\",\"Rotation\",\n", + " 'Rotation_Y', \"Extension\",\"Extension\",f'Terminal_Joint{i}',f'Terminal_Joint{i}', \"Rotation\",\"R_Wheel\", \"Cyl_Wheel\",\n", + " \"Terminal_Link3\",\"Terminal_Link3\", 'Terminal_Joint0','Rotation_Y',\n", "\n", - " \"Add_Leg_Base\",\"Positive_Translation_X4\",\"Negative_Translation_Z3\", \"Extension\",\"Extension\",\"L_Wheel\", \"Cyl_Wheel\",\n", - " \"Terminal_Link3\",\"Terminal_Link3\",f'Terminal_Joint{i}',f'Terminal_Joint{i}', \n", + " \"Add_Leg_Base\",\"Positive_Translation_X4\",\"Negative_Translation_Z3\",\"Rotation\",\n", + " 'Rotation_Y', \"Extension\",\"Extension\",f'Terminal_Joint{i}',f'Terminal_Joint{i}',\"Rotation\",\"L_Wheel\", \"Cyl_Wheel\",\n", + " \"Terminal_Link3\",\"Terminal_Link3\", 'Terminal_Joint0','Rotation_Y',\n", "\n", - " \"Add_Leg_Base\",\"Negative_Translation_X4\",\"Positive_Translation_Z3\", \"Extension\",\"Extension\",\"R_Wheel\", \"Cyl_Wheel\",\n", - " \"Terminal_Link3\",\"Terminal_Link3\",f'Terminal_Joint{i}',f'Terminal_Joint{i}', \n", + " \"Add_Leg_Base\",\"Negative_Translation_X4\",\"Positive_Translation_Z3\",\"Rotation\",\n", + " 'Rotation_Y', \"Extension\",\"Extension\",\"Rotation\",f'Terminal_Joint{i}', f'Terminal_Joint{i}',\"R_Wheel\", \"Cyl_Wheel\",\n", + " \"Terminal_Link3\",\"Terminal_Link3\", 'Terminal_Joint0','Rotation_Y',\n", "\n", - " \"Add_Leg_Base\",\"Negative_Translation_X4\",\"Negative_Translation_Z3\", \"Extension\",\"Extension\",\"L_Wheel\", \"Cyl_Wheel\",\n", - " \"Terminal_Link3\",\"Terminal_Link3\",f'Terminal_Joint{i}',f'Terminal_Joint{i}', \n", + " \"Add_Leg_Base\",\"Negative_Translation_X4\",\"Negative_Translation_Z3\",\"Rotation\",\n", + " 'Rotation_Y', \"Extension\",\"Extension\",f'Terminal_Joint{i}',f'Terminal_Joint{i}', \"Rotation\",\"L_Wheel\", \"Cyl_Wheel\",\n", + " \"Terminal_Link3\",\"Terminal_Link3\",'Terminal_Joint0','Rotation_Y',\n", "\n", " 'Terminal_Main_Body3'\n", " \n", @@ -449,10 +511,10 @@ " for rule in rules:\n", " graph.apply_rule(rule_vocab.get_rule(rule))\n", "\n", - " scenario = SuspensionCarScenario(0.0001, 1,initial_vertical_pos=height, controller_cls=SimpleKeyBoardController)\n", + " scenario = SuspensionCarScenario(0.0001, 0.5,initial_vertical_pos=height, controller_cls=SimpleKeyBoardController)\n", " scenario.add_event_builder(event_builder=EventBodyTooLowBuilder(0.15))\n", " scenario.add_event_builder(event_builder=EventContactInInitialPositionBuilder())\n", - " result = scenario.run_simulation(graph, parameters, starting_positions=[[-30,60,0], [-30,60,0], [-30,60,0], [-30,60,0]], vis = False, delay=False)\n", + " result = scenario.run_simulation(graph, parameters, starting_positions=[[-30,30,0,0], [30,-30,0,0], [-30,30,0,0], [30,-30,0,0]], vis = False, delay=False)\n", " stiffness[i]=list(result.robot_final_ds.get_data(\"COG\").items())[0][1][-1][1]\n", "\n", "\n" @@ -460,22 +522,22 @@ }, { "cell_type": "code", - "execution_count": 17, + "execution_count": null, "metadata": {}, "outputs": [ { "data": { "text/plain": [ - "[]" + "[]" ] }, - "execution_count": 17, + "execution_count": 20, "metadata": {}, "output_type": "execute_result" }, { "data": { - "image/png": "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", + "image/png": "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", "text/plain": [ "
" ] @@ -486,12 +548,12 @@ ], "source": [ "import matplotlib.pyplot as plt\n", - "plt.plot(stiffness)" + "plt.plot(stiffness)\n" ] }, { "cell_type": "code", - "execution_count": 18, + "execution_count": 40, "metadata": {}, "outputs": [ { @@ -500,25 +562,44 @@ "text": [ "99\n" ] + }, + { + "ename": "RuntimeError", + "evalue": "SWIG director method error. Error detected when calling 'TorqueFunctor.evaluate'", + "output_type": "error", + "traceback": [ + "\u001b[1;31m---------------------------------------------------------------------------\u001b[0m", + "\u001b[1;31mRuntimeError\u001b[0m Traceback (most recent call last)", + "Cell \u001b[1;32mIn[40], line 33\u001b[0m\n\u001b[0;32m 31\u001b[0m scenario\u001b[38;5;241m.\u001b[39madd_event_builder(event_builder\u001b[38;5;241m=\u001b[39mEventBodyTooLowBuilder(\u001b[38;5;241m0.15\u001b[39m))\n\u001b[0;32m 32\u001b[0m \u001b[38;5;66;03m#scenario.add_event_builder(event_builder=EventContactInInitialPositionBuilder())\u001b[39;00m\n\u001b[1;32m---> 33\u001b[0m result \u001b[38;5;241m=\u001b[39m \u001b[43mscenario\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mrun_simulation\u001b[49m\u001b[43m(\u001b[49m\u001b[43mgraph\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mparameters\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mstarting_positions\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43m[\u001b[49m\u001b[43m[\u001b[49m\u001b[38;5;241;43m-\u001b[39;49m\u001b[38;5;241;43m30\u001b[39;49m\u001b[43m,\u001b[49m\u001b[38;5;241;43m30\u001b[39;49m\u001b[43m,\u001b[49m\u001b[38;5;241;43m0\u001b[39;49m\u001b[43m,\u001b[49m\u001b[38;5;241;43m0\u001b[39;49m\u001b[43m]\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43m[\u001b[49m\u001b[38;5;241;43m30\u001b[39;49m\u001b[43m,\u001b[49m\u001b[38;5;241;43m-\u001b[39;49m\u001b[38;5;241;43m30\u001b[39;49m\u001b[43m,\u001b[49m\u001b[38;5;241;43m0\u001b[39;49m\u001b[43m,\u001b[49m\u001b[38;5;241;43m0\u001b[39;49m\u001b[43m]\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43m[\u001b[49m\u001b[38;5;241;43m-\u001b[39;49m\u001b[38;5;241;43m30\u001b[39;49m\u001b[43m,\u001b[49m\u001b[38;5;241;43m30\u001b[39;49m\u001b[43m,\u001b[49m\u001b[38;5;241;43m0\u001b[39;49m\u001b[43m,\u001b[49m\u001b[38;5;241;43m0\u001b[39;49m\u001b[43m]\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43m[\u001b[49m\u001b[38;5;241;43m30\u001b[39;49m\u001b[43m,\u001b[49m\u001b[38;5;241;43m-\u001b[39;49m\u001b[38;5;241;43m30\u001b[39;49m\u001b[43m,\u001b[49m\u001b[38;5;241;43m0\u001b[39;49m\u001b[43m,\u001b[49m\u001b[38;5;241;43m0\u001b[39;49m\u001b[43m]\u001b[49m\u001b[43m]\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mvis\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43m \u001b[49m\u001b[38;5;28;43;01mTrue\u001b[39;49;00m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mdelay\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;28;43;01mTrue\u001b[39;49;00m\u001b[43m)\u001b[49m\n", + "File \u001b[1;32md:\\work\\projects\\rostok\\rostok\\simulation_chrono\\simulation_scenario.py:302\u001b[0m, in \u001b[0;36mSuspensionCarScenario.run_simulation\u001b[1;34m(self, graph, controller_data, starting_positions, vis, delay)\u001b[0m\n\u001b[0;32m 297\u001b[0m robot_data_dict \u001b[38;5;241m=\u001b[39m {\n\u001b[0;32m 298\u001b[0m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mCOG\u001b[39m\u001b[38;5;124m\"\u001b[39m: (SensorCalls\u001b[38;5;241m.\u001b[39mBODY_TRAJECTORY, SensorObjectClassification\u001b[38;5;241m.\u001b[39mBODY,\n\u001b[0;32m 299\u001b[0m SensorCalls\u001b[38;5;241m.\u001b[39mBODY_TRAJECTORY),\n\u001b[0;32m 300\u001b[0m }\n\u001b[0;32m 301\u001b[0m simulation\u001b[38;5;241m.\u001b[39madd_robot_data_type_dict(robot_data_dict)\n\u001b[1;32m--> 302\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[43msimulation\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43msimulate\u001b[49m\u001b[43m(\u001b[49m\u001b[43mn_steps\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mstep_length\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m10000\u001b[39;49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mevent_list\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mvis\u001b[49m\u001b[43m)\u001b[49m\n", + "File \u001b[1;32md:\\work\\projects\\rostok\\rostok\\simulation_chrono\\simulation.py:320\u001b[0m, in \u001b[0;36mSingleRobotSimulation.simulate\u001b[1;34m(self, number_of_steps, step_length, fps, event_container, visualize)\u001b[0m\n\u001b[0;32m 318\u001b[0m \u001b[38;5;28;01mfor\u001b[39;00m i \u001b[38;5;129;01min\u001b[39;00m \u001b[38;5;28mrange\u001b[39m(number_of_steps):\n\u001b[0;32m 319\u001b[0m current_time \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mchrono_system\u001b[38;5;241m.\u001b[39mGetChTime()\n\u001b[1;32m--> 320\u001b[0m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43msimulate_step\u001b[49m\u001b[43m(\u001b[49m\u001b[43mstep_length\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mcurrent_time\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mi\u001b[49m\u001b[43m)\u001b[49m\n\u001b[0;32m 321\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mresult\u001b[38;5;241m.\u001b[39mtime_vector\u001b[38;5;241m.\u001b[39mappend(\u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mchrono_system\u001b[38;5;241m.\u001b[39mGetChTime())\n\u001b[0;32m 322\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m visualize:\n", + "File \u001b[1;32md:\\work\\projects\\rostok\\rostok\\simulation_chrono\\simulation.py:259\u001b[0m, in \u001b[0;36mSingleRobotSimulation.simulate_step\u001b[1;34m(self, step_length, current_time, step_n)\u001b[0m\n\u001b[0;32m 251\u001b[0m \u001b[38;5;250m\u001b[39m\u001b[38;5;124;03m\"\"\"Simulate one step and update sensors and data stores\u001b[39;00m\n\u001b[0;32m 252\u001b[0m \u001b[38;5;124;03m\u001b[39;00m\n\u001b[0;32m 253\u001b[0m \u001b[38;5;124;03m Args:\u001b[39;00m\n\u001b[0;32m 254\u001b[0m \u001b[38;5;124;03m step_length (float): the time of the step\u001b[39;00m\n\u001b[0;32m 255\u001b[0m \u001b[38;5;124;03m current_time (float): current time of the simulation\u001b[39;00m\n\u001b[0;32m 256\u001b[0m \u001b[38;5;124;03m step_n: number of the current step\"\"\"\u001b[39;00m\n\u001b[0;32m 258\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mchrono_system\u001b[38;5;241m.\u001b[39mUpdate()\n\u001b[1;32m--> 259\u001b[0m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mchrono_system\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mDoStepDynamics\u001b[49m\u001b[43m(\u001b[49m\u001b[43mstep_length\u001b[49m\u001b[43m)\u001b[49m\n\u001b[0;32m 260\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mupdate_data(step_n)\n\u001b[0;32m 262\u001b[0m robot: RobotChrono \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mrobot\n", + "File \u001b[1;32md:\\Anaconda\\envs\\rostok\\lib\\site-packages\\pychrono\\core.py:21183\u001b[0m, in \u001b[0;36mChSystem.DoStepDynamics\u001b[1;34m(self, step_size)\u001b[0m\n\u001b[0;32m 21181\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m \u001b[38;5;21mDoStepDynamics\u001b[39m(\u001b[38;5;28mself\u001b[39m, step_size):\n\u001b[0;32m 21182\u001b[0m \u001b[38;5;250m \u001b[39m\u001b[38;5;124mr\u001b[39m\u001b[38;5;124;03m\"\"\"DoStepDynamics(ChSystem self, double step_size) -> int\"\"\"\u001b[39;00m\n\u001b[1;32m> 21183\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[43m_core\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mChSystem_DoStepDynamics\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mstep_size\u001b[49m\u001b[43m)\u001b[49m\n", + "\u001b[1;31mRuntimeError\u001b[0m: SWIG director method error. Error detected when calling 'TorqueFunctor.evaluate'" + ] } ], "source": [ "i = np.argmax(stiffness)\n", "print(i)\n", - "i = 70\n", + "i = 30\n", "graph = GraphGrammar()\n", "rules = [\"Init\",\n", - " \"Add_Leg_Base\",\"Positive_Translation_X4\",\"Positive_Translation_Z3\", \"Extension\",\"Extension\",\"R_Wheel\", \"Cyl_Wheel\",\n", - " \"Terminal_Link3\",\"Terminal_Link3\",f'Terminal_Joint{i}',f'Terminal_Joint{i}', \n", + " \"Add_Leg_Base\",\"Positive_Translation_X4\",\"Positive_Translation_Z3\",\"Rotation\",\n", + " 'Rotation_Y', \"Extension\",\"Extension\",f'Terminal_Joint{i}',f'Terminal_Joint{i}', \"Rotation\",\"R_Wheel\", \"Cyl_Wheel\",\n", + " \"Terminal_Link3\",\"Terminal_Link3\", 'Terminal_Joint0','Rotation_Y',\n", "\n", - " \"Add_Leg_Base\",\"Positive_Translation_X4\",\"Negative_Translation_Z3\", \"Extension\",\"Extension\",\"L_Wheel\", \"Cyl_Wheel\",\n", - " \"Terminal_Link3\",\"Terminal_Link3\",f'Terminal_Joint{i}',f'Terminal_Joint{i}', \n", + " \"Add_Leg_Base\",\"Positive_Translation_X4\",\"Negative_Translation_Z3\",\"Rotation\",\n", + " 'Rotation_Y', \"Extension\",\"Extension\",f'Terminal_Joint{i}',f'Terminal_Joint{i}',\"Rotation\",\"L_Wheel\", \"Cyl_Wheel\",\n", + " \"Terminal_Link3\",\"Terminal_Link3\", 'Terminal_Joint0','Rotation_Y',\n", "\n", - " \"Add_Leg_Base\",\"Negative_Translation_X4\",\"Positive_Translation_Z3\", \"Extension\",\"Extension\",\"R_Wheel\", \"Cyl_Wheel\",\n", - " \"Terminal_Link3\",\"Terminal_Link3\",f'Terminal_Joint{i}',f'Terminal_Joint{i}', \n", + " \"Add_Leg_Base\",\"Negative_Translation_X4\",\"Positive_Translation_Z3\",\"Rotation\",\n", + " 'Rotation_Y', \"Extension\",\"Extension\",\"Rotation\",f'Terminal_Joint{i}', f'Terminal_Joint{i}',\"R_Wheel\", \"Cyl_Wheel\",\n", + " \"Terminal_Link3\",\"Terminal_Link3\", 'Terminal_Joint0','Rotation_Y',\n", "\n", - " \"Add_Leg_Base\",\"Negative_Translation_X4\",\"Negative_Translation_Z3\", \"Extension\",\"Extension\",\"L_Wheel\", \"Cyl_Wheel\",\n", - " \"Terminal_Link3\",\"Terminal_Link3\",f'Terminal_Joint{i}',f'Terminal_Joint{i}', \n", + " \"Add_Leg_Base\",\"Negative_Translation_X4\",\"Negative_Translation_Z3\",\"Rotation\",\n", + " 'Rotation_Y', \"Extension\",\"Extension\",f'Terminal_Joint{i}',f'Terminal_Joint{i}', \"Rotation\",\"L_Wheel\", \"Cyl_Wheel\",\n", + " \"Terminal_Link3\",\"Terminal_Link3\",'Terminal_Joint0','Rotation_Y',\n", "\n", " 'Terminal_Main_Body3'\n", " \n", @@ -530,8 +611,8 @@ "\n", "scenario = SuspensionCarScenario(0.0001, 10,initial_vertical_pos=height, controller_cls=SimpleKeyBoardController)\n", "scenario.add_event_builder(event_builder=EventBodyTooLowBuilder(0.15))\n", - "scenario.add_event_builder(event_builder=EventContactInInitialPositionBuilder())\n", - "result = scenario.run_simulation(graph, parameters, starting_positions=[[-30,60,0], [-30,60,0], [-30,60,0], [-30,60,0]], vis = True, delay=True)\n" + "#scenario.add_event_builder(event_builder=EventContactInInitialPositionBuilder())\n", + "result = scenario.run_simulation(graph, parameters, starting_positions=[[-30,30,0,0], [30,-30,0,0], [-30,30,0,0], [30,-30,0,0]], vis = True, delay=True)\n" ] }, {