From a37285279dfa2514e2a814ef108f8eb0b9ba9443 Mon Sep 17 00:00:00 2001 From: Matthew Elwin Date: Mon, 29 Jan 2024 21:16:15 -0600 Subject: [PATCH] website --- activities/basic_cpp.html | 2 +- homework/guidelines.html | 2 +- homework/homework1.html | 38 +++++------ homework/homework2.html | 6 +- homework/homework3.html | 2 +- homework/homework4.html | 2 +- index.html | 2 +- lectures/bayes_net.html | 20 +++--- lectures/circle_fit.html | 2 +- lectures/cmake_basics.html | 34 +++++----- lectures/cpp.html | 2 +- lectures/cpp_topics.html | 2 +- lectures/cross-compile.html | 2 +- lectures/data_assoc.html | 2 +- lectures/debugging.html | 2 +- lectures/derive_kinematics.html | 108 +++++++++++++++---------------- lectures/estimation_example.html | 2 +- lectures/fast_slam.html | 18 +++--- lectures/fsm.html | 4 +- lectures/fsm_activity.html | 2 +- lectures/gaussian.html | 2 +- lectures/kalman_filter.html | 10 +-- lectures/kinematics.html | 2 +- lectures/node_structure.html | 50 +++++++------- lectures/nonlinear.html | 2 +- lectures/odometry.html | 4 +- lectures/probability.html | 22 +++---- lectures/regression.html | 18 +++--- lectures/remote_nodes.html | 2 +- lectures/rigid2d.html | 22 +++---- lectures/ros2_cpp.html | 18 +++--- lectures/slam.html | 2 +- lectures/turtlebot.html | 2 +- lectures/unit_test_cpp.html | 22 +++---- 34 files changed, 216 insertions(+), 216 deletions(-) diff --git a/activities/basic_cpp.html b/activities/basic_cpp.html index a3728ea1..bdbcdafe 100644 --- a/activities/basic_cpp.html +++ b/activities/basic_cpp.html @@ -1,7 +1,7 @@ - + Basic ROS 2 C++ diff --git a/homework/guidelines.html b/homework/guidelines.html index e40e0407..27055687 100644 --- a/homework/guidelines.html +++ b/homework/guidelines.html @@ -1,7 +1,7 @@ - + Homework Guidelines diff --git a/homework/homework1.html b/homework/homework1.html index 05cda481..dc682987 100644 --- a/homework/homework1.html +++ b/homework/homework1.html @@ -1,7 +1,7 @@ - + Homework 1 @@ -432,9 +432,9 @@

Task B.1 (geometry primitives)

-
-

Hints

-
+
+

Hints

+
  1. For more information about the operator overloading going on in this example see (a good Stack Overflow post)
  2. @@ -490,9 +490,9 @@

    Task B.2 (unit testing geometry)

-
-

Hints

-
+
+

Hints

+
  1. It makes sense to iterate with B.1 so that you can use the tests to help you implement functionality
  2. The std::stringstream class will be helpful for testing operator<< and operator>>. It lets you use an std::string as a stream instead of a file.
  3. @@ -515,9 +515,9 @@

    Task B.3 (SE(2) geometry)

-
-

Hints

-
+
+

Hints

+
  1. It will be helpful to iterate by working on B.4, B.5, and B.6 as you implement the required functionality so you can test it as you go.
@@ -577,9 +577,9 @@

Task B.5 (visualization)

-
-

Hint

-
+
+

Hint

+
  1. Modify some values of the sample svg by hand and view the image to get a feel for what they do.
  2. You may wish to maintain a separate "testing" program to help.
  3. @@ -671,9 +671,9 @@

    Task B.6 (executable implementation)

-
-

Hint

-
+
+

Hint

+
  1. Think about how the transforms should work and what should be displayed, then open the image in inkscape.
  2. Sometimes, objects will be drawn on top of each other (e.g., points show up in the same location regardless of what frame they are expressed in) @@ -742,9 +742,9 @@

    Normalize Vector

-
-

Hints

-
+
+

Hints

