def connect(self, port=None, options=None):
        """
        Connects the robot to a serial port.

        Parameters
        ----------
        port : str
            OS-specific port name or ``'Virtual Smoothie'``
        options : dict
            if :attr:`port` is set to ``'Virtual Smoothie'``, provide
            the list of options to be passed to :func:`get_virtual_device`

        Returns
        -------
        ``True`` for success, ``False`` for failure.

        Note
        ----
        If you wish to connect to the robot without using the OT App, you will
        need to use this function.

        Examples
        --------

        >>> from opentrons import robot # doctest: +SKIP
        >>> robot.connect() # doctest: +SKIP
        """

        self._driver.connect(port=port)
        self.fw_version = self._driver.get_fw_version()

        # the below call to `cache_instrument_models` is relied upon by
        # `Session._simulate()`, which calls `robot.connect()` after exec'ing a
        # protocol. That protocol could very well have different pipettes than
        # what are physically attached to the robot
        self.cache_instrument_models()