## 自动驾驶ros2程序说明文档(基于职业大学小巴)

### 环境配置

#### ros 环境
1. ubuntu 20.04 
2. ros2 foxy

#### 第三方库

##### c++ boost库

```bash
sudo apt-get install libboost-all-dev
```

##### c++ paho.mqtt.cpp库
```bash
# 依赖paho.mqtt.c
git clone https://github.com/eclipse/paho.mqtt.c.git
cd paho.mqtt.c
mkdir build && cd build
cmake .. -DPAHO_WITH_SSL=ON
make
sudo make install
sudo ldconfig

# 安装paho.mqtt.cpp
git clone https://github.com/eclipse/paho.mqtt.cpp
cd paho.mqtt.cpp
mkdir build && cd build
cmake ..
make
sudo make install
sudo ldconfig
```

##### python paho-mqtt

```sh
pip install paho-mqtt==1.5.1
```

##### Yaml

版本号:  >= v0.5.2 

```sh
sudo apt-get update
sudo apt-get install -y libyaml-cpp-dev
```

##### libpcap

版本号： >= v1.7.4

```sh
sudo apt-get install -y  libpcap-dev
```



#### 配置CAN和网络
```bash
# 加载模块
sudo insmod mcp251xfd.ko

# 配置并查看比特率
sudo ip link set can0 type can bitrate 500000
ip -details -statistics link show can0

# cansend
cansend can1 1F334455#1122334455667788
cansend can0 202#0100aa0001f4ffce

# 清除所有文件的时间戳
find . -type f -exec touch {} \;

# 配置ip和物理地址
sudo ifconfig eth0 down
sudo ifconfig hw ether 02805E1F0122
sudo ifconfig eth0 172.31.132.34 up

# 设置can.sh开机自启动：
配置CAN.pdf
```
```bash
#!/bin/bash
# Script: can.sh
# Description: Configures CAN interface can0 on startup

# Check if running as root
if [[ $EUID -ne 0 ]]; then
    echo "This script must be run as root" 
    exit 1
fi

# Disable CAN interface can0 if it's up
if ip link show can0 &> /dev/null; then
    ip link set can0 down
fi

# Load necessary kernel modules
modprobe can
modprobe can_raw
modprobe mttcan

# Configure CAN interface can0 with bitrate 250000
ip link set can0 type can bitrate 250000
ip link set up can0

# Check the return status of the last command
if [[ $? -ne 0 ]]; then
    echo "Error configuring CAN interface can0"
    exit 1
fi

echo "CAN interface can0 configured successfully"
exit 0

```

#### RTK和惯导

```
1、请求com1输出gpgga报文
log com1 gpgga ontime 1

2、通过com1传入差分数据，自动差分打开
interfacemode com1 auto auto on

3、请求com3输出所需报文
log com3 <NMEA标准报文> ontime 0.1

4、保存配置
saveconfig

5、开启惯导
inscontrol enable

6、设置惯导 8 种轴向(默认轴向 1，不需要改)
set imuaxestype 1/2/3/4/5/6/7/8

板卡正面朝上，Y轴指向车头，为轴向 1；逆时针旋转 90 度为轴向 2；逆时针旋转 180 度为轴向 3；逆时针旋转 270 度为轴向 4；

板卡正面朝下，Y轴指向车头，为轴向 5；逆时针旋转 90 度为轴向 6；逆时针旋转 180 度为轴向 7；逆时针旋转 270 度为轴向 8。

7、保存配置
saveconfig

注意：接RTK模块串口，波特率115200
```

### 操作

#### 自动、远程驾驶
首先进入工作空间 JingMenBus

终端一：
``` bash
sudo ./can.sh # 用来配置车CAN口，密码 nvidia

sudo ./lidar128.sh # 用来配置128线激光雷达
```

终端二：
```bash
./start.sh
```

终端三：
```bash
source install/setup.bash
ros2 run mc mc_node # 用来打开底盘控制节点
```

#### 采点

```bash
source install/setup.bash
ros2 run gather gather_node # 用来打开采点程序
```


中途记录位置信息：

找到gather_node终端，键入**a**（小写）保存**站台**信息。站台信息组成包括三个点（进入站台的减速点、站台内停止点和驶离站台恢复速度点），所以需要在相应位置键入w。

键入**s**（小写）保存**停止线**信息，操作同上。

键入**d**（小写）保存**变道**信息，操作同上。

![alt text](<common/img/Screenshot from 2024-09-04 10-04-11.png>)