+
  1. Information About Classes
  2. The C++ Core guidelines (Classes and Class Hierarchies) section has the answers.
  3. diff --git a/homework/homework2.html b/homework/homework2.html index 689eb5c9..72c01b8e 100644 --- a/homework/homework2.html +++ b/homework/homework2.html @@ -1,7 +1,7 @@ - + Homework 2 @@ -345,10 +345,10 @@

    Task E.4 (ROS API Testing)

    • The transform should be the identity transformation, the joint states will not change throughout the test
    -
  4. Write a test launch file called launch/turtle_odom_test.launch.xml that runs a joint_state_publisher as well as the turtle_odom_test_node
  5. +
  6. Write a test launch file called test/turtle_odom_test.launch.xml that runs a joint_state_publisher as well as the turtle_odom_test_node
  7. Because the odometry node was implemented in terms of DiffDrive we will not test the the actual odometry calculations here
  8. -
  9. Write a test launch file called launch/turtle_circle_test.launch.xml that verifies the frequency that the circle publishes cmd_vel commands.
  10. +
  11. Write a test launch file called test/turtle_circle_test.launch.xml that verifies the frequency that the circle publishes cmd_vel commands.
diff --git a/homework/homework3.html b/homework/homework3.html index 63c09c93..776d480d 100644 --- a/homework/homework3.html +++ b/homework/homework3.html @@ -1,7 +1,7 @@ - + Homework 3 diff --git a/homework/homework4.html b/homework/homework4.html index 07ac8465..89b92782 100644 --- a/homework/homework4.html +++ b/homework/homework4.html @@ -1,7 +1,7 @@ - + Homework 4 diff --git a/index.html b/index.html index 92f2feae..ab8f3ab1 100644 --- a/index.html +++ b/index.html @@ -1,7 +1,7 @@ - + ME495 Sensing, Navigation, and Machine Learning for Robotics diff --git a/lectures/bayes_net.html b/lectures/bayes_net.html index 98f10c3c..eca557c5 100644 --- a/lectures/bayes_net.html +++ b/lectures/bayes_net.html @@ -1,7 +1,7 @@ - + Bayes Networks @@ -55,10 +55,10 @@

Table of Contents

-
-

Defining the Network

-
+
+

Defining the Network

+
@@ -631,9 +631,9 @@

C++ Standard

language features that are desired.
-
-

Locally (Per-Target)

-
+
+

Locally (Per-Target)

+
  • To set the standard for a given target @@ -654,9 +654,9 @@

    Locally (Per-Target)

-
-

Globally (all targets)

-
+
+

Globally (all targets)

+
  • These settings can also be done globally. @@ -697,17 +697,17 @@

    Standards And ROS

    Compile Options

    -
    -

    Locally (Per-Target)

    -
    +
    +

    Locally (Per-Target)

    +
    • Use target_compile_options(target -Wall -Wextra) to add flags (in this case -Wall -Wextra) to the build
    -
    -

    Globally (all targets)

    -
    +
    +

    Globally (all targets)

    +
    • Global compile options are added with add_compile_options(-Wall -Wextra) (-Wall -Wextra in this case).
    diff --git a/lectures/cpp.html b/lectures/cpp.html index 358706c3..6d33b474 100644 --- a/lectures/cpp.html +++ b/lectures/cpp.html @@ -1,7 +1,7 @@ - + C++ diff --git a/lectures/cpp_topics.html b/lectures/cpp_topics.html index 2c6d96fb..cbbd419c 100644 --- a/lectures/cpp_topics.html +++ b/lectures/cpp_topics.html @@ -1,7 +1,7 @@ - + diff --git a/lectures/cross-compile.html b/lectures/cross-compile.html index 2dcdb0cb..c6850f2d 100644 --- a/lectures/cross-compile.html +++ b/lectures/cross-compile.html @@ -1,7 +1,7 @@ - + Cross-Compilation diff --git a/lectures/data_assoc.html b/lectures/data_assoc.html index 45a9bafb..f54886a9 100644 --- a/lectures/data_assoc.html +++ b/lectures/data_assoc.html @@ -1,7 +1,7 @@ - + Data Association for SLAM diff --git a/lectures/debugging.html b/lectures/debugging.html index a79874b6..6d2b6e77 100644 --- a/lectures/debugging.html +++ b/lectures/debugging.html @@ -1,7 +1,7 @@ - + Debugging in ROS and C++ diff --git a/lectures/derive_kinematics.html b/lectures/derive_kinematics.html index b6fac165..ef8068c5 100644 --- a/lectures/derive_kinematics.html +++ b/lectures/derive_kinematics.html @@ -1,7 +1,7 @@ - + Kinematics for Wheeled Mobile Robots @@ -62,12 +62,12 @@

    Table of Contents

  • Transforms Between Body and Wheels
  • Body Twist in the Wheel Frames
  • Types of Wheels @@ -79,15 +79,15 @@

    Table of Contents

  • Car with Four Mecanum Wheels
  • Car with Four Conventional Wheels
  • Forward Kinematics @@ -245,11 +245,11 @@

    Transforms Between Body and Wheels

    the body frame and frames located at each wheel.

