diff --git a/rostok/block_builder_chrono/blocks_utils.py b/rostok/block_builder_chrono/blocks_utils.py index b5de821c..4a4657b6 100644 --- a/rostok/block_builder_chrono/blocks_utils.py +++ b/rostok/block_builder_chrono/blocks_utils.py @@ -73,8 +73,7 @@ def evaluate(self, time, rest_angle, angle, vel, link): """ torque = 0 - if self.spring_coef > 10**-5: - torque = -self.spring_coef * (angle - rest_angle) - self.damping_coef * vel + 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 d0cc821e..c88b0a98 100644 --- a/rostok/criterion/simulation_flags.py +++ b/rostok/criterion/simulation_flags.py @@ -115,10 +115,12 @@ def find_event(self, event_list: list[SimulationSingleEvent]): if isinstance(event, self.even_class): return event return None + @abstractmethod def build_event(self, event_list): pass + class EventContactBuilder(EventBuilder): def __init__(self, take_from_body: bool = False) -> None: super().__init__(event_class=EventContact) @@ -482,31 +484,57 @@ def build_event(self, event_list) -> EventStopExternalForce: raise Exception( 'Event requires another event prebuilt: EventStopExternalForce <- EventGrasp') return event_list.append(EventStopExternalForce(force_test_time=self.force_test_time, grasp_event=grasp_event)) - + class EventBodyTooLow(SimulationSingleEvent): def __init__(self, ref_height: float): super().__init__() self.ref_height = ref_height - + def event_check(self, current_time: float, step_n: int, robot_data: Sensor, env_data: Sensor): robot_position = robot_data.get_body_trajectory_point() # it works only with current rule set, where the palm/flat always has the smallest index among the bodies main_body_pos = list(robot_position.items())[0][1] - if main_body_pos[1] 0: + return EventCommands.STOP + + return EventCommands.CONTINUE + + +class EventContactInInitialPositionBuilder(EventBuilder): + def __init__(self): + super().__init__(event_class=EventStopExternalForce) + + def build_event(self, event_list) -> EventContactInInitialPosition: + event = self.find_event(event_list=event_list) + if event: + raise Exception( + 'Attempt to create two same events for a simulation: EventContactInInitialPosition') + return event_list.append(EventContactInInitialPosition()) + class EventBodyTooLowBuilder(EventBuilder): def __init__(self, ref_height: float): super().__init__(event_class=EventStopExternalForce) self.ref_height = ref_height + def build_event(self, event_list) -> EventBodyTooLow: event = self.find_event(event_list=event_list) if event: raise Exception( 'Attempt to create two same events for a simulation: EventBodyTooLow') - return event_list.append(EventBodyTooLow(ref_height=self.ref_height)) \ No newline at end of file + return event_list.append(EventBodyTooLow(ref_height=self.ref_height)) diff --git a/tests_jupyter/wheels_ruleset.ipynb b/tests_jupyter/wheels_ruleset.ipynb index 5e44a4df..236b1565 100644 --- a/tests_jupyter/wheels_ruleset.ipynb +++ b/tests_jupyter/wheels_ruleset.ipynb @@ -2,7 +2,7 @@ "cells": [ { "cell_type": "code", - "execution_count": 1, + "execution_count": 19, "metadata": {}, "outputs": [], "source": [ @@ -26,7 +26,7 @@ }, { "cell_type": "code", - "execution_count": 2, + "execution_count": 20, "metadata": {}, "outputs": [], "source": [ @@ -51,7 +51,7 @@ }, { "cell_type": "code", - "execution_count": 3, + "execution_count": 21, "metadata": {}, "outputs": [], "source": [ @@ -70,18 +70,24 @@ }, { "cell_type": "code", - "execution_count": 4, + "execution_count": 22, "metadata": {}, "outputs": [], "source": [ + "from copy import deepcopy\n", "# blueprint for the palm\n", "main_body = []\n", + "\n", "for i in range(10):\n", " main_body.append(PrimitiveBodyBlueprint(\n", - " Box(0.5, 0.1, 0.3), material=def_mat, color=[255, 0, 0], density=100+i*100))\n", - "\n", + " 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_body_cyl = PrimitiveBodyBlueprint(\n", - " Cylinder(0.03, 0.02), material=def_mat, color=[0, 120, 255], density=500)\n", + " Cylinder(0.03, 0.02), material=wheel_def_mat, color=[0, 120, 255], density=500)\n", "\n", "wheel_body_ell = PrimitiveBodyBlueprint(\n", " Ellipsoid(0.06,0.06, 0.04), material=def_mat, color=[0, 120, 255], density=500)\n", @@ -104,7 +110,7 @@ }, { "cell_type": "code", - "execution_count": 5, + "execution_count": 23, "metadata": {}, "outputs": [], "source": [ @@ -121,7 +127,7 @@ }, { "cell_type": "code", - "execution_count": 6, + "execution_count": 24, "metadata": {}, "outputs": [], "source": [ @@ -150,7 +156,7 @@ }, { "cell_type": "code", - "execution_count": 7, + "execution_count": 25, "metadata": {}, "outputs": [], "source": [ @@ -169,7 +175,7 @@ }, { "cell_type": "code", - "execution_count": 8, + "execution_count": 26, "metadata": {}, "outputs": [], "source": [ @@ -185,7 +191,7 @@ }, { "cell_type": "code", - "execution_count": 9, + "execution_count": 27, "metadata": {}, "outputs": [], "source": [ @@ -196,24 +202,24 @@ }, { "cell_type": "code", - "execution_count": 10, + "execution_count": 28, "metadata": {}, "outputs": [], "source": [ - "stiffness = np.linspace(0.1,1,10)\n", + "stiffness = np.linspace(0.1,10,100)\n", "\n", "no_control_joint = list(\n", " map(lambda x: RevolveJointBlueprint(JointInputType.UNCONTROL,\n", " stiffness=x,\n", - " damping=0.02,\n", + " damping=0.05,\n", " equilibrium_position=0), stiffness))\n", - "motor_bp = RevolveJointBlueprint(JointInputType.TORQUE, stiffness=0, damping=0.001)\n", - "neutral_bp = RevolveJointBlueprint(JointInputType.UNCONTROL, stiffness=0, damping=0.001)" + "motor_bp = RevolveJointBlueprint(JointInputType.TORQUE, stiffness=0, damping=0.002)\n", + "neutral_bp = RevolveJointBlueprint(JointInputType.UNCONTROL, stiffness=0, damping=0.002)" ] }, { "cell_type": "code", - "execution_count": 11, + "execution_count": 29, "metadata": {}, "outputs": [], "source": [ @@ -227,7 +233,7 @@ }, { "cell_type": "code", - "execution_count": 12, + "execution_count": 30, "metadata": {}, "outputs": [], "source": [ @@ -245,7 +251,7 @@ }, { "cell_type": "code", - "execution_count": 13, + "execution_count": 31, "metadata": {}, "outputs": [], "source": [ @@ -278,12 +284,12 @@ }, { "cell_type": "code", - "execution_count": 14, + "execution_count": 32, "metadata": {}, "outputs": [ { "data": { - "image/png": "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", + "image/png": "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", "text/plain": [ "
" ] @@ -293,20 +299,21 @@ } ], "source": [ - "\n", "i=9\n", "graph = GraphGrammar()\n", "rules = [\"Init\",\n", - " \"Add_Leg_Base\",\"Positive_Translation_X4\",\"Positive_Translation_Z3\",\"Rotation\",\n", - " 'Rotation_Y', \"Extension\",\"Extension\",\"Rotation\",\"R_Wheel\", \"Cyl_Wheel\",\n", - " \"Terminal_Link3\",\"Terminal_Link3\",f'Terminal_Joint{i}',f'Terminal_Joint{i}', 'Rotation_Y',\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", "\n", - " \"Add_Leg_Base\",\"Positive_Translation_X4\",\"Negative_Translation_Z3\",\"Rotation\",\n", - " 'Rotation_Y', \"Extension\",\"Extension\",\"Rotation\",\"L_Wheel\", \"Cyl_Wheel\",\n", - " \"Terminal_Link3\",\"Terminal_Link3\",f'Terminal_Joint{i}',f'Terminal_Joint{i}', 'Rotation_Y',\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", + "\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", + "\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", "\n", - " \"Add_Leg_Base\",\"Negative_Translation_X4\",\"Negative_Translation_Z0\", \"Extension\",\"Extension\",\n", - " \"Terminal_Link3\",\"Terminal_Link3\",f'Terminal_Joint{i}',f'Terminal_Joint{i}', \"Wheel\", \"Ell_Wheel\",\n", " 'Terminal_Main_Body3'\n", " \n", "]\n", @@ -320,65 +327,237 @@ }, { "cell_type": "code", - "execution_count": 15, + "execution_count": 33, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - "Jupyter environment detected. Enabling Open3D WebVisualizer.\n", - "[Open3D INFO] WebRTC GUI backend enabled.\n", - "[Open3D INFO] WebRTCWindowSystem: HTTP handshake server disabled.\n" + "0.26363636363636367\n" ] } ], "source": [ - "from rostok.simulation_chrono.simulation_scenario import WalkingScenario, SuspensionCarScenario\n", - "from rostok.library.rule_sets.leg_rules import get_biped\n", - "from rostok.library.rule_sets.ruleset_simple_wheels import get_four_wheels\n", - "from rostok.graph_grammar.graph_utils import plot_graph\n", - "\n", - "# scenario = WalkingScenario(0.0001, 3)\n", + "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", - "# control = {\"initial_value\": [0.05]*2}\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", - "# scenario.run_simulation(graph, control, starting_positions=[[45,-90,0], [-90,90,0], [90,-90,0]], vis = True, delay=True)" + "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.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", + " height = i\n", + " break\n", + "\n", + "print(height)" + ] + }, + { + "cell_type": "code", + "execution_count": 34, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array([0.1 , 0.10909091, 0.11818182, 0.12727273, 0.13636364,\n", + " 0.14545455, 0.15454545, 0.16363636, 0.17272727, 0.18181818,\n", + " 0.19090909, 0.2 , 0.20909091, 0.21818182, 0.22727273,\n", + " 0.23636364, 0.24545455, 0.25454545, 0.26363636, 0.27272727,\n", + " 0.28181818, 0.29090909, 0.3 , 0.30909091, 0.31818182,\n", + " 0.32727273, 0.33636364, 0.34545455, 0.35454545, 0.36363636,\n", + " 0.37272727, 0.38181818, 0.39090909, 0.4 , 0.40909091,\n", + " 0.41818182, 0.42727273, 0.43636364, 0.44545455, 0.45454545,\n", + " 0.46363636, 0.47272727, 0.48181818, 0.49090909, 0.5 ,\n", + " 0.50909091, 0.51818182, 0.52727273, 0.53636364, 0.54545455,\n", + " 0.55454545, 0.56363636, 0.57272727, 0.58181818, 0.59090909,\n", + " 0.6 , 0.60909091, 0.61818182, 0.62727273, 0.63636364,\n", + " 0.64545455, 0.65454545, 0.66363636, 0.67272727, 0.68181818,\n", + " 0.69090909, 0.7 , 0.70909091, 0.71818182, 0.72727273,\n", + " 0.73636364, 0.74545455, 0.75454545, 0.76363636, 0.77272727,\n", + " 0.78181818, 0.79090909, 0.8 , 0.80909091, 0.81818182,\n", + " 0.82727273, 0.83636364, 0.84545455, 0.85454545, 0.86363636,\n", + " 0.87272727, 0.88181818, 0.89090909, 0.9 , 0.90909091,\n", + " 0.91818182, 0.92727273, 0.93636364, 0.94545455, 0.95454545,\n", + " 0.96363636, 0.97272727, 0.98181818, 0.99090909, 1. ])" + ] + }, + "execution_count": 34, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "np.linspace(0.1,1,100)" ] }, { "cell_type": "code", "execution_count": 16, "metadata": {}, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "0\n", + "10\n", + "20\n", + "30\n", + "40\n", + "50\n", + "60\n", + "70\n", + "80\n", + "90\n" + ] + } + ], "source": [ - "from rostok.criterion.simulation_flags import EventBodyTooLowBuilder\n", - "from rostok.control_chrono.controller import SimpleKeyBoardController\n", - "scenario = SuspensionCarScenario(0.0001, 3,initial_vertical_pos=0.5, controller_cls=SimpleKeyBoardController)\n", - "scenario.add_event_builder(event_builder=EventBodyTooLowBuilder(0.15))\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", - "#control = {\"initial_value\": [0.05]*2}\n", + "stiffness = np.zeros(100)\n", + "for i in range(100):\n", + " if i%10 == 0: \n", + " 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", + "\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", + "\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", + "\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", + "\n", + " 'Terminal_Main_Body3'\n", + " \n", + " ]\n", + "\n", + " for rule in rules:\n", + " graph.apply_rule(rule_vocab.get_rule(rule))\n", "\n", - "#result = scenario.run_simulation(graph, parameters, starting_positions=[[45,-90,0], [-90,90,0], [90,-90,0]], vis = True, delay=True)" + " scenario = SuspensionCarScenario(0.0001, 1,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", + " stiffness[i]=list(result.robot_final_ds.get_data(\"COG\").items())[0][1][-1][1]\n", + "\n", + "\n" ] }, { "cell_type": "code", "execution_count": 17, "metadata": {}, - "outputs": [], + "outputs": [ + { + "data": { + "text/plain": [ + "[]" + ] + }, + "execution_count": 17, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], "source": [ - "#list(result.robot_final_ds.get_data(\"COG\").items())[0][1][-5:]" + "import matplotlib.pyplot as plt\n", + "plt.plot(stiffness)" + ] + }, + { + "cell_type": "code", + "execution_count": 18, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "99\n" + ] + } + ], + "source": [ + "i = np.argmax(stiffness)\n", + "print(i)\n", + "i = 70\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", + "\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", + "\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", + "\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", + "\n", + " 'Terminal_Main_Body3'\n", + " \n", + "]\n", + "\n", + "for rule in rules:\n", + " graph.apply_rule(rule_vocab.get_rule(rule))\n", + "\n", + "\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" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "0.1722" + ] + }, + "execution_count": 76, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "list(result.robot_final_ds.get_data(\"COG\").items())[0][1][-1][1]" + ] + }, + { + "cell_type": "code", + "execution_count": 35, + "metadata": {}, "outputs": [], "source": [ "from rostok.block_builder_api.block_blueprints import EnvironmentBodyBlueprint\n", @@ -413,7 +592,7 @@ " mesh = chrono.ChBodyEasyMesh(\"TRACKMANIA.obj\", 8000, True, True, True, chrono_material, 0.002)\n", " floor.body = mesh\n", " floor.body.SetNameString(\"Floor\")\n", - " floor.body.SetPos(chrono.ChVectorD(6.6,-0.04,5.2))\n", + " floor.body.SetPos(chrono.ChVectorD(6.6,-0.02,5.2))\n", " floor.body.GetVisualShape(0).SetTexture(\"chess.png\", 0.03, 0.03)\n", " floor.body.SetBodyFixed(True)\n", " return floor\n", @@ -421,7 +600,7 @@ "\n", "floor = create_track()\n", "\n", - "scenario = WalkingScenario(0.001, 10000, SimpleKeyBoardController)\n", + "scenario = WalkingScenario(0.0001, 10000, SimpleKeyBoardController)\n", "scenario.set_floor(floor)\n", "#graph = get_stiff_wheels_4()\n", "\n", @@ -433,7 +612,7 @@ "\n", " \n", "\n", - "scenario.run_simulation(graph, parameters, starting_positions=[[-60,60,0], [60,-60,0], [-60,60,0], [60,-60,0]], vis = True, delay=True, is_follow_camera = True)" + "scenario.run_simulation(graph, parameters, starting_positions=[[-45,60,0], [-45,60,0], [-45,60,0], [-45,60,0]], vis = True, delay=True, is_follow_camera = True)" ] } ], diff --git a/wheels_ruleset.ipynb b/wheels_ruleset.ipynb index 939c1881..d9f975d2 100644 --- a/wheels_ruleset.ipynb +++ b/wheels_ruleset.ipynb @@ -370,19 +370,7 @@ "cell_type": "code", "execution_count": 17, "metadata": {}, - "outputs": [ - { - "ename": "", - "evalue": "", - "output_type": "error", - "traceback": [ - "\u001b[1;31mThe Kernel crashed while executing code in the current cell or a previous cell. \n", - "\u001b[1;31mPlease review the code in the cell(s) to identify a possible cause of the failure. \n", - "\u001b[1;31mClick here for more info. \n", - "\u001b[1;31mView Jupyter log for further details." - ] - } - ], + "outputs": [], "source": [ "#list(result.robot_final_ds.get_data(\"COG\").items())[0][1][-5:]" ] @@ -404,6 +392,7 @@ " ChronoBlockCreatorInterface\n", "from rostok.block_builder_api.easy_body_shapes import Box\n", "\n", + "\n", "def create_bump_track():\n", " def_mat = DefaultChronoMaterialNSC()\n", " floor = ChronoBlockCreatorInterface.create_environment_body(EnvironmentBodyBlueprint(Box(5, 0.05, 5), material=def_mat, color=[215, 255, 0]))\n",