This commit is contained in:
lyq 2026-02-06 18:10:21 +08:00
parent 515d6c5e8c
commit 5c3b41f717
14 changed files with 277 additions and 13 deletions

View File

@ -154,7 +154,7 @@ saveconfig
### 操作
#### 自动、远程驾驶
首先进入工作空间 minibus
首先进入工作空间 JingMenBus
终端一:
``` bash

2
can.sh
View File

@ -23,7 +23,7 @@ ip link set can0 type can bitrate 250000
ip link set up can0
# RTK
chmod 777 /dev/ttyUSB0
chmod 777 /dev/ttyCH341USB0
# remote
chmod 777 /dev/input/event*

214
install_frp.sh Normal file
View File

@ -0,0 +1,214 @@
#!/bin/bash
set -euo pipefail
echo "=============================="
echo " FRPC 安装程序"
echo "=============================="
# ==========================================
# 0. 工具函数
# ==========================================
die() { echo "$*" >&2; exit 1; }
info() { echo "$*"; }
step() { echo "$*"; }
need_cmd() {
command -v "$1" >/dev/null 2>&1
}
# 统一下载:优先 wget其次 curl断点续传
download() {
local url="$1"
local out="$2"
if need_cmd wget; then
# -c: 断点续传
# -T: 超时
# -t: 重试次数
info "使用 wget 下载(支持断点续传)"
wget -c \
--timeout=20 \
--read-timeout=20 \
-t 0 \
"$url" -O "$out"
elif need_cmd curl; then
# -C - : 断点续传
# -f : HTTP 非 2xx 失败
# -L : 跟随重定向
# --retry-* : 抗抖动
info "使用 curl 下载(断点续传)"
curl -fL -C - \
--connect-timeout 20 \
--retry 0 \
--retry-delay 3 \
--retry-all-errors \
"$url" -o "$out"
else
die "系统中既没有 wget 也没有 curl无法下载$url"
fi
}
# ==========================================
# 1. 确保 sudo 权限
# ==========================================
if ! need_cmd sudo; then
die "系统未安装 sudo请用 root 执行该脚本"
fi
sudo -v
# ==========================================
# 2. 输入设备名
# ==========================================
read -r -p "请输入设备名称deviceName例如 z200_01 " deviceName
[ -n "${deviceName}" ] || die "设备名不能为空"
# 简单合法性校验:只允许字母数字下划线中划线
if ! [[ "$deviceName" =~ ^[A-Za-z0-9_-]+$ ]]; then
die "设备名不合法:仅允许字母/数字/_/-"
fi
echo ""
info "设备名:$deviceName"
echo ""
# ==========================================
# 3. 检测架构
# ==========================================
ARCH="$(uname -m)"
info "检测到架构:$ARCH"
case "$ARCH" in
aarch64) PKG="frp_0.65.0_linux_arm64.tar.gz" ;;
armv7l|armv7*) PKG="frp_0.65.0_linux_arm.tar.gz" ;;
x86_64|amd64) PKG="frp_0.65.0_linux_amd64.tar.gz" ;;
*) die "不支持架构:$ARCH" ;;
esac
BASE="http://36.153.162.171:20080/frp"
URL="$BASE/$PKG"
# ==========================================
# 4. 下载 / 解压(断电可恢复)
# ==========================================
FRP_DIR="/usr/local/frp"
FRPC_BIN="$FRP_DIR/frpc"
CACHE_DIR="/var/cache/frp"
PKG_PATH="$CACHE_DIR/$PKG"
if sudo test -x "$FRPC_BIN"; then
info "检测到本地已有 FRPC$FRPC_BIN(跳过下载)"
else
step "准备缓存目录:$CACHE_DIR"
sudo mkdir -p "$CACHE_DIR"
sudo chown "$(id -u):$(id -g)" "$CACHE_DIR"
if [ -f "$PKG_PATH" ]; then
info "检测到缓存文件,继续断点续传:$PKG_PATH"
else
info "缓存中不存在安装包,将开始下载"
fi
step "下载:$URL"
download "$URL" "$PKG_PATH"
info "下载完成:$PKG_PATH"
step "解压到:$FRP_DIR"
sudo mkdir -p "$FRP_DIR"
sudo tar -xzf "$PKG_PATH" -C "$FRP_DIR" --strip-components=1
sudo chmod +x "$FRPC_BIN" || true
sudo test -x "$FRPC_BIN" || die "解压后未找到可执行 frpc$FRPC_BIN"
info "解压完成"
# 可选:如果你希望节省空间,确认安装成功后再删
# sudo rm -f "$PKG_PATH"
fi
# ==========================================
# 5. 生成 frpc.toml
# ==========================================
PROXY_NAME="${deviceName}_stcp"
SECRET_KEY="${deviceName}_key"
step "生成配置 /etc/frp/frpc.toml"
sudo mkdir -p /etc/frp
sudo tee /etc/frp/frpc.toml >/dev/null <<EOF
serverAddr = "36.153.162.171"
serverPort = 7001
[auth]
method = "token"
token = "token123456"
[transport]
protocol = "kcp"
[[proxies]]
name = "$PROXY_NAME"
type = "stcp"
localIP = "127.0.0.1"
localPort = 22
secretKey = "$SECRET_KEY"
# visitor 由服务器 callback 自动追加
EOF
info "已生成 /etc/frp/frpc.toml"
# ==========================================
# 6. 回调注册(一定要在重启 frpc 之前)
# ==========================================
CALLBACK_URL="$BASE/callback?device=$deviceName"
step "回调注册(在重启 frpc 之前):$CALLBACK_URL"
# 用 download 抓取返回文本(落到临时文件)
tmp_cb="$(mktemp)"
trap 'rm -f "$tmp_cb"' EXIT
download "$CALLBACK_URL" "$tmp_cb" || die "回调请求失败"
RESULT="$(cat "$tmp_cb" 2>/dev/null || true)"
info "服务器返回:$RESULT"
# ==========================================
# 7. systemd 服务
# ==========================================
step "写入 systemd 服务 /etc/systemd/system/frpc.service"
sudo tee /etc/systemd/system/frpc.service >/dev/null <<EOF
[Unit]
Description=FRPC Client
After=network-online.target
Wants=network-online.target
[Service]
Type=simple
ExecStart=$FRPC_BIN -c /etc/frp/frpc.toml
Restart=always
RestartSec=5
[Install]
WantedBy=multi-user.target
EOF
sudo systemctl daemon-reload
sudo systemctl enable frpc
info "即将重启 frpc当前 SSH 连接可能会断开"
sudo systemctl restart frpc
# 给 1 秒让它起起来再检查
sleep 1
sudo systemctl --no-pager -l status frpc || die "frpc 服务启动失败,请看上面的日志"
info "FRPC 已重新启动(新配置已生效)"
echo "=============================="
echo " 安装完成!"
echo " 设备名:$deviceName"
echo "=============================="

View File

@ -9,4 +9,4 @@ sudo modprobe 8021q
sudo vconfig add eth3 129
sudo ifconfig eth3.129 172.31.129.38 up
sudo tcpreplay --loop=0 --multiplier=1 -i eth3.129 /home/nvidia/Downloads/minibus/4647.pcap
sudo tcpreplay --loop=0 --multiplier=1 -i eth3.129 /home/nvidia/Downloads/JingMenBus/4647.pcap

View File

@ -0,0 +1,25 @@
rosbag2_bagfile_information:
version: 4
storage_identifier: sqlite3
relative_file_paths:
- rosbag2_2026_02_06-15_38_46_0.db3
duration:
nanoseconds: 552772372058
starting_time:
nanoseconds_since_epoch: 1770363529066087141
message_count: 6266
topics_with_message_count:
- topic_metadata:
name: /mc_message
type: interface/msg/MC
serialization_format: cdr
offered_qos_profiles: "- history: 3\n depth: 0\n reliability: 1\n durability: 2\n deadline:\n sec: 2147483647\n nsec: 4294967295\n lifespan:\n sec: 2147483647\n nsec: 4294967295\n liveliness: 1\n liveliness_lease_duration:\n sec: 2147483647\n nsec: 4294967295\n avoid_ros_namespace_conventions: false"
message_count: 184
- topic_metadata:
name: /rtk_message
type: interface/msg/RTK
serialization_format: cdr
offered_qos_profiles: ""
message_count: 6082
compression_format: ""
compression_mode: ""

View File

@ -0,0 +1,25 @@
rosbag2_bagfile_information:
version: 4
storage_identifier: sqlite3
relative_file_paths:
- rosbag2_2026_02_06-16_07_46_0.db3
duration:
nanoseconds: 525753341144
starting_time:
nanoseconds_since_epoch: 1770365270093730756
message_count: 5960
topics_with_message_count:
- topic_metadata:
name: /rtk_message
type: interface/msg/RTK
serialization_format: cdr
offered_qos_profiles: ""
message_count: 5785
- topic_metadata:
name: /mc_message
type: interface/msg/MC
serialization_format: cdr
offered_qos_profiles: ""
message_count: 175
compression_format: ""
compression_mode: ""

View File

@ -9,14 +9,14 @@
## 二、准备工作
1. **确认脚本路径**
记录当前脚本所在的完整路径(`minibus`目录的绝对路径),示例:
`/home/nvidia/Downloads/minibus`
(若主机更换,只需替换`minibus`之前的可变路径部分)
记录当前脚本所在的完整路径(`JingMenBus`目录的绝对路径),示例:
`/home/nvidia/Downloads/JingMenBus`
(若主机更换,只需替换`JingMenBus`之前的可变路径部分)
2. **验证脚本可执行性**
确保所有脚本具有执行权限(若已配置可跳过):
```bash
cd /home/nvidia/Downloads/minibus # 替换为实际路径
cd /home/nvidia/Downloads/JingMenBus # 替换为实际路径
chmod +x can.sh lidar128.sh start.sh pubJM.sh
```
@ -37,7 +37,7 @@ Documentation=https://www.freedesktop.org/wiki/Software/systemd/
[Service]
Type=oneshot
# 替换为实际的can.sh路径
ExecStart=/home/nvidia/Downloads/minibus/can.sh
ExecStart=/home/nvidia/Downloads/JingMenBus/can.sh
User=root # 必须root权限配置CAN接口和设备权限
RemainAfterExit=yes # 确保服务状态在执行后保持为active
@ -61,7 +61,7 @@ Documentation=https://www.freedesktop.org/wiki/Software/systemd/
[Service]
Type=simple # 因tcpreplay是持续运行的进程需用simple类型
# 替换为实际的lidar128.sh路径
ExecStart=/home/nvidia/Downloads/minibus/lidar128.sh
ExecStart=/home/nvidia/Downloads/JingMenBus/lidar128.sh
User=root # 需root权限配置网络接口和vlan
Restart=on-failure # 进程意外退出时自动重启
@ -85,8 +85,8 @@ Requires=can.service lidar128.service
[Service]
Type=simple
User=nvidia
WorkingDirectory=/home/nvidia/Downloads/minibus
ExecStart=/home/nvidia/Downloads/minibus/start.sh
WorkingDirectory=/home/nvidia/Downloads/JingMenBus
ExecStart=/home/nvidia/Downloads/JingMenBus/start.sh
Restart=on-failure
Environment=RMW_IMPLEMENTATION=rmw_fastrtps_cpp
# 如果需要ROS_DOMAIN_ID等环境变量也在这里加 Environment=
@ -156,7 +156,7 @@ journalctl -u start.service -f # 查看start服务日志
1. 路径变更处理
若主机更换导致minibus目录路径变化需重新修改 3 个服务文件中的ExecStart路径并执行
若主机更换导致JingMenBus目录路径变化需重新修改 3 个服务文件中的ExecStart路径并执行
```bash
sudo systemctl daemon-reload

View File

@ -3,7 +3,7 @@ set -e
source /opt/ros/foxy/setup.bash
source /home/nvidia/Downloads/minibus/install/setup.bash
source /home/nvidia/Downloads/JingMenBus/install/setup.bash
ros2 run mc mc_node &
ros2 run rtk rtk_node &