{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Learning a Repertoire of Robot Arm Configurations\n", "\n", "_This tutorial is part of the series of pyribs tutorials! See [here](https://docs.pyribs.org/en/stable/tutorials.html) for the list of all tutorials and the order in which they should be read._\n", "\n", "In robotic manipulation, [inverse kinematics](https://en.wikipedia.org/wiki/Inverse_kinematics) involves figuring out how to configure the joints of an arm such that the end effector is at a certain position. For instance, in order to pick up a cup, a robot must move its gripper to the cup's position, and in order to catch a ball, a robot must move its hand to where it predicts the ball will be.\n", "\n", "In this tutorial, we will show how to use CMA-ME to find a repertoire of joint angles that move a robotic arm to a wide variety of positions. For simplicity, we will use a planar 12-DoF arm, i.e. an arm with 12 joints that only moves in 2D space.\n", "\n", "This tutorial is based on the benchmark introduced in [Vassiliades 2018](https://arxiv.org/abs/1804.03906)." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Setup\n", "\n", "First, we install pyribs." ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "%pip install ribs[visualize] tqdm" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "And here we import some utilities." ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [], "source": [ "import time\n", "import sys\n", "\n", "import matplotlib.pyplot as plt\n", "import numpy as np\n", "from tqdm import trange, tqdm" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Problem Description\n", "\n", "Our arm consists of 12 joints and links of length 1. It looks something like the following, where the red dot is the base of the arm, the green dot is the position of the end effector, and each black dot is an intermediate joint (note that the base also counts as a joint). Since the total length of the arm is 12 units, the arm can only move to positions in a circle of radius 12 around its base.\n", "\n", "![Arm repertoire example](_static/arm_repertoire_example.png)\n", "\n", "Each solution $\\theta$ consists of 12 joint angles for the arm, and each angle $\\theta_i$ is bounded by $[-\\pi, \\pi]$ (i.e. each joint has a full range of motion).\n", "\n", "Since we want to move the arm to a wide variety of positions, our measures are the final $(x,y)$ coordinates of the arm. To calculate these coordinates, we use these [forward kinematics](https://en.wikipedia.org/wiki/Forward_kinematics) equations:\n", "\n", "$$x = l_1 \\cos(\\theta_1) + l_2 \\cos(\\theta_1 + \\theta_2) + ... + l_{12} \\cos(\\theta_1 + \\theta_2 + ... \\theta_{12})$$\n", "\n", "$$y = l_1 \\sin(\\theta_1) + l_2 \\sin(\\theta_1 + \\theta_2) + ... + l_{12} \\sin(\\theta_1 + \\theta_2 + ... \\theta_{12})$$\n", "\n", "\n", "Where $l_i$ is the length of the $i$-th link (in our case, $l_i$ is always 1).\n", "\n", "There are many possible objectives to use. For instance, in a real-world setting, we may choose to minimize the movement of certain joints, as they may be weaker or more prone to wear-and-tear. Here, we choose to maximize the negative standard deviation of the joint angles (i.e. minimize the standard deviation), such that the joint angles are as close to each other as possible. This will make the arm look like a smooth curve in its final position.\n", "\n", "The following simulate function calculates the objectives and measures for a batch of solutions." ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [], "source": [ "def simulate(solutions, link_lengths):\n", " \"\"\"Returns the objective values and measures for a batch of solutions.\n", " \n", " Args:\n", " solutions (np.ndarray): A (batch_size, dim) array where each row\n", " contains the joint angles for the arm. dim will always be 12\n", " in this tutorial.\n", " link_lengths (np.ndarray): A (dim,) array with the lengths of each\n", " arm link (this will always be an array of ones in the tutorial).\n", " Returns:\n", " objs (np.ndarray): (batch_size,) array of objectives.\n", " meas (np.ndarray): (batch_size, 2) array of measures.\n", " \"\"\"\n", " objs = -np.std(solutions, axis=1)\n", "\n", " # theta_1, theta_1 + theta_2, ...\n", " cum_theta = np.cumsum(solutions, axis=1)\n", " # l_1 * cos(theta_1), l_2 * cos(theta_1 + theta_2), ...\n", " x_pos = link_lengths[None] * np.cos(cum_theta)\n", " # l_1 * sin(theta_1), l_2 * sin(theta_1 + theta_2), ...\n", " y_pos = link_lengths[None] * np.sin(cum_theta)\n", "\n", " meas = np.concatenate(\n", " (\n", " np.sum(x_pos, axis=1, keepdims=True),\n", " np.sum(y_pos, axis=1, keepdims=True),\n", " ),\n", " axis=1,\n", " )\n", "\n", " return objs, meas" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Quality Diversity Algorithm Setup\n", "\n", "We will use CMA-ME, with the following pyribs components, to search for arm configurations:\n", "\n", "- [CVTArchive](https://docs.pyribs.org/en/stable/api/ribs.archives.CVTArchive.html): This archive uses a [Centroidal Voronoi Tesselation (CVT)](https://en.wikipedia.org/wiki/Centroidal_Voronoi_tessellation) to divide the measure space into evenly sized cells. It is typically used for high-dimensional measure spaces where the curse of dimensionality prevents one from using [GridArchive](https://docs.pyribs.org/en/stable/api/ribs.archives.GridArchive.html), but it works perfectly fine for lower dimensions too.\n", "- [EvolutionStartegyEmitter](https://docs.pyribs.org/en/stable/api/ribs.emitters.EvolutionStrategyEmitter.html): This emitter is used to create the improvement emitter, which originated in the work of [Fontaine et al., 2020](https://arxiv.org/abs/1912.02400). It uses CMA-ES to search for solutions that improve the archive.\n", "- [Scheduler](https://docs.pyribs.org/en/stable/api/ribs.schedulers.Scheduler.html): Binds all the components together and controls how the archive and emitters interact.\n", "\n", "First, let's create the archive. This line may take a minute or two to run because it initializes the archive, and initializing CVTArchive involves using [k-means clustering (Lloyd's algorithm)](https://scikit-learn.org/stable/modules/clustering.html#k-means) to generate the CVT." ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [], "source": [ "from ribs.archives import CVTArchive\n", "\n", "dof = 12 # Degrees of freedom for the arm.\n", "link_lengths = np.ones(dof) # 12 links, each with length 1.\n", "max_pos = np.sum(link_lengths)\n", "archive = CVTArchive(\n", " solution_dim=dof,\n", " cells=10000,\n", " # The x and y coordinates are bound by the maximum arm position.\n", " ranges=[(-max_pos, max_pos), (-max_pos, max_pos)],\n", " # The archive will use a k-D tree to search for the cell a solution\n", " # belongs to.\n", " use_kd_tree=True,\n", ")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Now, the emitters. We will we use 5 instances of EvolutionStrategyEmitter with two-stage improvement ranking (\"2imp\"), each with a batch size of 30. This means we will evaluate 150 solutions (5 x 30) on each iteration of the algorithm. As described earlier, we also bound each angle to be between $-\\pi$ and $\\pi$." ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [], "source": [ "from ribs.emitters import EvolutionStrategyEmitter\n", "\n", "emitters = [\n", " EvolutionStrategyEmitter(\n", " archive=archive,\n", " x0=np.zeros(dof),\n", " # Initial step size of 0.1 seems reasonable based on the bounds.\n", " sigma0=0.1,\n", " ranker=\"2imp\",\n", " bounds=[(-np.pi, np.pi)] * dof,\n", " batch_size=30,\n", " ) for _ in range(5) # Create 5 separate emitters.\n", "]" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Finally, the scheduler combines everything together." ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [], "source": [ "from ribs.schedulers import Scheduler\n", "\n", "scheduler = Scheduler(archive, emitters)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Training\n", "\n", "With our algorithm set up, we can now search for arm configurations. We also extract metrics throughout our training loop." ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Iterations: 100%|████████████████████████████████████████████████████████████████████████████████████████████████████████| 700/700 [00:05<00:00, 135.93it/s]\n" ] } ], "source": [ "metrics = {\n", " \"Archive Size\": {\n", " \"itrs\": [0],\n", " \"vals\": [0], # Starts at 0.\n", " },\n", " \"Max Objective\": {\n", " \"itrs\": [],\n", " \"vals\": [], # Does not start at 0.\n", " },\n", "}\n", "\n", "total_itrs = 700\n", "for itr in trange(1, total_itrs + 1, desc='Iterations', file=sys.stdout):\n", " sols = scheduler.ask()\n", " objs, meas = simulate(sols, link_lengths)\n", " scheduler.tell(objs, meas)\n", "\n", " # Logging.\n", " if itr % 50 == 0:\n", " metrics[\"Archive Size\"][\"itrs\"].append(itr)\n", " metrics[\"Archive Size\"][\"vals\"].append(len(archive))\n", " metrics[\"Max Objective\"][\"itrs\"].append(itr)\n", " metrics[\"Max Objective\"][\"vals\"].append(archive.stats.obj_max)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We can now plot the metrics." ] }, { "cell_type": "code", "execution_count": 7, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Final Archive Size: 7906\n", "Final Max Objective: -0.01241281801121334\n" ] }, { "data": { "image/png": "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\n", "text/plain": [ "