-
-

Example: Four Wheel Car

-
+
+

Example: Four Wheel Car

+
-
+
four_wheel_car.svg
Figure 1: A Car With Four Wheels
@@ -355,13 +355,13 @@

Body Twist in the Wheel Frames

-
-

Example: Four Wheel Car

-
+
+

Example: Four Wheel Car

+
-
-

Wheel 1

-
+
+

Wheel 1

+
\begin{align} V_1 &= A_{1b}V_b \\ \begin{bmatrix} @@ -390,9 +390,9 @@

Wheel 1

-
-

Wheel 2

-
+
+

Wheel 2

+
\begin{align} V_2 &= A_{2b}V_b \\ \begin{bmatrix} @@ -421,9 +421,9 @@

Wheel 2

-
-

Wheel 3

-
+
+

Wheel 3

+
\begin{align} V_3 &= A_{3b}V_b \\ \begin{bmatrix} @@ -452,9 +452,9 @@

Wheel 3

-
-

Wheel 4

-
+
+

Wheel 4

+
\begin{align} V_4 &= A_{4b}V_b \\ \begin{bmatrix} @@ -547,7 +547,7 @@

Mecanum and Omni Wheels

-
+
mecanum.svg
Figure 2: Top-Down view of a Mecanum/Omni Wheel (it is omni when \(\gamma = 0\)).
@@ -637,13 +637,13 @@

Car with Four Mecanum Wheels

-
-

Body Twist to Wheel Motion

-
+
+

Body Twist to Wheel Motion

+
-
-

Wheel 1

-
+
+

Wheel 1

+

This wheel has a roller angle of \(\gamma = -\frac{\pi}{4}\)

@@ -679,9 +679,9 @@

Wheel 1

-
-

Wheel 2

-
+
+

Wheel 2

+

This wheel has a roller angle of \(\gamma = \frac{\pi}{4}\)

@@ -717,9 +717,9 @@

Wheel 2

-
-

Wheel 3

-
+
+

Wheel 3

+

This wheel has a roller angle of \(\gamma = \frac{-\pi}{4}\)

@@ -754,9 +754,9 @@

Wheel 3

-
-

Wheel 4

-
+
+

Wheel 4

+

This wheel has a roller angle of \(\gamma = \frac{\pi}{4}\)

@@ -792,9 +792,9 @@

Wheel 4

-
-

Inverse Kinematics

-
+
+

Inverse Kinematics

+

Now that we have the relationship between the body twist and the velocity of the body in each wheel frame, we can now gather everything into a single equation: @@ -913,13 +913,13 @@

Controls

Car with Four Conventional Wheels

-
-

Body Twist to Wheel Motion

-
+
+

Body Twist to Wheel Motion

+
-
-

Wheel 1

-
+
+

Wheel 1

+
\begin{align} \begin{bmatrix} \dot{\theta} \\ @@ -961,9 +961,9 @@

Wheel 1

-
-

Inverse Kinematics

-
+
+

Inverse Kinematics

+

The kinematic equations are now

