=====================
软件安装
=====================

.. contents:: :depth: 4

设置你的树莓派
------------------------------

* 树莓派4
* SD卡(推荐32GB)
* 树莓派4电源(USB-C接口,5V,≥3A)
* 以太网线缆

准备树莓派的SD卡
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

在你的台式机/笔记本电脑上操作:

1. 将SD卡插入你的台式机/笔记本电脑。 
###############################################

2. 下载此版本的Raspbian系统
#################################################################

使用 `此版本 <https://slack-files.com/T0RAWRCGY-FQG7WTSBH-eb9549ed22>`_ ,以便大家使用相同版本。解压该文件。 

3. 使用 `etcher <https://www.balena.io/etcher/>`_ 来烧录SD卡。 
##########################################################################################

* 如果你使用推荐的etcher,这是启动菜单。选择2019 - 09 - 26 - raspbian - buster - lite.img(解压文件内的文件)以及SD卡。 

.. image::../_static/flash1.JPG
    :align: center

* SD卡正在烧录的图片。 

.. image::../_static/flash2.JPG
    :align: center

* 完成!

.. image::../_static/flash3.JPG
    :align: center

4. 打开SD卡文件系统。
###################################################################

有时你的电脑需要一些时间来读取SD卡并显示启动文件夹。如果问题仍然存在,可以尝试取出SD卡再重新插入。 

.. image::../_static/sdboot.JPG
    :align: center

5. 下载 `RPI - Setup仓库 <https://github.com/Nate711/RPI-Setup>`_ 的最新版本。 
#####################################################################################################################

* 解压所有文件。 

.. image::../_static/downloadrpi.jpg
    :align: center

6. 将下载的仓库中的所有文件移动到SD卡中。 
#####################################################################

* 替换任何冲突的文件,使仓库版本覆盖原始版本。现在你可以删除压缩文件和已为空的文件夹。  

.. image::../_static/replaceboot.JPG
    :align: center

启用基本功能
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

1. 开启你的树莓派。 
###################################################################################################
从电脑中取出SD卡,插入你的树莓派。同时给树莓派接上电源。 

如果你的树莓派无法启动,请尝试回到步骤3“使用etcher烧录SD卡”,并使用此版本的Rasbian系统代替:https://downloads.raspberrypi.org/raspbian_lite/images/raspbian_lite - 2020 - 02 - 14/2020 - 02 - 13 - raspbian - buster - lite.zip

2. 配置你的电脑以通过SSH连接到机器人
######################################################## 

* 若要使用以太网进行设置(推荐),将以太网线缆连接到你的电脑和树莓派。 
* 进入你希望使用的网络接口(以太网/无线网络)的网络设置
* 将“配置IPv4”改为:手动
* 将你的IP地址改为10.0.0.X范围内的某个地址(如果你是斯坦福学生机器人团队的一员,请从这个 `文档 <https://docs.google.com/spreadsheets/u/1/d/1pqduUwYa1_sWiObJDrvCCz4Al3pl588ytE4u-Dwa6Pw/edit?usp=sharing>`_ 中选择一个不会与其他系统冲突的地址)
* 将子网掩码改为:255.255.255.0
* 路由器留空
* 与机器人网络断开连接后,记得将这些设置改回原来的状态,否则该接口的网络将无法使用

2. 从你的电脑通过SSH连接到树莓派。
######################################

运行 ``ssh pi@10.0.0.10`` (默认密码是 ``raspberry`` )

.. image::../_static/sshimage.jpg
    :align: center

3. 进入读写模式
####################################################################################################
在机器人的命令行中运行 ``rw`` 。
确认终端提示符以(rw)结尾,而不是(ro)。

.. image::../_static/readwrite.JPG
    :align: center
 
4. 获取网络连接
#########################

获取网络连接有两种方法:在树莓派上使用raspi-config工具,或者在将SD卡插入树莓派之前修改SD卡上的wpa_supplicant文件。如果您在斯坦福大学校园,请遵循下一节的说明,因为存在特殊要求。
如果您不在斯坦福大学校园,对于初学者来说,使用raspi-config工具更简单,也更推荐。然而,修改wpa_supplicant文件的好处是,您无需通过SSH登录到树莓派就可以设置正确的网络设置。

