# ---
# jupyter:
#   jupytext:
#     text_representation:
#       extension: .py
#       format_name: light
#       format_version: '1.5'
#       jupytext_version: 1.14.4
#   kernelspec:
#     display_name: Python 3
#     language: python
#     name: python3
# ---

# # Section I. INTRODUCTION
#     
# # Chapter 1. What is Robotics?

# What is a robot?
# ----------------
#
# It might come as a surprise that it is actually tricky to define the
# word "robot." Contrast the idea of a science fiction android with a
# remote control flying drone. The android (appears) to think, feel, and
# move with the intellect of a human, while the drone simply executes the
# command of its operator. Yet, most people are in agreement that they can
# be rightfully called "robots."
#
# There are some *necessary* conditions for something to be a robot. A
# robot is a machine that:
#
# -   Moves in the physical world,
#
# -   Senses its environment and/or itself, and
#
# -   Uses computational elements to generate its movement.
#
# However, these are not *sufficient* for qualifying a machine as a robot.
# For example, your washing machine (if built in the last 10 years) will
# likely have all of these characteristics. A washing machine certainly
# moves; it senses the settings of its controls, the weight of your
# laundry, the incoming water temperature, possibly the dirtiness of your
# laundry, and so on; and will adjust its cycle speeds and duration
# accordingly using computation circuits. But there seems to be something
# missing here, since few people would refer to their washing machine as a
# robot! Similarly, your (relatively modern) car performs fuel injection,
# anti-lock braking, cruise control, and airbag deployment using several
# computers and sensors to monitor fuel efficiency, tire pressure,
# velocity, seat occupancy, etc. Yet, we are not ready to call it a robot
# just yet<sup><a href="#footnote1">[1]</a></sup>.
#
#
# Let us propose a couple of other possible criteria to call a system a
# robot. What about if a robot were required to:
#
# -   Exhibit autonomy or automation, and
#
# -   Exhibit apparently intelligent behavior?
#
# These provide a sharper boundary, as they would disqualify the washing
# machine and non-self-driving car from consideration as robots. But,
# there exist many robots that are not autonomous, such as the
# remote-controlled drone mentioned above, or surgical robots under
# surgeon control, like the Intuitive Surgical Da Vinci robot.
#
# An intelligence criterion is also difficult to apply because since it is
# challenging to define "intelligence" without delving into a
# philosophical minefield! By using the phrase "apparently intelligent" we
# sidestep the issue by assuming a human judge. But what is agreed upon as
# "intelligent" may change from year to year; compared to those devices in
# the 1950's, our modern washing machines and cars are actually quite
# smart! Perhaps as the control and artificial intelligence technology
# used in robots becomes more widely adopted, the line dividing robot and
# non-robot machines will become blurrier and blurrier... until the term
# "robot" has lost its meaning.
#
# Overall, it may be a pointless exercise to extract a precise definition
# of robot. In any case, the layperson's "I know a robot when I see one"
# should suffice for the purposes of this book.
#
# -------------------------------------------------------
# <a name="#footnote1"></a>
# <sup>[1]</sup>: Presumably, by time of publication, self-driving cars are not yet widely commercially available.
#
#
# How to Develop a Robot
# ----------------------
#
# A roboticist is a thinker, not a tinkerer. Although many students begin
# tinkering with robots at a relatively young age, this process is not
# usually the best way to develop a robot that performs a task well.
# Robotics is a more *deliberate* way of reaching the end goal that is
# informed through decades of prior research, analysis, and practical
# experience. One way to define it would be as follows:
#
# > **Robotics**: the study of systematic, principled techniques to aid in
# > the development of robots that perform desired functions.
#
# Although robots are some of the most complex machines in the world,
# there is a logic to how they should be developed. A good roboticist will
# follow this logic whilst using any available techniques at his/her
# disposal.
#
# Specifically, the recipe for developing an intelligent robot must follow
# these major steps:
#
# 1.  **Fabrication**: Design and fabricate a mechanism with sensing, actuation, and
#     computing capabilities to fulfill the intended task.
#
# 2.  **Measurement**: Develop measurement apparatus(es) and a testing protocol to observe
#     the function of the mechanism
#
# 3.  **Calibration**: Use measurements to calibrate (or learn) a model of the mechanism's
#     dynamics, actuation, and sensing.
#
# 4.  **Control**: Develop and validate a control subsystem that maintains system
#     stability and provides medium-level functionality for planning.
#
# 5.  **Knowledge representation**: Decide upon a knowledge representation to be shared between planning
#     and perception subsystems.
#
# 6.  **Perception**: Develop and evaluate a perception subsystem that produces knowledge
#     relevant to the task (robot state, maps, object identities)
#
# 7.  **Planning**: Implement and test a planning subsystem that generates feasible
#     trajectories to accomplish high-level tasks.
#
# 8.  **Supervisor**: Develop a high-level supervisor that schedules tasks, provides a
#     user interface, etc.
#
# 9.  **Testing and evaluation**: Test the entire system in the field (on the real task in the real
#     world, and perhaps with human end-users).
#
# It is important to note that these steps are almost never followed
# linearly, because robot design is a cyclic process of trial and error.
# Any robotics project will incur many, many *design cycles* over its
# lifetime. For example, unless the team is limited to an established
# robot platform, or purchasing off-the-shelf parts, redesigns of the
# mechanism usually occur after steps 3, 4, and 6. Mechanical redesigns
# may also occur after planning tests to make task execution more
# successful. On the software side, new knowledge, perception, and
# planning requirements are bound to arise as tasks are tested more
# thoroughly. After testing with end-users, it is not uncommon to go all
# the way "back to the drawing board" to build a new mechanism! A wise
# roboticist will develop their later components to rapidly accommodate
# minor mechanical changes.
#
# Buying an established robot platform can greatly speed up development
# time by shortcutting steps 1-4, but many vendors sell fairly raw
# hardware (requiring a rehash of steps 2-4). Also, there may be
# locked-in decisions that prevent certain functionality to be implemented
# later. To use a robot as a haptic device, make sure its motor
# controllers provide high-rate feedback and a force control mode! To have
# your robot navigate outdoors, make sure that it has a laser sensor or
# stereo vision rather than a structured light sensor! This makes it very
# important to examine the technical specs of a robot &mdash; even the most
# mundane details &mdash; with a fine-toothed comb before making a purchase.
#
# The theory, mathematics, and algorithms that are discussed in this book
# are designed to facilitate the development of functional robots. For
# example, it is unnecessary to go to "square one" for every component of
# a robot, as long as that component is deeply understood. A good
# roboticist will understand which off-the-shelf techniques apply, and
# where. However, there is no substitute for real-world testing!
#
# Testing is one of the most painful parts of robotics, but ultimately one
# of its most satisfying. Although a given technique might be
# theoretically beautiful, it will have been largely tested in the lab,
# making certain idealizations of the real world, or for a slightly
# different use case. The bulk of time spent doing robotics work is
# usually tweaking, tuning, and testing these tried-and-true techniques
# until they fit for the problem at hand. But once the technique is
# validated by thorough field testing, its merits are unimpeachable!
#
# In summary, a good roboticist:
#
# -   Understands the robot development process.
#
# -   "Minds the gaps:" understands how their sub-system works with other
#     components of the project.
#
# -   Is not afraid of testing.
#
# -   Clearly communicates the assumptions, performance measures, and
#     limitations of their sub-system.
#
# -   Understands the assumptions made by any technique before employing
#     it successfully in practice &mdash; or making the tweaks necessary to
#     make it work.
#
# -   Is aware of classical and state-of-the-art techniques.
#
# -   Is up-to-date on current design tools, hardware, software,
#     algorithms, and programming languages used in robotics.
#
#



StarcoderdataJupyterScriptsDedupFiltered