diff --git a/lectures/estimation_example.html b/lectures/estimation_example.html index cdf51448..91143357 100644 --- a/lectures/estimation_example.html +++ b/lectures/estimation_example.html @@ -1,7 +1,7 @@ - + An Estimation Example diff --git a/lectures/fast_slam.html b/lectures/fast_slam.html index 148ededc..bb7d32e1 100644 --- a/lectures/fast_slam.html +++ b/lectures/fast_slam.html @@ -1,7 +1,7 @@ - + Fast SLAM 1.0 @@ -58,12 +58,12 @@

Table of Contents

-
-

In Our Case

-
+
+

In Our Case

+
  • The odometry plus noise is our forward model
  • Odometry provides \(T_{bb'}\), which is our rigid body motion since @@ -156,9 +156,9 @@

    The Measurement Model

-
-

In Our Case

-
+
+

In Our Case

+
  • We are using a 2D laser scanner as our measurement device
  • This device only gives us range and bearing measurements to points in the diff --git a/lectures/fsm.html b/lectures/fsm.html index cc62b8bf..6cdb9c55 100644 --- a/lectures/fsm.html +++ b/lectures/fsm.html @@ -1,7 +1,7 @@ - + Finite State Machines @@ -84,7 +84,7 @@

    Robot Vacuum Cleaner Example

-
+
fsm.svg
Figure 1: Example of Robot Vacuum Cleaner FSM
diff --git a/lectures/fsm_activity.html b/lectures/fsm_activity.html index 417175bc..0879ffc3 100644 --- a/lectures/fsm_activity.html +++ b/lectures/fsm_activity.html @@ -1,7 +1,7 @@ - + FSM Activity diff --git a/lectures/gaussian.html b/lectures/gaussian.html index 738e204f..a273e4d0 100644 --- a/lectures/gaussian.html +++ b/lectures/gaussian.html @@ -1,7 +1,7 @@ - + Jointly Gaussian Distributions diff --git a/lectures/kalman_filter.html b/lectures/kalman_filter.html index 1623bd43..111b3ade 100644 --- a/lectures/kalman_filter.html +++ b/lectures/kalman_filter.html @@ -1,7 +1,7 @@ - + Kalman Filters @@ -133,8 +133,8 @@

Predict

-
Derivation -
+
Derivation +
  1. For \(X \sim \mathcal{N}(\mu, \Sigma)\), and \(Y = AX + b\), \(Y \sim \mathcal{N}(A\mu +b, A \Sigma A^T)\) (See Lecture on Gaussians)
  2. @@ -196,8 +196,8 @@

    Correct

-
Derivation -
+
Derivation +
  1. Let \(Y \sim X_1 | X_2\) = a, where \(\begin{bmatrix}X_1 \\ X_2\end{bmatrix} \sim \mathcal{N}(\begin{bmatrix}\mu_1 \\ \mu_2\end{bmatrix}, \begin{bmatrix}\Sigma_{11} & \Sigma_{12} \\ \Sigma_{21} & \Sigma_{22}\end{bmatrix})\) are Jointly Gaussian. Then diff --git a/lectures/kinematics.html b/lectures/kinematics.html index 42775f68..e9e4eb5b 100644 --- a/lectures/kinematics.html +++ b/lectures/kinematics.html @@ -1,7 +1,7 @@ - + Mobile Robot Kinematics diff --git a/lectures/node_structure.html b/lectures/node_structure.html index c162c385..83916464 100644 --- a/lectures/node_structure.html +++ b/lectures/node_structure.html @@ -1,7 +1,7 @@ - + C++ ROS Node Structure @@ -27,16 +27,16 @@

    Table of Contents

  2. ROS Node Design
  3. Object-Oriented ROS Node
  4. Procedural ROS Node
  5. Lambda ROS Node
  6. @@ -183,9 +183,9 @@

    Object-Oriented ROS Node

    a member of the class
-
-

Example

-
+
+

Example

+
#include"ros/ros.h"
 #include"sensor_msgs/JointState.h"
@@ -229,9 +229,9 @@ 

Example

-
-

Advantages

-
+
+

Advantages

+
  • Node class can be re-used in other ROS nodes, or more easily ported to nodelets
  • Whatever you make private in the class cannot be used outside the class
  • @@ -240,9 +240,9 @@

    Advantages

-
-

Disadvantages

-
+
+

Disadvantages

+
  • Introduces an extra class that in many cases is unnecessary
  • In some instances you may need to think carefully about class initialization rules in the constructor
  • @@ -275,9 +275,9 @@

    Procedural ROS Node

-
-

Example

-
+
+

Example

+

Here is an example of this basic structure of a ROS node (pseudo-C++)

@@ -331,9 +331,9 @@

Example

-
-

Advantages

-
+
+

Advantages

+
  • Keeps most of the logic in one place (the main loop) since most work does not happen in callbacks
  • The single state machine makes relationship between logic and state explicit rather than implicitly existing in many variables
  • @@ -343,9 +343,9 @@

    Advantages

-
-

Disadvantages

-
+
+

Disadvantages

+
  • The state machine structure may be overkill for very simple cases
  • The global variables may get messy for complicated cases diff --git a/lectures/nonlinear.html b/lectures/nonlinear.html index d84872c2..4b500fbc 100644 --- a/lectures/nonlinear.html +++ b/lectures/nonlinear.html @@ -1,7 +1,7 @@ - + Nonlinear Control for Wheeled Mobile Robots diff --git a/lectures/odometry.html b/lectures/odometry.html index 9db4c5de..9b4d9a8a 100644 --- a/lectures/odometry.html +++ b/lectures/odometry.html @@ -1,7 +1,7 @@ - + Odometry for Wheeled Mobile Robots @@ -168,7 +168,7 @@

    Integrating the Twist

    -
    +
    center_of_rot.svg
    Figure 1: Center of rotation of a body that is moving. Notice that the body traces out the arc of a circle
    diff --git a/lectures/probability.html b/lectures/probability.html index ccca8d8c..f2ef1db1 100644 --- a/lectures/probability.html +++ b/lectures/probability.html @@ -1,7 +1,7 @@ - + Probability Basics for Robotics @@ -80,7 +80,7 @@

    Table of Contents

  • Conditional Probability
  • Theorem on total probability
  • @@ -93,7 +93,7 @@

    Table of Contents

  • Independence
  • Random Variable
  • @@ -418,9 +418,9 @@

    Conditional Probability

  • For fixed \(B\), \(P[A | B]\) is itself a probability over this reduced sample space
-
-

Example:

-
+
+

Example:

+

Random Experiment: Flip two coins, count the number of Heads

@@ -539,7 +539,7 @@

Graphical Approach:

  • E - Linus is a computer programmer who likes writing bash scripts and is a git guru.
  • -
    +
    bayes.svg
    @@ -619,9 +619,9 @@

    Random Variable

    -
    -

    Example:

    -
    +
    +

    Example:

    +
    • Flip two coins. \(\xi \in S\). @@ -711,7 +711,7 @@

      Discrete Random Variables

      Example

      -
      +
      binomial_pmf.svg
      Figure 1: A probability mass function for a binomial distribution.
      diff --git a/lectures/regression.html b/lectures/regression.html index 16019d25..87d4350a 100644 --- a/lectures/regression.html +++ b/lectures/regression.html @@ -1,7 +1,7 @@ - + Regression @@ -60,7 +60,7 @@

      Table of Contents

    • Linear Regression
        -
      • The Model
      • +
      • The Model
      • Matrix Form
      • Least Squares
          @@ -71,7 +71,7 @@

          Table of Contents

        • Linear Regression, Gaussian Noise
        • @@ -142,9 +142,9 @@

          Applications

          Linear Regression

          -
          -

          The Model

          -
          +
          +

          The Model

          +
          1. \(y = w_0 + w_1 x_1 + \cdots + w_n x_n\). The goal is to find the weights \(w\).
          2. By setting \(x_0 = 1\), we can write the model as \(y = w^T x\).
          3. @@ -231,9 +231,9 @@

            Minimizing with the SVD

            Linear Regression, Gaussian Noise

            -
            -

            The Model

            -
            +
            +

            The Model

            +
            1. The model: \(y_i = f(x_i) + \epsilon_i\), where \(f(x) = x^T w\) and \(\epsilon_i \sim \mathcal{N}(0, \sigma^2)\).
            -
            -

            Transformation Matrix

            -
            +
            +

            Transformation Matrix

            +

            If the origin of frame \(\{j\}\) is displaced from frame \(\{i\}\) by \(x \hat{x}_i + y \hat{y}_i\) and the angle between the frames is \(\theta\), then to convert a point \(p_j\) in frame \(j\) to frame \(i\) coordinates: @@ -284,7 +284,7 @@

            1-D Homogeneous coordinates

          4. What happens when the ray is completely horizontal?
            • It doesn't intersect the real number line at all
            • -
            • But as we approached horizontal, the magnitude of the 1D number the ray represented got larger in larger.
            • +
            • But as we approached horizontal, the magnitude of the 1D number the ray represented got larger and larger.
            • When the ray is finally horizontal, it lets us represent a point at infinity!
            • Loosely speaking, 2D homogeneous point \((x,w)\) maps to 1D point \(x/w\). When \(w = 0\) it makes sense that the 1D point is infinity.
          5. @@ -320,9 +320,9 @@

            2-D Homogeneous coordinates

          -
          -

          Transformation Matrix

          -
          +
          +

          Transformation Matrix

          +
          1. The goal is to be able to translate a point a fixed distance regardless of where the point is with a single matrix multiplication
              @@ -380,7 +380,7 @@

              Pure Translations

            • How far do other points on the laptop travel?
            • Now assume the laptop grows to completely cover the table and beyond, all the way to infinity.
                -
              • Think of a piece of this object that is far away from the laptop, how does it move
              • +
              • Think of a piece of this object that is far away from the laptop, how does it move?
          2. If an object is purely translating, how does each point on the object move?
          3. diff --git a/lectures/ros2_cpp.html b/lectures/ros2_cpp.html index 8d115391..3280eb5d 100644 --- a/lectures/ros2_cpp.html +++ b/lectures/ros2_cpp.html @@ -1,7 +1,7 @@ - + ROS C++ Details @@ -60,14 +60,14 @@

            Table of Contents

          4. Motivating RAII
      • -
      • Smart Pointers +
      • Smart Pointers
      • Argument Passing Semantics
      • Constness
      • @@ -549,9 +549,9 @@

        Motivating RAII

    -
    -

    Smart Pointers

    -
    +
    +

    Smart Pointers

    +
    • Smart pointers are used to track and automatically free memory
    • There are two main smart pointer types in C++ @@ -626,9 +626,9 @@

      Argument Passing Semantics

    -
    -

    Smart Pointers

    -
    +
    +

    Smart Pointers

    +
    • If you pass something by smart pointer, you are making a statement about ownership
        diff --git a/lectures/slam.html b/lectures/slam.html index a1b50551..31ccd43c 100644 --- a/lectures/slam.html +++ b/lectures/slam.html @@ -1,7 +1,7 @@ - + diff --git a/lectures/turtlebot.html b/lectures/turtlebot.html index 79b8bbf4..5b86a64a 100644 --- a/lectures/turtlebot.html +++ b/lectures/turtlebot.html @@ -1,7 +1,7 @@ - + Turtlebot3 (NU Style) diff --git a/lectures/unit_test_cpp.html b/lectures/unit_test_cpp.html index b82497c8..c585cb48 100644 --- a/lectures/unit_test_cpp.html +++ b/lectures/unit_test_cpp.html @@ -1,7 +1,7 @@ - + Testing and Debugging in ROS and C++ @@ -21,7 +21,7 @@

        Testing and Debugging in ROS and C++

        Table of Contents

        -
        -

        Overview

        -
        +
        +

        Overview

        +
        @@ -102,9 +102,9 @@

        C++ Unit Testing Framework

        Catch2

        -
        -

        Overview

        -
        +
        +

        Overview

        +
        • Catch2 is a light-weight unit-testing framework for C++
        • The Tutorial
        • @@ -133,9 +133,9 @@

          How To Use With ROS

        Google Test (GTest) -
        -

        Overview

        -
        +
        +

        Overview

        +