
English: 
[Narrator] I now want to ask you the really challenging question over here,
and it goes as follows: one of the weaknesses of slam is
as we move along and map a world by seeing these landmarks,
the matrix omega which is the big thing here and of course the vector C
grow linearly with the length of the path.
Now this means if you go to your local supermarket and buy a robot,
and that robot lives for a long time, say a year or a decade,
then this thing here, the path will be a really, really large even though the environment
in which it might operate, the map might be of a fixed size,
and that means a robot programmed by graph SLAM
will eventually stop working because it gets slower and slower.
Now, we all know computer operating systems that have that property.
The older they are the slower they are, but we're not talking about how to fix operating systems.
We're just talking about how to fix SLAM.

Spanish: 
[Narrador] Ahora quiero hacerle una pregunta realmente difícil,
y va de la siguiente manera: una de las debilidades de slam es
que a medida que avanzamos y mapeamos el mundo viendo esos puntos de referencia,
la matriz omega que es esta gran cosa de aquí y por supuesto el vector Xi
crecer linealmente con la longitud del mapa.
Ahora bien, esto significa que si usted va a su supermercado local y compra un robot,
y que la vida del robot es de un largo tiempo, por ejemplo un año o una década,
esta cosa de aquí, el camino será muy, muy grande a pesar de que el entorno
en el que podría operar, el mapa podría ser de un tamaño fijo,
y eso significa que un robot programado con Graph SLAM
eventualmente dejará de funcionar, ya que se vuelve más y más lento.
Ahora, todos sabemos que los sistemas operativos tienen esa propiedad.
Cuanto más viejos más lentos son, pero no estamos hablando acerca de cómo arreglar los sistemas operativos.
Estamos hablando de cómo solucionar SLAM.

Japanese: 
今回はとても難易度の高い問題を
出したいと思います
SLAMの短所の1つはこれらのランドマークを見て
移動しながら世界の地図を作成することです
行列Ωは大規模なものでありベクトルξはもちろん
経路の長さと共に線形的に増加します
例えば近くのスーパーでロボットを買うとします
そのロボットが1年または10年という長い間
存在する場合
例えロボットが動作する環境の地図が
固定サイズであったとしても
経路は非常に膨大になるのです
またGraph SLAMでプログラミングされたロボットは
だんだん遅くなって
最終的には動作が停止するでしょう
コンピュータオペレーティングシステムは
この特徴を有していて
古いほど処理速度は遅くなりますが
ここで話しているのは
SLAMを修正する方法についてです

Japanese: 
ソフトウェアに実装してほしい
重要な考えはこうです
私たちは保守する地図を縮小することができます
経路における最新の位置だけを持つ
地図にするのです
また地図を作成する時に
すべての情報を安全に消去できます
その方法はこれからお話しします
ロボットの位置1つと
1つの位置に関連する情報だけを含む
行列Ωがあります
位置が一次元の場合は行列は1×1です
一方では地図に対して多種多様のエントリを
持っているかもしれません
ロボットが新しい位置に移動するとします
Xt+1としましょう
次に行うのはすでによくご存じですが
expand関数を使って
ベクトル内の行列を増やすことです
新しい位置のためのスペースができました
追加した新しい領域はこれらの行です

English: 
The crucial idea that I want to tell you about and I want you to implement from scratch in our software
is the following: we can actually reduce the map we maintain
to one that only contains the most recent position in the path,
and all of the stuff over here can be safely erased when we build our map.
You don't know how to do it, but let me tell you.
Suppose we have a robot position and we have a matrix omega
that only contains the information pertaining to 1 position.
If the position is 1 dimensional, it's just 1 row and 1 column.
Whereas, you might have many different entries for the map.
Suppose the robot moves to a new position; let's call it XT+1.
Then, we'd do exactly the following: we'd grow the matrix in the vector
by using the expand function that you're already familiar with
such that we now have space for our new position.
The new area we added are these rows over here.
It's a single row of numbers of a position 1 dimensional.

