code: func (r *Robot) Start(args ...interface{}) (err error) {
  	if len(args) > 0 && args[0] != nil {
  		r.AutoRun = args[0].(bool)
  	}
  	log.Println("Starting Robot", r.Name, "...")
  	if cerr := r.Connections().Start(); cerr != nil {
  		err = multierror.Append(err, cerr)
  		log.Println(err)
  		return
  	}
  	if derr := r.Devices().Start(); derr != nil {
  		err = multierror.Append(err, derr)
  		log.Println(err)
  		return
  	}
  	if r.Work == nil {
  		r.Work = func() {}
  	}
  
  	log.Println("Starting work...")
  	go func() {
  		r.Work()
  		<-r.done
  	}()
  
  	r.running.Store(true)
  	if r.AutoRun {
  		c := make(chan os.Signal, 1)
  		r.trap(c)
  
  		// waiting for interrupt coming on the channel
  		<-c
  
  		// Stop calls the Stop method on itself, if we are "auto-running".
  		r.Stop()
  	}
  
  	return
  }
docs: // Start a Robot's Connections, Devices, and work.