Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[05/01/2021] Images Fixed #52

Merged
merged 2 commits into from
Jan 5, 2021
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
2 changes: 1 addition & 1 deletion docs/automation/ROS/ros.md
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ ROS also has the advantage of having a large open source community with tons of

Don't worry if you are still confused, you will start to get a better understanding with some hands on experience. ​To get a better understanding of what ROS is and why it exists, checkout out these videos (​[1](https://www.youtube.com/watch?v=J1qT85pTW0w&feature=youtu.be) ​, [2](https://www.youtube.com/watch?v=UL1_Ue4rUWs)).

![Skeleton](Graph.png)
<center>![Skeleton](Graph.png)</center>

A ROS system can be visualized as a graph where all the vertices are ​nodes and the edges between them are known as ​topics. In simple terms nodes are programs that perform a particular task and send out/receive data in the form of messages. These messages are exchanged between two nodes over the topic (edge) connecting them. An example of a typical ROS system is given in the figure to the left wherein “robot”, “laser”, “map”, “localisation” and “planner” are the nodes and the arrows connecting the nodes are the topics. An arrow ​*from* A to B indicates that the topic carries messages from node ​A to node B.

Expand Down
16 changes: 8 additions & 8 deletions docs/electronics/Basic_Electronic_Components/breadboard.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,26 +2,26 @@

The breadboard is the most fundamental tool for electronics prototyping. They are great for creating temporary circuits and require absolutely no soldering.

![](images/breadboardmain.jpg){: style="height:350px"}
<center>![](images/breadboardmain.jpg){: style="height:350px"}</center>

## How to use a breadboard

A solderless breadboard consists of several holes, where wires or leads of electrical can be inserted. Each row of 5 holes is electrically connected by metal clips hidden underneath the surface.
A solderless breadboard consists of several holes, where wires or leads of electrical can be inserted. Each row of 5 holes is electrically connected by metal clips hidden underneath the surface.

![](images/bbcontacts.jpg){: style="height:200px"}
<center>![](images/bbcontacts.jpg){: style="height:200px"}</center>

Thus, one can connect two components by inserting them into holes of the same row. ICs can be inserted across the central ridge, and connections made as shown below.

![](images/bbic.jpg){: style="height:200px"}
<center>![](images/bbic.jpg){: style="height:200px"}</center>

On either side of the breadboard are the _power rails_. Each power rail has two long electrically connected rows, and are often connected to batteries or some other power source.