Spanish: 
La idea crucial que quiero contarles y que quiero implementar desde cero en nuestro software
es la siguiente: se puede reducir el mapa que mantenemos
a uno que sólo contenga la posición más reciente en el mapa,
y que todas estas cosas de por aquí puedan ser borradas con seguridad cuando construimos nuestro mapa.
Usted no sabe cómo hacerlo, pero déjame que se lo diga.
Supongamos que tenemos una posición del robot y tenemos una matriz omega
que sólo contiene la información relativa a la posición 1.
Si la posición es de dimensión 1, es sólo una fila y una columna.
Considerando que, es posible que tenga muchas entradas diferentes para el mapa.
Supongamos que el robot se mueve a una nueva posición, vamos a llamarlo XT+1.
Luego, haría lo siguiente: nos volvería a crecer la matriz y vector
mediante el uso de la función expand que ya le es familiar
de tal manera que ahora tenemos espacio para nuestra nueva posición.
El nuevo área que hemos añadido son estas filas de aquí.
Es una única fila de números de posición de 1 dimension.

Spanish: 
Esto son 2 filas de números de posición que es de dimensión 2,
y esta columna, de nuevo, es sólo una única columna si nuestra posición es de dimensión 1;
de lo contrario, son dos columnas, y se inicializa todo a 0,
y entonces podremos aplicar nuestra regular actualización de movimiento,
que como saben añade un 1 o algunos números como 1 a la diagonal principal
y -1s fuera de la diagonal, y lo mismo en el lado derecho para el vector Xi.
Eso es sólo una actualización de movimiento, pero al ejecutarse nuestra ruta corre el riesgo de incrementarse.
Ahora volvamos a una forma como esta.
Hacemos que Xt+1 sobreviva.
En términos simplificados, se podría pensar en hacer esto con sólo cortar la nueva sub-matriz que comienza por aquí,
y el sub-vector comienza por aquí, sin embargo, si usted hace esto
como se puede comprobar fácilmente, aquella sub-matriz no te da la respuesta correcta,
y aquí es donde esta el jugo.

English: 
It's 2 rows of number of a position that is 2 dimensional,
and it's this column, again, is just a single column if our position is 1 dimensional;
otherwise, it is 2 column, and we initialize those all by 0,
and then we can apply our regular motion update,
that as you know adds 1 or some number like 1 to the main diagonal
and -1s off diagonal, and the same on the right side for the vector C.
That is just a motion update but that runs the risk that our path increases.
Now we go back to a form like this.
We make X2+1 survive.
Simplified speaking, you might think about doing this by just cutting out the new sub-matrix that starts over here,
and the sub-vector that starts over here; however, if you do this
as you can easily verify, that sub-matrix doesn't give you the correct answer,
and here is where the meat is.

Japanese: 
一次元の位置の場合は1行、
二次元の位置の場合は2行
この列も一次元の位置の場合は1列で
二次元の場合は2列です
そしてそれらすべてをゼロで初期化します
次に通常の動作更新を適用します
1または1に近い値を対角要素に追加し
－1を非対角要素に追加します
右側のベクトルξも同様です
これは単なる動作更新ですが
経路が増えるリスクがあります
こちらのフォームに戻りましょう
Xt＋1にします
簡単に言えば ここから始まる新しい部分行列と
ここから始まるサブベクトルを切り取ればいいと
考えるかもしれません
しかしそうだとしても容易に検証できるように
この部分行列は正しい答えを出力しません
要点はこうです

English: 
We now cut out 3 sub-matrices or values from the full matrix on the right side.
One sits here, that one I will call A.
One is over here; it's a single element for a 1D robot,
but is a 2 x 2 matrix for a robot in 2D coordinates,
and one that I'll call C, and it's obvious to see that this thing over here
that you want to cut out is called A-1.
These values carry a lot of importance.
We can't just erase them, but we can forward them back into the surviving matrix
by the following simple operation:
we take the surviving matrix to be called omega prime
and the surviving vector to be called X prime,
and you can get omega prime and X prime by using the function take that is in your own matrix library.
You have to look into how to make take take exactly those elements over here,
and then if we modify X prime and C prime with the following piece of math.

Spanish: 
Ahora eliminamos 3 sub-matrices o los valores de la matriz completa en el lado derecho.
Una se encuentra aquí, la voy a llamar A.
Una por aquí, es un elemento único para un robot 1D,
pero es una matriz 2 x 2 para un robot en coordenadas 2D,
y una que voy a llamar C, y es obvio ver que esta cosa de aquí
que desea eliminar se llama A-1.
Estos valores tienen una gran importancia.
No podemos eliminarlos, pero podemos remitirlos nuevamente dentro de la matriz que ha sobrevivido
por la simple operación siguiente:
tomamos la matriz que ha sobrevivido para llamarla omega prima
y el vector que ha sobrevivido le llamamos Xi prima,
y podemos obtener omega prima y Xi prima utilizando la función take que se encuentra en su propia librería matrix.
Hay que examinar la manera en que take coge exactamente los elementos de aquí,
y entonces si modificamos Xi prima y C prima con las siguientes operaciones matemáticas.