a. 使用raspi-config工具的方法

通过SSH登录到树莓派后,运行:

::

	sudo raspi-config

这将出现一个菜单。进入“网络选项”,然后选择“Wi-Fi”,并输入您的SSID(Wi-Fi名称,例如Netgear、Linksys)和密码。 

.. image::../_static/raspconfig1.JPG
    :align: center

.. image::../_static/raspconfig2.JPG
    :align: center

b. 修改wpa_supplicant文件的方法

按照 `此链接 <https://www.raspberrypi.org/documentation/configuration/wireless/wireless-cli.md>`_ 中的文档说明编辑 **/etc/wpa_supplicant/wpa_supplicant.conf**,查看“将网络详细信息添加到树莓派”部分。您也可以查看这个 `链接 <https://linux.die.net/man/5/wpa_supplicant.conf>`_ 。由于pi-init2的神奇功能,在树莓派开机之前,就可以从 **/boot/appliance/etc/wpa_supplicant/wpa_supplicant.conf** 编辑该文件。

4. [斯坦福学生专用] 在斯坦福获取网络连接
###############################################################################

* 将树莓派接上电源(通过板载的微型USB接口)。通过SSH登录到树莓派。在登录行之后出现的欢迎消息中,查找树莓派的MAC地址,它会出现在“无线硬件MAC地址”这一行下面。记下该地址。
* 使用另一台计算机访问iprequest.stanford.edu。
* 使用您的斯坦福账号登录。
* 按照屏幕上的说明添加另一台设备:

     * **第一页**:设备类型:其他,操作系统:Linux,硬件地址:输入树莓派的MAC地址
     * **第二页**:品牌和型号:其他PC,有线硬件地址:删除已有的内容,无线硬件地址:输入树莓派的MAC地址

* 确认树莓派已连接到网络:

      * 等待一封电子邮件(发送到您的斯坦福邮箱),通知设备已被接受
      * 在树莓派上执行 **sudo reboot**
      * 重启完成后,输入ping www.google.com并确保您能通过网络接收数据包

5. 安装必备组件
##############################

* 运行 ``sudo./install_packages.sh``
* 如果IP地址仍然是10.0.0.10,系统会提示您更改它。树莓派的IP地址不应与您计算机的IP地址10.0.0.Y相同。 
* 如果主机名仍然是raspberry,系统会提示您更改它。  
* 系统会要求您输入当前时间和日期。如果您想自动设置时间和日期,可以跳到下一步。 
* 运行 ``sudo./time_sync.sh`` 自动设置时间和日期。

RPI-Setup仓库的作用
#############################

* 启用ssh。由于密码保持不变(raspberry),ssh仅在以太网接口上启用。要在所有接口上启用它,请注释掉/boot/appliance/etc/ssh/sshd_config中的ListenAddress行。
* 将树莓派设置为通过以太网连接到机器人网络(10.0.0.X)
* 扩展SD卡文件系统
* 将文件系统设置为只读
* 准备连接到斯坦福的WiFi(详细信息见上文)
* 提供安装开发所需工具和仓库的脚本

在树莓派上安装斯坦福四足机器人软件
-------------------------------------------------------------

步骤
^^^^^^^

1. 通过SSH连接到树莓派 
##############################

检查树莓派是否可以访问互联网。如果您在通过SSH连接到树莓派时遇到问题,请查看上一步中链接的设置树莓派以太网设置的说明。

::

	ssh pi@10.0.0.Y
	
这里,“Y”是您在运行install_packages.sh脚本时为树莓派选择的IP地址。系统提示输入密码时,输入默认密码“raspberry”或您在install_packages.sh脚本中设置的密码。

如果您忘记了树莓派的IP地址,关闭树莓派,取出SD卡并插入您的计算机。 
然后打开SD卡文件夹,进入以下文件夹:boot/appliance/etc/network/。 
在文本编辑器中打开名为“interfaces”的文件。 
在第19行,它应该显示IP地址为“address 10.0.0.x”。

2. 测试网络连接。 
###################################### 

:: 

	ping www.google.com
	
输出应该如下所示:

.. image::../_static/pingresults.JPG
    :align: center


如果无法ping通,执行:

:: 
	
	ifconfig
	
并检查wlan0部分,查看是否有IP地址和其他调试信息。

