树莓派开发¶
使用树莓派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
把里面本来的东西注释(#),然后修改成下面的
树莓派功能开发¶
使用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通信
单独开一个线程