Japanese: 
私たちは右側の完全な行列から
3つの部分行列つまり値を切り取りました
ここにある1つをAと呼びます
こちらの1つは一次元のロボットの場合は
1つの要素ですが
二次元の座標にいるロボットの場合は2×2行列です
そして1つをCと呼びます
これが切り取りたいものであることは明らかですが
切り取ったものをA⁻¹としましょう
これらの値はかなり重要です
単純に消去することはできませんが
次のシンプルな操作によって
残りの行列に移動することができます
残りの行列をΩ´と呼びましょう
そして残りのベクトルをξ´と呼びます
Ω´とξ´は行列ライブラリにある
take関数を使用して取得できます
まずこれらの要素を正確に取得する方法を
検討する必要があります
Ω´とξ´を計算式で変更する場合は
Ω´から

Spanish: 
Restamos de omega prima A transpuesta por B a la -1, la inversa, por A.
Si aplicamos esto correctamente lo que le da es una matriz del mismo tamaño que omega prima,
y eso es lo que resta para llegar a nuestra omega reducida.
Del mismo modo se hace lo mismo para Xi.
Resta A prima menos B a la -1 por C.
Esto tiende a ser lo mismo que Gauss donde técnicamente lo eliminamos
o lo que llamamos integrar variable X1,
y yo no quiero entrar en detalles de por qué esto es correcto.
Mi libro tiene una demostración de varias páginas de esta simple ecuación.
Sólo quiero ayudarte aquí, estos valores son de importancia,
y para deshacerse de ellos hay que redistribuir el resto de variables
y esto es lo que pasa aquí con las matemáticas.
Esto es A transpuesta por B por A que se resta de los restantes de omega prima,
y lo mismo para Xi aquí.

English: 
We subtract from omega prime A transpose times B to the -1, the inverse, times A.
If we implement this correctly this gives you a matrix of the same size as sigma prime,
and that's what you subtract to arrive at our reduced sigma.
Similarly you do the same for C.
You subtract A prime minus B to the -1 times C.
This tends to be the same as Gaussian where we technically do away
or we call it integrate away the variable X1,
and I don't want to go into detail why that's correct.
My book has a multi-page proof of that simple equation.
I just want to give you intuition here, which is these values do carry importance,
and to get rid of those you have to redistribute them into the remaining variables
and that over here happens to be the math.
It's A transpose times B times A that you subtract from the remaining omega prime,
and the same for C over here.

Japanese: 
AのT乗×B⁻¹×Aを引きます
これを正しく実装すれば
σ´と同じサイズの行列が得られます
引いたのは縮約したσを得るためです
ξについても同様に計算します
ξ´からAのT乗×B⁻¹×Cを引きます
これはガウス分布と同じになる傾向があります
変数X₁を厳密に排除する
あるいは変数X₁を
先に実行してしまうことに相当します
これが正しいという詳しい説明は省略します
私の著書ではこの単純な方程式の証明に
何ページも割いています
ここではこれらの値が重要であるということを
直感で理解してください
また残りの変数に再分布する必要性を
排除するために
ここでは計算を行っています
AT×B×Aを残りのΩ´から引きます
Cに対しても同様に計算します

Spanish: 
Al hacer esto, se encuentran ahora con una matriz de la misma dimensión original
porque primero se agrega el cargo y luego restamos uno,
y como se puede ver cuando usted hace esto muchas, muchas veces
la dimensión final de la matriz sólo se determina basándose en el tamaño del mapa
más, bueno, una única entrada, que en el caso de 1D es una fila y una columna.
En el caso 2D son 2 correspondientes a la posición del robot.
Eso significa que SLAM escala a entornos muy grandes
porque podemos hacer el truco cada vez que se mueve un robot.
Usted pidió un reto de programación exigente.
Te lo prometo, usted estará ocupado con él durante un tiempo.
Te voy a dar ahora mi pedazo de código en el que he implementado SLAM para usted.
Usted está familiarizado con esto.
Usted tiene todo esto, y luego ejecuto SLAM con 3 puntos de referencia,
3 veces, un mundo de tamaño 100, y un rango de medición de 100.
Hago datos al azar, y ya que estás familiarizado podrás completar el resultado,

