Commit c07fc22a authored by Florent Lamiraux's avatar Florent Lamiraux Committed by Florent Lamiraux florent@laas.fr
Browse files

[slides] Several improvements

  add a figure about relative poses,
  improve exercise 2,
  unify notations.
parent ee2eb48e
......@@ -105,8 +105,9 @@ Exercise 2
Exercise 2.1
~~~~~~~~~~~~
In order to help the manipulation planner, define a constraint graph with
intermediate states like for instance:
In order to help the manipulation planner, define in file
+grasp_ball_in_box.py+ a constraint graph with intermediate states like for
instance:
- a state where the gripper is empty above the ball
- a state where the gripper holds the ball above the ground.
......
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
<head>
<meta http-equiv="Content-Type" content="application/xhtml+xml; charset=UTF-8" />
<meta name="generator" content="AsciiDoc 8.6.9" />
<meta name="generator" content="AsciiDoc 8.6.10" />
<title>Manipulation planning</title>
<style type="text/css">
/* Shared CSS for AsciiDoc xhtml11 and html5 backends */
......@@ -727,17 +728,13 @@ install: function(toclevels) {
}
}
asciidoc.install(2);
asciidoc.install();
/*]]>*/
</script>
</head>
<body class="article">
<div id="header">
<h1>Manipulation planning</h1>
<div id="toc">
<div id="toctitle">Table of Contents</div>
<noscript><p><b>JavaScript must be enabled in your browser to display the table of contents.</b></p></noscript>
</div>
</div>
<div id="content">
<div class="sect1">
......@@ -752,14 +749,14 @@ asciidoc.install(2);
<div class="paragraph"><p>Open a terminal, cd into hpp-practicals directory and open 3 tab by typing CTRL+SHIFT+T
twice. In the first terminal, type</p></div>
<div class="listingblock">
<div class="content"><!-- Generator: GNU source-highlight 3.1.8
<div class="content"><!-- Generator: GNU source-highlight
by Lorenzo Bettini
http://www.lorenzobettini.it
http://www.gnu.org/software/src-highlite -->
<pre><tt>hppcorbaserver</tt></pre></div></div>
<div class="paragraph"><p>In the second terminal, type</p></div>
<div class="listingblock">
<div class="content"><!-- Generator: GNU source-highlight 3.1.8
<div class="content"><!-- Generator: GNU source-highlight
by Lorenzo Bettini
http://www.lorenzobettini.it
http://www.gnu.org/software/src-highlite -->
......@@ -767,14 +764,14 @@ http://www.gnu.org/software/src-highlite -->
python -i grasp_ball<span style="color: #990000">.</span>py</tt></pre></div></div>
<div class="paragraph"><p>In the third terminal, type</p></div>
<div class="listingblock">
<div class="content"><!-- Generator: GNU source-highlight 3.1.8
<div class="content"><!-- Generator: GNU source-highlight
by Lorenzo Bettini
http://www.lorenzobettini.it
http://www.gnu.org/software/src-highlite -->
<pre><tt>gepetto-gui</tt></pre></div></div>
<div class="paragraph"><p>To display the robot and environment, create again a client to <code>gepetto-gui</code> in the python terminal:</p></div>
<div class="listingblock">
<div class="content"><!-- Generator: GNU source-highlight 3.1.8
<div class="content"><!-- Generator: GNU source-highlight
by Lorenzo Bettini
http://www.lorenzobettini.it
http://www.gnu.org/software/src-highlite -->
......@@ -788,7 +785,7 @@ http://www.gnu.org/software/src-highlite -->
You can display the initial and goal configurations of the problem defined in
the script by typing respectively</p></div>
<div class="listingblock">
<div class="content"><!-- Generator: GNU source-highlight 3.1.8
<div class="content"><!-- Generator: GNU source-highlight
by Lorenzo Bettini
http://www.lorenzobettini.it
http://www.gnu.org/software/src-highlite -->
......@@ -811,7 +808,7 @@ http://www.gnu.org/software/src-highlite -->
</div>
<div class="paragraph"><p>Alternatively, in the python terminal. You can display the constraint graph by typing</p></div>
<div class="listingblock">
<div class="content"><!-- Generator: GNU source-highlight 3.1.8
<div class="content"><!-- Generator: GNU source-highlight
by Lorenzo Bettini
http://www.lorenzobettini.it
http://www.gnu.org/software/src-highlite -->
......@@ -824,7 +821,7 @@ element.</p></div>
<h3 id="_solving_the_problem">Solving the problem</h3>
<div class="paragraph"><p>Typing</p></div>
<div class="listingblock">
<div class="content"><!-- Generator: GNU source-highlight 3.1.8
<div class="content"><!-- Generator: GNU source-highlight
by Lorenzo Bettini
http://www.lorenzobettini.it
http://www.gnu.org/software/src-highlite -->
......@@ -835,7 +832,7 @@ http://www.gnu.org/software/src-highlite -->
<h3 id="_displaying_the_path">Displaying the path</h3>
<div class="paragraph"><p>As in exercise 1, the path can be displayed using the path player</p></div>
<div class="listingblock">
<div class="content"><!-- Generator: GNU source-highlight 3.1.8
<div class="content"><!-- Generator: GNU source-highlight
by Lorenzo Bettini
http://www.lorenzobettini.it
http://www.gnu.org/software/src-highlite -->
......@@ -860,8 +857,9 @@ initial configuration of the box.</p></div>
<div class="sectionbody">
<div class="sect2">
<h3 id="_exercise_2_1">Exercise 2.1</h3>
<div class="paragraph"><p>In order to help the manipulation planner, define a constraint graph with
intermediate states like for instance:</p></div>
<div class="paragraph"><p>In order to help the manipulation planner, define in file
<code>grasp_ball_in_box.py</code> a constraint graph with intermediate states like for
instance:</p></div>
<div class="ulist"><ul>
<li>
<p>
......@@ -883,7 +881,7 @@ a state where the gripper holds the ball above the ground.
<div class="admonitionblock">
<table><tr>
<td class="icon">
<img src="./images/icons/warning.png" alt="Warning" />
<div class="title">Warning</div>
</td>
<td class="content">In method <code>graph.createNode</code> the order of the nodes in the list given as input is important: when checking in which node a configuration lies, node constraints will be checked in the order of node creation.</td>
</tr></table>
......@@ -904,7 +902,7 @@ indices named <code>paths</code> corresponding to indices in the vector of paths
<div class="sect2">
<h3 id="_some_useful_methods">Some useful methods</h3>
<div class="listingblock">
<div class="content"><!-- Generator: GNU source-highlight 3.1.8
<div class="content"><!-- Generator: GNU source-highlight
by Lorenzo Bettini
http://www.lorenzobettini.it
http://www.gnu.org/software/src-highlite -->
......@@ -979,7 +977,7 @@ graph<span style="color: #990000">.</span><span style="font-weight: bold"><span
<div id="footer">
<div id="footer-text">
Last updated
2019-05-31 14:50:08 CEST
2020-11-09 12:13:47 CET
</div>
</div>
</body>
......
......@@ -6,4 +6,7 @@
\begin {center}
\includegraphics [width=.5\linewidth] {figures/be.png}
\end {center}
\begin{itemize}
\item \texttt{script/grasp\_ball.py}
\end{itemize}
\end {frame}
No preview for this file type
%% Creator: Inkscape inkscape 0.92.3, www.inkscape.org
%% PDF/EPS/PS + LaTeX output extension by Johan Engelen, 2010
%% Accompanies image file 'relative-pose.pdf' (pdf, eps, ps)
%%
%% To include the image in your LaTeX document, write
%% \input{<filename>.pdf_tex}
%% instead of
%% \includegraphics{<filename>.pdf}
%% To scale the image, write
%% \def\svgwidth{<desired width>}
%% \input{<filename>.pdf_tex}
%% instead of
%% \includegraphics[width=<desired width>]{<filename>.pdf}
%%
%% Images with a different path to the parent latex file can
%% be accessed with the `import' package (which may need to be
%% installed) using
%% \usepackage{import}
%% in the preamble, and then including the image with
%% \import{<path to file>}{<filename>.pdf_tex}
%% Alternatively, one can specify
%% \graphicspath{{<path to file>/}}
%%
%% For more information, please see info/svg-inkscape on CTAN:
%% http://tug.ctan.org/tex-archive/info/svg-inkscape
%%
\begingroup%
\makeatletter%
\providecommand\color[2][]{%
\errmessage{(Inkscape) Color is used for the text in Inkscape, but the package 'color.sty' is not loaded}%
\renewcommand\color[2][]{}%
}%
\providecommand\transparent[1]{%
\errmessage{(Inkscape) Transparency is used (non-zero) for the text in Inkscape, but the package 'transparent.sty' is not loaded}%
\renewcommand\transparent[1]{}%
}%
\providecommand\rotatebox[2]{#2}%
\newcommand*\fsize{\dimexpr\f@size pt\relax}%
\newcommand*\lineheight[1]{\fontsize{\fsize}{#1\fsize}\selectfont}%
\ifx\svgwidth\undefined%
\setlength{\unitlength}{494.67450396bp}%
\ifx\svgscale\undefined%
\relax%
\else%
\setlength{\unitlength}{\unitlength * \real{\svgscale}}%
\fi%
\else%
\setlength{\unitlength}{\svgwidth}%
\fi%
\global\let\svgwidth\undefined%
\global\let\svgscale\undefined%
\makeatother%
\begin{picture}(1,0.80562299)%
\lineheight{1}%
\setlength\tabcolsep{0pt}%
\put(0,0){\includegraphics[width=\unitlength,page=1]{relative-pose.pdf}}%
\put(0.17477689,0.34063648){\color[rgb]{0,0,0}\makebox(0,0)[lt]{\smash{\begin{tabular}[t]{l}$T_1$\end{tabular}}}}%
\put(0.44259931,0.46059872){\color[rgb]{0,0,0}\makebox(0,0)[lt]{\smash{\begin{tabular}[t]{l}$T_2$\end{tabular}}}}%
\put(0,0){\includegraphics[width=\unitlength,page=2]{relative-pose.pdf}}%
\put(0.54593367,0.65844625){\color[rgb]{0,0,0}\makebox(0,0)[lt]{\smash{\begin{tabular}[t]{l}{\color{red}$\mathbf{u}$}\end{tabular}}}}%
\put(0,0){\includegraphics[width=\unitlength,page=3]{relative-pose.pdf}}%
\put(0.65609859,0.28745037){\color[rgb]{0,0,0}\makebox(0,0)[lt]{\smash{\begin{tabular}[t]{l}{\color{red}$\mathbf{v}$}\end{tabular}}}}%
\put(0.42206309,0.00667914){\color[rgb]{0,0,0}\makebox(0,0)[lt]{\smash{\begin{tabular}[t]{l}$R_1$\end{tabular}}}}%
\put(0.62395352,0.05862306){\color[rgb]{0,0,0}\makebox(0,0)[lt]{\smash{\begin{tabular}[t]{l}$R_2$\end{tabular}}}}%
\end{picture}%
\endgroup%
This diff is collapsed.
......@@ -366,6 +366,10 @@ Motion constraints
\begin {align*}
\forall t\in [0,1], f(\bar{\steer} (t)) &= 0
\end {align*}
\pause
It can be defined by projection
$$\bar{\steer} = proj\circ \steer
$$
\end {frame}
\begin {frame} {Projecting path on constraint}
......@@ -521,12 +525,12 @@ Motion constraints
\item <2-> for each connected component:
\setlength\leftmargin{0em}
\begin{itemize}[leftmargin=*]
\item[]<2-> $\conf_{near}$ = nearest\_neighbour($\conf_{rand}$, $roadmap$)
\item[]<3-> $e$ = select\_transition($\conf_{near}$)
\item[]<4-> $\conf_{proj}$ = generate\_target\_config($\conf_{near},\conf_{rand}$, $e$)
\item[]<5-> $\conf_{new}$ = extend($\conf_{near}$, $\conf_{proj}$, edge)
\item[]<2-> $\conf_{near}$ = nearest\_neighbor($\conf_{rand}$, $roadmap$)
\item[]<3-> $T$ = select\_transition($\conf_{near}$)
\item[]<4-> $\conf_{proj}$ = generate\_target\_config($\conf_{near},\conf_{rand}$, $T$)
\item[]<5-> $\conf_{new}$ = extend($\conf_{near}$, $\conf_{proj}$, $T$)
\item[]<6-> $roadmap$.insert\_node($\conf_{new}$)
\item[]<7-> $roadmap$.insert\_edge(e, $\conf_{near}$, $\conf_{new}$)
\item[]<7-> $roadmap$.insert\_edge($T$, $\conf_{near}$, $\conf_{new}$)
\item[]<7-> new\_nodes.append ($\conf_{new}$)
\end{itemize}
\item <8-> for $\conf\in (\conf_{new}^1, ..., \conf_{new}^{n_{cc}})$:
......@@ -544,10 +548,10 @@ Motion constraints
\begin {frame} {Select transition}
$e$ = select\_transition($\conf_{near}$)
$T$ = select\_transition($\conf_{near}$)
\vskip .5cm
Outward edges of each node are given a probability distribution. The transition from a node to another node is chosen by random sampling.
Outward transitions of each state are given a probability distribution. The transition from a state to another state is chosen by random sampling.
\begin{center}
\begin{tikzpicture}[>=stealth',auto,node distance=3.5cm,
thick,main node/.style={circle,draw,text width=1.5cm,align=center,font=\footnotesize}]
......@@ -567,12 +571,12 @@ Motion constraints
\begin {frame} {Generate target configuration}
$\conf_{proj}$ = generate\_target\_config($\conf_{near},\conf_{rand}$, $e$)
$\conf_{proj}$ = generate\_target\_config($\conf_{near},\conf_{rand}$, $T$)
\vskip .5cm
Once edge $e$ has been selected, $\conf_{rand}$ is \textit {projected} onto the destination node $n_{dest}$ in a configuration reachable by $\conf_{near}$.
Once transition $T$ has been selected, $\conf_{rand}$ is \textit {projected} onto the destination state $S_{dest}$ in a configuration reachable by $\conf_{near}$.
\begin{align*}
f_{e} (\conf_{proj}) &= f_{e} (\conf_{near})\\
f_{dest} (\conf_{proj}) &= 0
f_{T} (\conf_{proj}) &= f_{T} (\conf_{near})\\
f_{S_{dest}} (\conf_{proj}) &= 0
\end{align*}
\end {frame}
......@@ -582,9 +586,9 @@ Once edge $e$ has been selected, $\conf_{rand}$ is \textit {projected} onto the
\begin {frame} {Extend}
$\conf_{new}$ = extend($\conf_{near}$, $\conf_{proj}$, edge)
$\conf_{new}$ = extend($\conf_{near}$, $\conf_{proj}$, $T$)
\vskip.5cm
\textit {Project} straight path $[\conf_{near},\conf_{proj}]$ on edge constraint:
\textit {Project} straight path $[\conf_{near},\conf_{proj}]$ on transition constraint:
\begin {itemize}
\item if projection successful and projected path collision free
$$
......@@ -595,7 +599,7 @@ $$
\end {itemize}
\pause
$$
\forall \conf\in(\conf_{near},\conf_{new}),\ f_{e} (\conf) = f_{e}(\conf_{near})
\forall \conf\in(\conf_{near},\conf_{new}),\ f_{T} (\conf) = f_{T}(\conf_{near})
$$
\end {frame}
......@@ -626,14 +630,14 @@ $$
\begin {frame} {Connect}
connect ($\conf_0$, $\conf_1$):
\begin{itemize}
\item [] $s_0$ = state ($\conf_0$)
\item [] $s_1$ = state ($\conf_1$)
\item [] e = transition ($n_0$, $n_1$)
\item [] if e and $f_{e} (\conf_0) == f_{e} (\conf_1)$:
\item [] $S_0$ = state ($\conf_0$)
\item [] $S_1$ = state ($\conf_1$)
\item [] $T$ = transition ($S_0$, $S_1$)
\item [] if $T$ and $f_{T} (\conf_0) == f_{T} (\conf_1)$:
\begin {itemize}
\item [] if p = projected\_path (e, $\conf_0$, $\conf_1$) collision-free:
\item [] if p = projected\_path ($T$, $\conf_0$, $\conf_1$) collision-free:
\begin {itemize}
\item [] roadmap.insert\_edge (e, $\conf_0$,$\conf_1$)
\item [] roadmap.insert\_edge ($T$, $\conf_0$,$\conf_1$)
\end {itemize}
\end {itemize}
\item [] return
......@@ -723,17 +727,17 @@ Manipulation RRT is initialized with $\conf_{init}$, $\conf_{goal}$.
\begin {columns}
\column {.6\linewidth}
$\conf_{proj}$ = generate\_target\_config($\conf_{near},\conf_{rand}$, $e$)
$\conf_{proj}$ = generate\_target\_config($\conf_{near},\conf_{rand}$, $T$)
\vskip .5cm
$\conf_1\leftarrow$ pick configuration
\begin {itemize}
\item in node $N_1$,
\item in state $S_1$,
\item not in same connected component as $\conf_{near}$
\end {itemize}
\begin{align*}
f_{e_1} (\conf_{proj}) &= f_{e_1} (\conf_{near})\\
{\color{red} f_{e_2} (\conf_{proj})} &{\color{red}= f_{e_2} (\conf_1)}\\
f_{N_2} (\conf_{proj}) &= 0
f_{T_1} (\conf_{proj}) &= f_{T_1} (\conf_{near})\\
{\color{red} f_{T_2} (\conf_{proj})} &{\color{red}= f_{T_2} (\conf_1)}\\
f_{S_2} (\conf_{proj}) &= 0
\end{align*}
\column {.4\linewidth}
\begin{center}
......@@ -741,12 +745,12 @@ Manipulation RRT is initialized with $\conf_{init}$, $\conf_{goal}$.
\begin{tikzpicture}[>=stealth',auto,node distance=3.25cm,
thick,main node/.style={circle,draw,text width=1.25cm,align=center,
font=\tiny}]
{\node[main node] (nh) {$N_1$};}
{\node[main node] (h) [right of=nh] {$N_2$};}
{\node[main node] (nh) {$S_1$};}
{\node[main node] (h) [right of=nh] {$S_2$};}
{\path[<-] (h) edge[bend right=0] node[above] {Crossed foliation}
(nh);}
{\path[<-] (h) edge[bend right=22.5] node[above] {$e_1$} (nh);}
{\path[->] (h) edge[bend left=22.5] node[below] {$e_2$} (nh);}
{\path[<-] (h) edge[bend right=22.5] node[above] {$T_1$} (nh);}
{\path[->] (h) edge[bend left=22.5] node[below] {$T_2$} (nh);}
\end{tikzpicture}
\end{center}
\end {columns}
......@@ -758,9 +762,9 @@ Manipulation RRT is initialized with $\conf_{init}$, $\conf_{goal}$.
\begin {frame} {Crossed foliation transition: extend}
$\conf_{new}$ = extend($\conf_{near}$, $\conf_{proj}$, $e_1$)
$\conf_{new}$ = extend($\conf_{near}$, $\conf_{proj}$, $T_1$)
\vskip.5cm
\textit {Project} straight path $[\conf_{near},\conf_{proj}]$ on $e_1$ constraint:
\textit {Project} straight path $[\conf_{near},\conf_{proj}]$ on $T_1$ constraint:
\begin {itemize}
\item if projection successful and projected path collision free
$$
......@@ -768,10 +772,10 @@ Manipulation RRT is initialized with $\conf_{init}$, $\conf_{goal}$.
$$
\pause
\begin{align*}
f_{e_2} (\conf_{2}) &= f_{e_2} (\conf_1)\\
f_{N_2} (\conf_{2}) &= 0
f_{T_2} (\conf_{2}) &= f_{T_2} (\conf_1)\\
f_{S_2} (\conf_{2}) &= 0
\end{align*}
\item $\conf_2$ is connectable to $\conf_1$ via $e_2$.
\item $\conf_2$ is connectable to $\conf_1$ via $T_2$.
\end{itemize}
\end {frame}
......@@ -781,18 +785,30 @@ Manipulation RRT is initialized with $\conf_{init}$, $\conf_{goal}$.
\begin {frame} {Relative positions as numerical constraints}
Let $T_1 = T_{(R_1,t_1)}$ and $T_2 = T_{(R_2,t_2)}$ be two rigid-body transformations. The relative transformation $T_{2/1} = T_1^{-1}\circ T_2$ can be represented by a vector of dimension 6:
$$
\left(\begin{array}{c} \mathbf{u} \\ \mathbf {v}\end{array}\right)
$$
where
\begin {columns}
\column {.5\textwidth}
$$
\mathbf{u} = R_1^T (t_2-t_1)
$$
\column {.5\textwidth}
$R_1^T R_2$ is the matrix of the rotation around axis $\mathbf{v}/\|\mathbf {v}\|$ and of angles $\|\mathbf {v}\|$.
\end {columns}
\centerline{
\parbox{.5\linewidth}{
\begin{itemize}
\item $T_1 = T_{(R_1,t_1)}\in SE(3)$, $T_2 = T_{(R_2,t_2)}\in SE(3)$.
\item $T_{2/1} = T_1^{-1}\circ T_2$ can be represented by a vector of dimension 6:
$$
\left(\begin{array}{c} \mathbf{u} \\ \mathbf {v}\end{array}\right)
$$
where
$$
\mathbf{u} = R_1^T (t_2-t_1)
$$
$R_1^T R_2$ matrix of the rotation around axis $\mathbf{v}/\|\mathbf {v}\|$ and of angles $\|\mathbf {v}\|$.
\end{itemize}
}
\parbox{.5\linewidth}{
\centerline {
\def\svgwidth {\linewidth}
{\tiny
\graphicspath{{./figures/}}
\input {figures/relative-pose.pdf_tex}
}
}
}
}
\end {frame}
Markdown is supported
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