MIT 6.821: Underactuated Robotics
Spring 2024, Lecture 23
Follow live at https://slides.com/d/v3rQ2yY/live
(or later at https://slides.com/russtedrake/spring24-lec23)
Image credit: Boston Dynamics
/// Base type for all action primitives
class ActionPrimitiveInterface
{
virtual bool IsCandidate(const State& state) const = 0;
virtual Container GetOutcomes(const State& state) const = 0;
virtual double EstimateActionCost(
const State& current, const State& target) const = 0;
virtual Container Execute(const State& state) = 0;
virtual double Ranking() const = 0;
};
OpenDishwasherDoor CloseDishwasherDoor StartDishwasher LoadSoapPacket PullOutLowerRack PullOutUpperRack PullOutSilverwareRack PushInLowerRack PushInUpperRack PushInSilverwareRack
PutPlateInDishwasher ReorientMug PutMugInDishwasher OptimisticPutMugInDishwasher PutSilverwareInDishwasher PushUnmanipulableDish SenseDishCounts SenseDishToManipulate
work by Calder Phillips-Grafflin et al. at TRI
DishTaskState(const DishState& active_dish_state,
int32_t clean_items_put_away, int32_t clean_items_in_dishwasher,
int32_t dirty_items_in_dishwasher,
int32_t dirty_items_available,
const DishwasherState& current_dishwasher_state);
DishState(const RigidTransformd& dish_pose, DishType dish_type,
DishProgress dish_progress, RackRequirement rack_required);
DishwasherState(bool known, bool door_open, bool lower_rack_out,
bool upper_rack_out, bool silverware_rack_out,
bool lower_rack_full, bool upper_rack_full,
bool silverware_rack_full, bool started, bool soap_loaded);
enum class DishType : uint8_t {
Unknown = 0x00,
Mug = 0x01,
Plate = 0x02,
Silverware = 0x03
};
enum class RackRequirement : uint8_t {
Unknown = 0x00,
LowerRack = 0x01,
UpperRack = 0x02,
SilverwareRack = 0x03
};
enum class DishProgress : uint8_t {
Unknown = 0x00,
Unmanipulable = 0x01,
LikelyManipulable = 0x02,
Sensed = 0x03,
OptimisticOriented = 0x04,
Oriented = 0x05,
Placed = 0x06,
Released = 0x07
};
work by Calder Phillips-Grafflin et al. at TRI
https://en.wikipedia.org/wiki/Stanford_Research_Institute_Problem_Solver
/// Base type for all action primitives
class ActionPrimitiveInterface
{
virtual bool IsCandidate(const State& state) const = 0;
virtual Container GetOutcomes(const State& state) const = 0;
...
};
In the dish-loading example, we replan before each action to handle unexpected outcomes...
RRT* (Karaman and Frazzoli)
Martin Buehler and Dan Koditschek
Al Rizzi and Dan Koditschek
Rob Burridge, Al Rizzi, and Dan Koditschek
Probabilistic Feedback Coverage