English: 
When you do this, you are now left with a matrix of the same original dimension
because we first added the post and then we subtracted one,
and as you can see when you do this many, many times
the final dimension of the matrix is only determined based on the size of the map
plus, well, a single entry which in the 1D case is 1 row and 1 column.
In the 2D case is 2 of those corresponding to the robot position.
That means SLAM scales to really large environments
because we can do the trick every single time a robot moves.
You asked for a challenging program assignment.
I promise you, you will be busy with it for awhile.
I'm giving you now my piece of code in which I implemented SLAM for you.
You're familiar with this.
You have all of that, and then I run SLAM with 3 landmarks,
3 time steps, a world size of 100, and a measurement range of 100.
I make data at random as you're familiar with and you'll complete the result,

Japanese: 
この計算を行うと
元の次元と同じ次元の行列が残ります
最初に位置を追加してから引いたからです
そして何度もご覧になって分かるとおり
行列の最終的な次元は地図のサイズに
一次元の場合は1×1の行列の単一のエントリを
二次元の場合は
ロボットの位置に対応する2×2の行列の
2エントリをそれぞれ足して決定します
これはSLAMが実に大規模な環境に
拡張できることを意味します
ロボットが動作する度に
目的を達成することができるからです
ここでは難しいプログラムの課題を出します
しばらく考え込んでしまうでしょう
SLAMを実装した私のコードの一部がこれで
皆さんがよくご存じのものです
ランドマークは3つでSLAMを実行します
時間ステップ数は3、世界のサイズは100
観測範囲は100です
いつものようにランダムにデータを作成するので
結果を入力してください

Japanese: 
この場合の結果には連結された
Ω、Xi、μのベクトルが含まれます
次は出力内容です
ランドマークが3つあります
実際のロボットの位置につながる
推定位置が続いています
どちらも正しくて
ランドマークの推定位置があります
実行する度に異なる結果が得られるのは
私のランドマークと世界が
毎回 異なるからです
また私が実装した関数と課題でもある関数を
オンラインSLAMといいます
これは私が話した処理そのものを行います
これは新しい動作が起こるたびに
行列のサイズを変更します
それから元のサイズに戻り
例として私が取得した行列Ωと
ベクトルξの情報を出力しています
さらに最終的な結果も出力しています
完全なSLAMアルゴリズムの場合と
まったく同じ推定位置を取得しています
86．0と33．7です
下の方には推定位置とまったく同じ数値があり
このようにして検証できます

English: 
and the result in this case contains a vector of omega C and U concatenated.
Then what I might get out looks as follows:
there's 3 landmarks.
There's a sequence of estimated positions leading up to the actual robot position.
They're both correct, and then there's estimates for where landmarks are.
Every time I run it, I get a different answer because my landmarks and my world is different every time.
Now I also implemented and that's your task now
a function called online SLAM.
It does exactly what I told you to do.
It resizes the matrix every time a new motion occurs
and then goes back to the original size,
and I've printed out here as an example the information matrix omega
and in the vector C that I obtained, and I also printed out the final result.
In the final result, we get exactly the same estimated pose as for the full SLAM algorithm
which is 86.0 and 33.7.
I go down, these are exactly the same number for the estimated pose; that's how you can verify this.

Spanish: 
y el resultado en este caso contiene un vector de omega Xi y mu concatenados.
Entonces, yo puedo ver algo como lo siguiente:
hay tres puntos de referencia.
Hay una secuencia de posiciones estimadas previas a la posición actual del robot.
Las dos son correctas, y luego hay estimaciones de donde están los puntos de referencia.
Cada vez que lo ejecuto, me sale una respuesta diferente porque mis puntos de referencia y mi mundo es diferente cada vez.
Ahora yo también lo he implementado y ahora esa es tú tarea
una función llamada online SLAM.
Hace exactamente lo que te dije que hace.
Cambia el tamaño de la matriz cada vez que se produce un nuevo movimiento
y luego vuelve a su tamaño original,
y lo he imprimido aquí como un ejemplo de información de la matriz omega
y el vector Xi que he obtenido, y también he imprimido el resultado final.
En el resultado final, se obtiene exactamente la misma posición estimada como en el algoritmo de SLAM completo
que es 86.0 y 33.7.
Voy hacia abajo, estos son exactamente los mismos números de la posicion estimada, que es como se puede comprobar esto.

