pypot/pypot-master/samples/notebooks/Benchmark your Poppy robot.ipynb

646 lines
133 KiB
Plaintext
Raw Permalink Normal View History

2025-07-30 11:57:45 +08:00
{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Benchmark your Poppy robot"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"The goal of this notebook is to help you identify the performance of your robot and where the bottle necks are. We will measure:\n",
"* the time to read/write the position to one motor (for each of your dynamixel bus)\n",
"* the time to read/write the positions for all motors (for each of your dynamixel bus)\n",
"* the regularity of the synchronization loop of pos/speed/load when\n",
" * only this loop is runnnig\n",
" * all other synchronization loops are running\n",
" * everything else is running"
]
},
{
"cell_type": "code",
"execution_count": 1,
"metadata": {},
"outputs": [],
"source": [
"from ipywidgets import interact"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Populating the interactive namespace from numpy and matplotlib\n"
]
}
],
"source": [
"%pylab inline"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"All bench info will be stored in this dictionary so it's easy to compare with other platforms."
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {},
"outputs": [],
"source": [
"results = {}"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## What's the platform"
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {
"scrolled": true
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Linux-4.19.118-v7l+-armv7l-with-debian-10.4\n"
]
}
],
"source": [
"import platform\n",
"\n",
"p = platform.platform()\n",
"print(p)\n",
"\n",
"results['platform'] = p"
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"3.7.3 (default, Dec 20 2019, 18:57:59) \n",
"[GCC 8.3.0]\n"
]
}
],
"source": [
"import sys\n",
"\n",
"v = sys.version\n",
"print(v)\n",
"\n",
"results['python'] = v"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": []
},
{
"cell_type": "code",
"execution_count": 6,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Pypot version: 4.0.0\n"
]
}
],
"source": [
"import pypot\n",
"\n",
"results['pypot'] = pypot.__version__\n",
"print('Pypot version: {}'.format(results['pypot']))"
]
},
{
"cell_type": "code",
"execution_count": 7,
"metadata": {},
"outputs": [
{
"data": {
"application/vnd.jupyter.widget-view+json": {
"model_id": "13c4b64ba42349fd82a2148c8e419b91",
"version_major": 2,
"version_minor": 0
},
"text/plain": [
"interactive(children=(Dropdown(description='robot', options={'poppy-ergo-jr': <class 'poppy_ergo_jr.poppy_ergo…"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"from pypot.creatures import installed_poppy_creatures\n",
"\n",
"RobotCls = None\n",
"\n",
"def robot_selector(robot):\n",
" global RobotCls\n",
" RobotCls = robot\n",
" \n",
"interact(robot_selector, robot=installed_poppy_creatures);"
]
},
{
"cell_type": "code",
"execution_count": 8,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"poppy_ergo_jr.poppy_ergo_jr.PoppyErgoJr"
]
},
"execution_count": 8,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"RobotCls"
]
},
{
"cell_type": "code",
"execution_count": 9,
"metadata": {},
"outputs": [],
"source": [
"robot = RobotCls()\n",
"results['robot'] = RobotCls"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Make sure all motors are turned off to avoid breaking anything:"
]
},
{
"cell_type": "code",
"execution_count": 10,
"metadata": {},
"outputs": [],
"source": [
"for m in robot.motors:\n",
" m.compliant = True"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"We find the synchronization loop for pos/speed/load and monkey patch them for monitoring."
]
},
{
"cell_type": "code",
"execution_count": 13,
"metadata": {},
"outputs": [],
"source": [
"import time\n",
"\n",
"from pypot.dynamixel.syncloop import MetaDxlController\n",
"from pypot.dynamixel.controller import PosSpeedLoadDxlController\n",
"\n",
"meta_controllers = [c for c in robot._controllers if isinstance(c, MetaDxlController)]\n",
"\n",
"#controllers = [cc for cc in c.controllers for c in meta_controllers if isinstance(cc, PosSpeedLoadDxlController)]\n",
"controllers = []\n",
"for c in meta_controllers:\n",
" controllers.extend([cc for cc in c.controllers if isinstance(cc, PosSpeedLoadDxlController)])\n",
"\n",
"for c in controllers:\n",
" c.stop()\n",
"\n",
"for c in controllers: \n",
" def wrapped_update():\n",
" if not hasattr(c, 't'):\n",
" c.t = []\n",
" \n",
" c.t.append(time.time())\n",
" c.update()\n",
" \n",
" c._update = wrapped_update\n",
" \n",
"\n",
"for c in controllers:\n",
" c.start()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Now, we define our monitor and plotting functions."
]
},
{
"cell_type": "code",
"execution_count": 20,
"metadata": {},
"outputs": [],
"source": [
"import psutil\n",
"\n",
"def monitor(controllers, duration):\n",
" for c in controllers:\n",
" c.stop()\n",
" c.t = []\n",
" c.start()\n",
" \n",
" cpu = []\n",
" start = time.time()\n",
" while time.time() - start < duration:\n",
" time.sleep(1.0)\n",
" cpu.append(psutil.cpu_percent())\n",
" \n",
" print('Avg CPU usage: {}%'.format(mean(cpu)))\n",
" return {c: array(c.t) for c in controllers}\n",
"\n",
"def freq_plot(logs):\n",
" for c, t in logs.items():\n",
" dt = diff(t)\n",
" freq = 1.0 / dt\n",
" \n",
" print('Avg frq for controller {}: {:.3f} ms STD={:.3} ms'.format(c.ids, freq.mean(), freq.std()))\n",
" hist(freq)\n",
" xlim(0, 100)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"We also define this follow trajectory function, which applies a sinus on one motor (choosen below) and plot how close is its real position from the target one:"
]
},
{
"cell_type": "code",
"execution_count": 16,
"metadata": {},
"outputs": [],
"source": [
"def follow_trajectory(motor, duration=5, freq=50):\n",
" t = linspace(0, duration, duration * freq)\n",
"\n",
" a1, f1 = 10.0, 1.0\n",
" a2, f2 = 5.0, 0.5\n",
"\n",
" traj = a1 * sin(2 * pi * f1 * t) + a2 * sin(2 * pi * f2 * t)\n",
" rec = []\n",
"\n",
"\n",
" motor.compliant = False\n",
" motor.moving_speed = 0\n",
" motor.goal_position = 0\n",
" time.sleep(1.)\n",
"\n",
" for p in traj:\n",
" motor.goal_position = p\n",
" rec.append(motor.present_position)\n",
"\n",
" time.sleep(1.0 / freq) \n",
" \n",
" motor.compliant = True\n",
"\n",
" plot(traj)\n",
" plot(rec) "
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Now choose which motor you want to use for the follow trajectory test. It should be able to move freely from -20 to +20 degrees."
]
},
{
"cell_type": "code",
"execution_count": 17,
"metadata": {},
"outputs": [
{
"data": {
"application/vnd.jupyter.widget-view+json": {
"model_id": "91ba2ce5e78c4161bdbf9ab88f6903ed",
"version_major": 2,
"version_minor": 0
},
"text/plain": [
"interactive(children=(Dropdown(description='m', options=('m1', 'm2', 'm3', 'm4', 'm5', 'm6'), value='m1'), Out…"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"motor = None\n",
"\n",
"def motor_selector(m):\n",
" global motor\n",
" motor = getattr(robot, m)\n",
" \n",
"interact(motor_selector, m=[m.name for m in robot.motors]);"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Benchmark"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Our benchmark duration in seconds:"
]
},
{
"cell_type": "code",
"execution_count": 18,
"metadata": {},
"outputs": [],
"source": [
"duration = 30"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Normal usage"
]
},
{
"cell_type": "code",
"execution_count": 21,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Avg CPU usage: 10.7%\n",
"Avg frq for controller [1, 2, 3, 4, 5, 6]: 49.264 ms STD=2.85 ms\n"
]
},
{
"data": {
"image/png": "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
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"d = monitor(controllers, duration)\n",
"freq_plot(d)\n",
"\n",
"results['normal'] = d"
]
},
{
"cell_type": "code",
"execution_count": 24,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"follow_trajectory(motor)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Without primitives"
]
},
{
"cell_type": "code",
"execution_count": 25,
"metadata": {},
"outputs": [],
"source": [
"for p in robot.primitives:\n",
" p.stop()\n",
" \n",
"robot._primitive_manager.stop()"
]
},
{
"cell_type": "code",
"execution_count": 26,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Avg CPU usage: 11.7%\n",
"Avg frq for controller [1, 2, 3, 4, 5, 6]: 49.283 ms STD=2.95 ms\n"
]
},
{
"data": {
"image/png": "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
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"d = monitor(controllers, duration)\n",
"freq_plot(d)\n",
"\n",
"results['without primitive'] = d"
]
},
{
"cell_type": "code",
"execution_count": 27,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"follow_trajectory(motor)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Without all sensors"
]
},
{
"cell_type": "code",
"execution_count": 28,
"metadata": {},
"outputs": [],
"source": [
"for s in robot.sensors:\n",
" s.close()"
]
},
{
"cell_type": "code",
"execution_count": 29,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Avg CPU usage: 6.0%\n",
"Avg frq for controller [1, 2, 3, 4, 5, 6]: 49.729 ms STD=0.118 ms\n"
]
},
{
"data": {
"image/png": "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
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"d = monitor(controllers, duration)\n",
"freq_plot(d)\n",
"\n",
"results['without sensor'] = d"
]
},
{
"cell_type": "code",
"execution_count": 30,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"follow_trajectory(motor)"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": []
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 3",
"language": "python",
"name": "python3"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.7.3"
}
},
"nbformat": 4,
"nbformat_minor": 1
}