For a more extensive breadboard tutorial, check out this [sparkfun guide](https://learn.sparkfun.com/tutorials/how-to-use-a-breadboard/all).
For a more extensive breadboard tutorial, check out this [sparkfun guide](https://learn.sparkfun.com/tutorials/how-to-use-a-breadboard/all).

## Tips for breadboard usage

1. To make breadboard connections, DuPont style jumper wires or single core 22AWG wire is most convenient. Avoid multistranded wire.
1. To make breadboard connections, DuPont style jumper wires or single core 22AWG wire is most convenient. Avoid multistranded wire.

2. Keep wires and wire leads as short as possible, to avoid clutter and make troubleshooting easier.
2. Keep wires and wire leads as short as possible, to avoid clutter and make troubleshooting easier.

![](images/neatbb.jpg){: style="height:200px"}
<center>![](images/neatbb.jpg){: style="height:200px"}</center>
12 changes: 4 additions & 8 deletions docs/electronics/Development_Boards/STM32.md
Original file line number Diff line number Diff line change
Expand Up @@ -3,9 +3,7 @@
## Introduction
The STM32F103C8T6 (also known as 'STM32' or 'Blue Pill") is a cheap development board based on the ARM Cortex M3 microprocessor. [This](https://www.youtube.com/watch?v=EaZuKRSvwdo) video by Great Scott can prove to be an introductory video to understand what it exactly is and how it can be used.

<p align="center">
<img align="center" src="https://github.com/adbidwai/handbook/blob/master/docs/electronics/Development_Boards/images/bluepill_intro.jpeg">
</p>
<center>![](images/bluepill_intro.jpeg)</center>

## Naming Convention of STM microcontrollers </br>
|**Parameter**|**Meaning**|
Expand Down Expand Up @@ -39,14 +37,12 @@ The STM32F103C8T6 (also known as 'STM32' or 'Blue Pill") is a cheap development
For more insights about the technical specifcations refer to the [official datsheet](https://www.st.com/resource/en/datasheet/stm32f103c8.pdf) and [reference manual](https://www.st.com/content/ccc/resource/technical/document/reference_manual/59/b9/ba/7f/11/af/43/d5/CD00171190.pdf/files/CD00171190.pdf/jcr:content/translations/en.CD00171190.pdf) by STMicroelectronics.

## Pinout
<p align="center">
<img align="center" src="https://github.com/adbidwai/handbook/blob/master/docs/electronics/Development_Boards/images/STM32-Pin-Details_0.png">
</p>

<center>![](images/STM32-Pin-Details_0.png)</center>

## Programming STM32 </br>
### 1) Using STM32duino bootloader (Arduino IDE)
You can program your STM32 development board using Arduino IDE, too. You will require FTDI (USB to UART converter) for this process. [This](https://maker.pro/arduino/tutorial/how-to-program-the-stm32-blue-pill-with-arduino-ide) tutorial explains the complete process.

### 2) Using Keil UVision and STM32CubeMX
This is one step further than the last mentioned process and is more professional in terms of usage. You will require the softwares ARM's Keil Uvision and STM32CubeMX for this method of programming BluePill. You will also need the STLink/V2 which is a debugger cum programmer hardware provided by STMicroelectronics. These softwares provide a more sophisticated and professional programming environment for programming embedded systems. You may refer to [this](https://www.electronicshub.org/program-stm32f103c8t6-using-keil-uvision/) guide to know this method in detail.

This is one step further than the last mentioned process and is more professional in terms of usage. You will require the softwares ARM's Keil Uvision and STM32CubeMX for this method of programming BluePill. You will also need the STLink/V2 which is a debugger cum programmer hardware provided by STMicroelectronics. These softwares provide a more sophisticated and professional programming environment for programming embedded systems. You may refer to [this](https://www.electronicshub.org/program-stm32f103c8t6-using-keil-uvision/) guide to know this method in detail.
Binary file not shown.
Binary file not shown.
2 changes: 1 addition & 1 deletion docs/index.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,4 +2,4 @@

Welcome!

The ERC Handbook is an extensive compilation of information and resources for everything robotics made by the Electronics and Robotics Club, BITS Goa
The ERC Handbook is an extensive compilation of information and resources for everything robotics made by the Electronics and Robotics Club, BITS Goa.
13 changes: 7 additions & 6 deletions docs/mechanical/Forward and Inverse Kinematics.md
Original file line number Diff line number Diff line change
Expand Up @@ -3,18 +3,19 @@
The forward kinematics problem for a serial-chain manipulator is to find the position and orientation of the end-effector relative to the base given the positions of all of the joints and the values of all of the geometric link parameters. Often, a frame fixed in the end-effector is referred to as the tool frame, and while fixed in the final link N, it in general has a constant offset in both position and orientation from frame N. Likewise, a station frame is often located in the base to establish the location of the task to be performed. This frame generally has a constant offset in its pose relative to frame 0, which is also fixed in the base. In practice, the forward kinematics problem is solved by calculating the transformation between a coordinate frame fixed in the end-effector and another coordinate frame fixed in the base, i.e., between the tool and station frames. This is straightforward for a serial chain since the transformation describing the position of the end-effector relative to the base is obtained by
simply concatenating transformations between frames fixed in adjacent links of the chain.

![](images/forward_kinematics.jpg){: style="height:500px align=centre"}
<center>![](images/forward_kinematics.jpg){: style="height:500px align=centre"}</center>

# Inverse Kinematics

The inverse kinematics problem for a serial-chain manipulator is to find the values of the joint positions given the position and orientation of the end-effector relative to the base and the values of all of the geometric link parameters. Once again, this is a simplified statement applying only to serial chains. A more general statement is: given the relative positions and orientations of
two members of a mechanism, find the values of all of the joint positions. This amounts to finding all of the joint positions given the homogeneous transformation between the two members of interest. When solving the inverse problem, we often have to choose one solution from a number of valid solutions. There are also degenerate cases with an infinite number of solutions Some solutions of the inverse mapping may not be physically realizable. This is due to manipulators having physical joint limits that prevent the mechanism from achieving certain joint configurations that may be solutions to the inverse kinematics problem (e.g. a joint may not have a full 360 degree motion)

<center>![](images/Inverse_Kinematics.jpg){: style="width:500px"}

![](images/why_ik.png){: style="width:500px"}</center>

![](images/Inverse_Kinematics.jpg){: style="width:400px"}![](images/why_ik.png){: style="width:350px"}

To get a more detailed idea of solving inverse and forward kinematics problems for robotic system do checkout this 3 part video series from milfordrobotics

[Part 1](https://www.youtube.com/watch?v=VjsuBT4Npvk) [ Part 2](https://www.youtube.com/watch?v=3ZcYSKVDlOc&t=683s) [Part 3](https://www.youtube.com/watch?v=llUBbpWVPQE)
To get a more detailed idea of solving inverse and forward kinematics problems for robotic system do checkout this 3 part video series from milfordrobotics

[Part-1](https://www.youtube.com/watch?v=VjsuBT4Npvk),
[Part-2](https://www.youtube.com/watch?v=3ZcYSKVDlOc&t=683s),
[Part-3](https://www.youtube.com/watch?v=llUBbpWVPQE)
22 changes: 7 additions & 15 deletions docs/mechanical/Introduction to Dynamics.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

For many applications with fixed-based robots we need to find a multi-body dynamics formulated as:

$$ M(q)\ddot{q} + b(q,\dot{q}) + g(q) = \tau \: + J_{c}(q)^{T}F_{c} $$
$$ M(q)\ddot{q} + b(q,\dot{q}) + g(q) = \tau \: + J_{c}(q)^{T}F_{c} $$

consisting of the following components:

Expand All @@ -20,8 +20,6 @@ $F_{c}$ $\epsilon$ $$\mathbf{R}^{n_{q}}$ External Cartesian f

$J_{c}(q)$ $\epsilon$ $\mathbf{R}^{n_{q}Xn_{q}}$ Geometric Jacobian corresponding to the external forces.



Different methods exist to compute the so-called Equations of Motion (EoM) of a given system, i.e., a closed-form mathematical model of the system dynamics. The two most common methods used in robotics are Newton-Euler method which essentially applies the principles of conservation of linear and angular momentum for all links of a robot and Lagrange Method which utilizes scalar energy-based functions over the the space of generalized coordinates which adhere to certain minimization principles, thus resulting in trajectories which automatically satisfy the kinematic constraints of the system.

to understand better how problems related to dynamics in robotics are tackled do give a watch to this [lecture](https://www.youtube.com/watch?v=B67ug1yx13E) on robot dynamics by IIT KGP Prof. Dilip Kumar Pratihar
Expand All @@ -42,36 +40,30 @@ where $F_{ext,S}$ are the resultant external forces that act through the COG and

When dealing with multi-body systems, a valid approach is to separate all bodies at the joints as depicted in and to consider every body as a single unit. Thereby, the constraint forces F$_{i}$ at the joints must be introduced as external forces acting on each of the bodies when cut free. For all these bodies, we must then apply conservation of linear and angular momentum in all DoFs, subject to external forces (which now include the joint forces F$_{i}$ , too). For a general 3D case and a fixed base, this results in a 6$n_{j}$ -dimensional systems of equations. Additionally, there are 5 $n_{j}$ motion constraint due to the ideal joints. They ensure that the two connected bodies only move along the direction of the joint but don’t move in all other directions that are blocked by the joint.

![](images/link_1.png){: style="height:350px align=centre"}
<center>![](images/link_1.png){: style="height:350px align=centre"}</center>

## Lagrange Method

This method is centered around three fundamental concepts:

1. The definition of generalized coordinates$ q$ and generalized velocities $\dot{q}$ , which may or may not encode the information regarding the constraints applicable to the system.

2. . A scalar function called the Lagrangian function $\mathcal{L}$. For mechanical systems, it is exactly the difference between the total kinetic energy $\mathcal{T}$ and the total potential energy $\mathcal{U}$, of the system at each instant:
2. . A scalar function called the Lagrangian function $\mathcal{L}$. For mechanical systems, it is exactly the difference between the total kinetic energy $\mathcal{T}$ and the total potential energy $\mathcal{U}$, of the system at each instant:

​ $\mathcal{L} = \mathcal{T} - \mathcal{U}$



3. The so-called Euler-Lagrange equation, also known as the Euler-Lagrange of the second kind, which applies to the Lagrangian function $\mathcal{L}$ and to the total external generalized forces $\tau$ :

​ $\frac{d}{dt} (\frac{\partial{\mathcal{L}}}{\partial{\dot{q}}} )$ - $(\frac{\partial{L}}{\partial{\dot{q}}})$ = $\tau$
​ $\frac{d}{dt} (\frac{\partial{\mathcal{L}}}{\partial{\dot{q}}} )$ - $(\frac{\partial{L}}{\partial{\dot{q}}})$ = $\tau$

In the most general case, the Lagrangian is a function of the generalized coordinates and velocities q and q˙ , and it may also have an explicit dependence on time t, hence we redefine the aforementioned scalar energy functions as $\mathcal{T} = \mathcal{T}(t, q, \dot{q})$ and $\mathcal{U} = \mathcal{U}(t,q)$, thus $\mathcal{L} = \mathcal{L}(t,q,\dot{q})$ .

In the end, one of the most notable properties of this formulation is the capacity to eliminate all internal reaction forces of the system from the final EoM, in contrast to the Newton-Euler formulation where there they are explicitly accounted for.



To get a more detailed insight on how to formulate Newton-Euler equation and Lagrange equation for different robot system check out this [lecture]() by IIT Delhi prof S.K SAHA
To get a more detailed insight on how to formulate Newton-Euler equation and Lagrange equation for different robot system check out this [lecture](https://youtu.be/xc71IuDmZIw) by IIT Delhi prof S.K SAHA

some of the other resources you can checkout to know more about kinematics and dynamics involved in robotics are:

1. A Mathematical Introduction to Robotic Manipulation by Richard Murray
2. Robot dynamics and control by Mark Spong
3. Springer Handbook on Robotics by Oussama Khatib


2. Robot dynamics and control by Mark Spong
3. Springer Handbook on Robotics by Oussama Khatib
5 changes: 2 additions & 3 deletions docs/mechanical/Joint Kinematics.md
Original file line number Diff line number Diff line change
Expand Up @@ -27,11 +27,10 @@ variables.

The geometry of a robotic mechanism is conveniently defined by attaching coordinate frames to each link. While these frames could be located arbitrarily, it is advantageous both for consistency and computational efficiency to adhere to a convention for locating the frames on the links. A commonly used convention for selecting frames of reference in robotic applications is the Denavit-Hartenberg, or D-H convention. In this convention, each homogeneous transformation $A_{i}$ is represented as a product of four basic transformations

![](images/link_2.png){: style="height:250px"}
<center>![](images/link_2.png){: style="height:250px"}</center>

where the four quantities $\theta_{i} , a_{i} , d_{i} , \alpha_{i}$ are parameters associated with link i and joint i. The four parameters $a_{i} ,\alpha_{i} ,d_{i} , and \: \theta_{i}$ in are generally given the names link length, link twist, link offset, and joint angle, respectively, three of the above four quantities are constant for a given link, while the fourth parameter, $\theta i$ for a revolute joint and $d_{i}$ for a prismatic joint, is the joint variable.

Check out this [video](https://www.youtube.com/watch?v=FiKEAdednuo) to know more about how to use DH parameters for geometric representation or go [here](https://robotacademy.net.au/lesson/denavit-hartenberg-notation/) for know about DH notation in more detail.

![](images/dh_parameters.jpg){: style="height:350px align:center"}

<center>![](images/dh_parameters.jpg){: style="height:350px align:center"}</center>
13 changes: 4 additions & 9 deletions docs/mechanical/position and orientation.md
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ between them, the components are commonly referred to as direction cosines. An e

$R_{z}(\theta) = \begin{pmatrix} \cos(\theta) & -\sin(\theta) & 0\\ \sin(\theta) & \cos(\theta) & 0\\ 0 & 0 & 1\end{pmatrix}$

while the same rotation about $\hat y_{j}$ axis is
while the same rotation about $\hat y_{j}$ axis is

$R_{Y}(\theta) = \begin{pmatrix} \cos(\theta) & 0 & \sin(\theta)\\ 0 & 1 & 0\\ -\sin(\theta) & 0 & \cos(\theta)\end{pmatrix}$

Expand Down Expand Up @@ -49,19 +49,14 @@ $^{j}r = ^{j}R_{i} ^{i}r + ^{j}p_{i}$

where $^{j}p_{i}$ is the position of the origin of coordinate frame i relative to coordinate frame j and $^{j}R_{i}$ is the orientation of frame i relative to frame j .

The above equation can be written as
The above equation can be written as

$\begin{pmatrix} ^{j}r \\ 1 \end{pmatrix}$ = $\begin{pmatrix} ^{j}R_{i} & ^{j}p_{i}\\ 0^{T} & 1 \end{pmatrix}\begin{pmatrix} ^{i}r \\ 1 \end{pmatrix}$

where
where

$^{j}T_{i} = \begin{pmatrix} ^{j}R_{i} & ^{j}p_{i}\\ 0^{T} & 1 \end{pmatrix}$

is the 4X4 homogeneous transformation matrix . Just like Rotation matrices, homogeneous transformation matrices can also be transformed using matrix cross-multiplication.

$^{k}T_{i} = ^{k}T_{j} ^{j}T_{i}$





$^{k}T_{i} = ^{k}T_{j} ^{j}T_{i}$
14 changes: 7 additions & 7 deletions docs/misc.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
# Miscellaneous
# Miscellaneous

## Online Courses
## Online Courses

- [Underactuated robotics](https://www.youtube.com/channel/UChfUOAhz7ynELF-s_1LPpWg/videos)
- [Programming for Robotics](https://rsl.ethz.ch/education-students/lectures/ros.html)
Expand All @@ -15,7 +15,8 @@
- [The Robotics Back-End](https://roboticsbackend.com/)
- [RoboticsKnowledgeBase](https://roboticsknowledgebase.com/)

## Talk Series / Seminars / Podcasts:
## Talk Series / Seminars / Podcasts

- [Artificial Intelligence Podcast by Lex Fridman](https://www.youtube.com/playlist?list=PLrAXtmErZgOdP_8GztsuKi9nrraNbKKp4)
- [Robotics Today](https://roboticstoday.github.io/index.html)
- [MIT RoboSeminars](https://www.youtube.com/channel/UCK2tKzmSFFnpFhUXtRKjvnQ)
Expand All @@ -31,9 +32,9 @@

- [AI Robotics](https://groups.google.com/forum/#!forum/ai-robotics)

- [Systems Neuroscience](https://groups.google.com/group/systems-neuroscience/subscribe)
- [Systems Neuroscience](https://groups.google.com/group/systems-neuroscience/subscribe)

- [ML-news](https://groups.google.com/forum/?hl=en#!forum/ML-news)
- [ML-news](https://groups.google.com/forum/?hl=en#!forum/ML-news)

- [Connectionists](https://mailman.srv.cs.cmu.edu/mailman/listinfo/connectionists)

Expand All @@ -49,5 +50,4 @@

- [Artificial Life](http://lists.idyll.org/listinfo/alife-announce)

- [Genetic Programming](http://tech.groups.yahoo.com/group/genetic_programming/)

- [Genetic Programming](http://tech.groups.yahoo.com/group/genetic_programming/)
2 changes: 1 addition & 1 deletion docs/simulation/gazebo/Robot Description.md
Original file line number Diff line number Diff line change
Expand Up @@ -3,4 +3,4 @@
1.) http://gazebosim.org/tutorials?tut=components&cat=get_started
2.) Explaining URDF, SDF, .world and the differences between them
3.) Links on how to write urdf, sdf and .world files
4.) BB8 video tutorial
4.) BB8 video tutorial
2 changes: 1 addition & 1 deletion docs/simulation/gazebo/basics.md
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ ROS packages necessary for running Gazebo simulations are installed

`sudo apt-get install ros-melodic-gazebo-*`

Gazebo can also be installed independently of ROS by using the command
Gazebo can also be installed independently of ROS by using the command

`curl -sSL http://get.gazebosim.org | sh`

Expand Down