Japanese: 
ランドマークの推定位置についても同じです
これらの座標は
Ωとξのサイズを縮約したにもかかわらず
一致しますが
Ωとξを出力すると
次元が削減されていることに気づきます
8×8の行列Ωの8という数字は
ランドマークの座標が6つ、
ロボットの最終位置が1つあることによります
完全なSLAMの場合に取得する行列よりも
大幅に小さくなります
サイズ8の情報ベクトルの場合も
同じことが言えます　これが例です
この課題では
オンラインSLAMルーチンを完成させてください
新しい位置を取得する度に
既存の位置の後ろに挿入することによって
行列を拡張します
次に部分行列を取り出すtakeを実行します
そしてA、Bと
情報ベクトルCを計算したあとに

English: 
The same is true for the estimated landmark.
Those coordinates are identical despite the fact that I reduce the size of omega and C,
but when I print omega and C, we find that the dimensionality is reduced.
It's an 8 x 8 matrix omega, and the number 8 comes because there's 6 coordinates for the landmarks and 1 final robot pose.
That is substantially smaller than the matrix I would obtain
for the full SLAM case, and the same is true for the information vector of size 8; here's an example.
What you are asked to do is to fill the entire online SLAM routine and to do this,
every time you get a new pose, you want to expand to grow the matrix by inserting something right behind the existing pose.
You then run take to take out the sub-matrix.
You also calculate A, B, and for the information vector C,

Spanish: 
Lo mismo es cierto para los puntos de referencia estimados.
Dichas coordenadas son idénticos a pesar del hecho de reducir el tamaño de omega y Xi,
pero cuando imprimo omega y Xi, nos encontramos con que la dimensionalidad se reduce.
Se trata de una matriz omega de 8 x 8, y el número 8 viene porque hay 6 coordenadas para los puntos de referencia y una para la posición final del robot.
Que es sustancialmente menor que la matriz que obtendría
para el caso de SLAM completo, y lo mismo es cierto para el vector de información de tamaño 8, he aquí un ejemplo.
Lo que se le pide es que rellene la función online SLAM y que haga esto,
cada vez que reciba una nueva posición, quiero que expand aumente la matriz mediante la inserción de algo justo detrás de la actual posición.
entonces, lo ejecutas para obtener la sub-matriz.
También tienes que calcular A, B, y, para el vector de información C

Japanese: 
縮約したΩをこれまでのようにこの式で取得します
縮約したξはこの式で取得します
間違いがなければ
前の領域とまったく同じ領域が得られて
ルーチンと任意の地図とデータセットを
テストすることができます
これはすばらしいプログラミングの問題で
拡張性の高いSLAMアルゴリズムを習得できる
初めての機会です
これを実装すれば大きな実績になります
この形式を発見するまでには
15年を超すSLAMの科学的功績がありました
そのあとも実に複雑なカルマンフィルタの
問題などが多くありましたが
今ではそういったことは驚くほど簡単になりました
これを実装できれば
ロボットの地図作成者だと名乗ることができます

Spanish: 
y después como antes obtendrá su omega reducida con esta ecuación,
y su Xi reducida se obtiene con esta ecuación.
y no nos engañemos, a continuación, obtendrás exactamente el misma área que usted tenía antes,
y usted puede probar su función y mapas arbitrarios y conjuntos arbitrarios de datos,
y va a estar bien.
Por lo tanto, buena suerte, es un problema de programación impresionante
porque esto te ofrece tu primer algoritmo realmente escalable de SLAM
y cuando lo implemente, en realidad será un logro importante.
Les puedo decir que la proeza ciéntifica del SLAM tardo fácilmente 15 años en descubir realmente está forma,
y desde entonces lo que era realmente un montón de complejidad y un montón de fallos comunes,
y un montón de dolores de cabeza, se hizo increíblemente fácil.
Por lo tanto, si implementas esto se puede decir que eres un mapeador robótico.

English: 
and then as before your reduced omega is obtained with this equation,
and your reduced C is obtained with this equation.
If you make no mistake, then you get exactly the same area as you had before,
and you can test your routine and arbitrary maps and arbitrary data sets,
and it'll just be fine.
So, good luck; this is a wonderful programming assignment
because it gives you the first really scalable SLAM algorithm
and when you implement it, it's actually a major achievement.
I can tell you it took the scientific feat of SLAM easily 15 years to really discover this form,
and ever since what was really complex and involved lots of common failures,
and I can tell you lots of headaches, became amazingly easy.
So, implement it and you can call yourself a robotic mapper.