3. 克隆此仓库(在树莓派上)
################################

::

	git clone https://github.com/stanfordroboticsclub/StanfordQuadruped.git

4. 安装依赖(在树莓派上)
#####################################

::

	cd StanfordQuadruped
	sudo bash install.sh

5. 对机器人进行断电重启
#############################
拔掉电池,等待约30秒,然后再插回去。

6. 验证一切是否正常工作
###############################

#. 如果您刚刚启动树莓派,等待约30秒,直到绿色指示灯停止闪烁。
#. 通过SSH登录到机器人
    
    * 运行 ``ssh pi@10.0.0.xx (其中xx是您为机器人选择的IP地址)``

#. 检查操纵杆服务的状态 

    * 运行 ``sudo systemctl status joystick``
    * 如果您尚未连接PS4控制器,它应该显示类似如下内容 ::
        
        pi@pupper(rw):~/StanfordQuadruped$ sudo systemctl status joystick
        ● joystick.service - Pupper Joystick service
        Loaded: loaded (/home/pi/PupperCommand/joystick.service; enabled; vendor preset: enabled)
        Active: active (running) since Sun 2020-03-01 06:57:20 GMT; 1s ago
        Main PID: 5692 (python3)
            Tasks: 3 (limit: 4035)
        Memory: 7.1M
        CGroup: /system.slice/joystick.service
                ├─5692 /usr/bin/python3 /home/pi/PupperCommand/joystick.py
                └─5708 hcitool scan --flush

        Mar 01 06:57:20 pupper systemd[1]: Started Pupper Joystick service.
        Mar 01 06:57:21 pupper python3[5692]: [info][controller 1] Created devices /dev/input/js0 (joystick) /dev/input/event0 (evdev)
        Mar 01 06:57:21 pupper python3[5692]: [info][bluetooth] Scanning for devices

#. 通过将PS4控制器置于配对模式,将其连接到树莓派。
    
    * 要将其置于配对模式,同时按住分享按钮和圆形的Playstation按钮,直到它开始快速闪烁两次。 
    * 如果它开始缓慢闪烁一次,按住Playstation按钮,直到它停止闪烁,然后再试一次。

#. 控制器连接后,再次检查状态 

    * 运行 ``sudo systemctl status joystick``
    * 现在它应该看起来像这样::

        pi@pupper(rw):~/StanfordQuadruped$ sudo systemctl status joystick
        ● joystick.service - Pupper Joystick service
        Loaded: loaded (/home/pi/PupperCommand/joystick.service; enabled; vendor preset: enabled)
        Active: active (running) since Sun 2020-03-01 06:57:20 GMT; 55s ago
        Main PID: 5692 (python3)
            Tasks: 2 (limit: 4035)
        Memory: 7.3M
        CGroup: /system.slice/joystick.service
                └─5692 /usr/bin/python3 /home/pi/PupperCommand/joystick.py

        Mar 01 06:57:20 pupper systemd[1]: Started Pupper Joystick service.
        Mar 01 06:57:21 pupper python3[5692]: [info][controller 1] Created devices /dev/input/js0 (joystick) /dev/input/event0 (evdev)
        Mar 01 06:57:21 pupper python3[5692]: [info][bluetooth] Scanning for devices
        Mar 01 06:58:12 pupper python3[5692]: [info][bluetooth] Found device A0:AB:51:33:B5:A0
        Mar 01 06:58:13 pupper python3[5692]: [info][controller 1] Connected to Bluetooth Controller (A0:AB:51:33:B5:A0)
        Mar 01 06:58:14 pupper python3[5692]: running
        Mar 01 06:58:14 pupper python3[5692]: [info][controller 1] Battery: 50%
    * 如果树莓派在一两分钟后仍找不到操纵杆,可能是树莓派的蓝牙控制器从未打开。运行 ``sudo hciconfig hci0 up`` 打开无线电。然后重启树莓派。

#. 检查机器人服务的状态

    * 运行 ``sudo systemctl status robot``
    * 输出会根据您运行各种程序的顺序而有所不同,但只需检查它是否没有任何红色文本显示失败。
    * 如果它确实失败了,通常可以通过以下操作修复: ``sudo systemctl restart robot``

7. 完成!
#########

继续进行校准。