  Programming robots for general purpose applications is extremely challenging
due to the great diversity of end-user tasks ranging from manufacturing
environments to personal homes. Recent work has focused on enabling end-users
to program robots using Programming by Demonstration. However, teaching robots
new actions from scratch that can be reused for unseen tasks remains a
difficult challenge and is generally left up to robotic experts. We propose
iRoPro, an interactive Robot Programming framework that allows end-users to
teach robots new actions from scratch and reuse them with a task planner. In
this work we provide a system implementation on a two-armed Baxter robot that
(i) allows simultaneous teaching of low- and high-level actions by
demonstration, (ii) includes a user interface for action creation with
condition inference and modification, and (iii) allows creating and solving
previously unseen problems using a task planner for the robot to execute in
real-time. We evaluate the generalisation power of the system on six benchmark
tasks and show how taught actions can be easily reused for complex tasks. We
further demonstrate its usability with a user study (N=21), where users
completed eight tasks to teach the robot new actions that are reused with a
task planner. The study demonstrates that users with any programming level and
educational background can easily learn and use the system.
