跳转至

树莓派开发

使用树莓派4B

主要实现功能:WIFI通信,I2C通信

树莓派系统安装

进入 https://www.raspberrypi.com/software/

安装Raspberry Pi Imager,然后选择系统(带Desktop的)和SD卡,然后烧录

如果有显示器,连接上显示器然后连接WIFI

如果没有显示器,连接方法如下:

大致思路是往SD卡中拷贝WIFI配置文件与SSH,然后使用SSH连接后使用vncserver开启带有端口号的临时VNC,然后使用VNC连接,进入可视化界面中开启常用的VNC

具体连接过程后续补充

树莓派配置

目前主要安装了gedit与vim

下面的配置目前没有使用,考虑到ros安装难度较大,所以暂时不使用ros

参考:https://zhuanlan.zhihu.com/p/108609120

# 安装gedit
sudo apt-get install gedit

# 备份源文件
sudo cp /etc/apt/sources.list /etc/apt/sources.list.bak
sudo cp /etc/apt/sources.list.d/raspi.list /etc/apt/sources.list.d/raspi.list.bak

sudo nano /etc/apt/sources.list
修改sources.list文件,更换为清华源

把里面本来的东西注释(#),然后修改成下面的

sudo apt-get update
sudo apt-get upgrade

树莓派功能开发

使用python开发,比较容易上手,后续可能改成C++

代码地址:https://github.com/sychen-sjtu/RaspberryControl

  • 功能架构

    定义robot类,类中有两个线程,有5个motor_controller类的成员与踢控的类

    线程1:实现socket通信,python中socket通信是阻塞式,保存socket通信获得的信息

    线程2:根据socket通信获得的信息实现控制指令的下发

    目前存在的问题,踢球的指令会晚一帧才下发

  • 树莓派I2C通信

    使用SMBus库完成,比较简单

    注意事项:

    1.write_i2c_block_data(DEVICE_ADDRESS, DEVICE_REG_ADDRESS, byte_value)

    其中DEVICE_ADDRESS是每个STM32的地址,DEVICE_REG_ADDRESS是写入的寄存器地址,这个应该为0x00,在接收的时候会有5个字节,第一个为DEVICE_REG_ADDRESS,其余为float的4个字节

    所以在接受的时候要接受5个字节,用后四个构造一个数字,当然也可以加一些奇偶校验位等

  • 树莓派socket通信

    单独开一个线程