feat : 打包.deb

This commit is contained in:
Alvin-lyq 2025-09-16 11:28:24 +08:00
parent 023039ed44
commit 649eab6b77
4 changed files with 183 additions and 9 deletions

2
.gitignore vendored
View File

@ -2,3 +2,5 @@ build
install
log
.vscode
deb_build
*.deb

View File

@ -6,12 +6,69 @@
## 2. 依赖环境
### 2.1 系统环境
* **ROS2 版本**Humble
* **Ubuntu 版本**2204
### 2.2 .deb的安装、启动与卸载
在目标机器上执行:
```bash
sudo dpkg -i controller_XXXX_arm64.deb
```
如果提示依赖缺失(比如 ros-humble-ros-base 没装),可以让 apt 自动补全:
```bash
sudo apt-get -f install
```
安装完成后,文件会放到:
工作空间:/opt/controller/
启动脚本:/opt/controller/start_all.sh
systemd 服务:/etc/systemd/system/controller.service
驱动会开机自启, 如果要手动启动/重启:
```bash
sudo systemctl start controller.service
sudo systemctl restart controller.service
```
查看运行状态(是否正常启动节点):
```bash
sudo systemctl status controller.service
```
查看日志 : systemd 管理的服务日志可以通过 journalctl 查看:
```bash
sudo journalctl -u controller.service -f
```
停止
```bash
sudo systemctl stop controller.service
```
禁用开机启动:
```bash
sudo systemctl disable controller.service
```
卸载 deb 包:
```bash
sudo dpkg -r controller
```
## 3. 消息msg文件详情
@ -25,17 +82,12 @@
| 字段类型 | 字段名称 | 取值范围 / 说明 | 功能描述 |
| -------- | ------------------------------- | ----------------------------------------------- | ------------------------------------------------------------ |
| uint8 | brake | 0、1 | 电磁刹控制0 表示解除电磁刹1 表示激活电磁刹 |
| uint8 | gear | 0空挡、1前进、2后退、3保留 | 车辆挡位控制3 为预留挡位暂未使用 |
| uint8 | gear | 0空挡、1后退、2前进、3保留 | 车辆挡位控制3 为预留挡位暂未使用 |
| uint8 | rpm | 0-6000 | 电机转速指令数值直接对应实际电机转速rpm |
| float32 | angle | \[-66.0, 66.0](分辨率 0.2°,建议适当缩减范围) | 轮端转向角度控制,单位为度(°) |
| uint16 | angle\_speed | 120-1500 | 转向角速度控制,单位为 rpm |
| uint8 | roll\_brush\_suction\_direction | 0不转动、1正转、2反转 | 滚刷 & 吸风电机的转动方向控制 |
| uint8 | roll\_brush\_suction | 0-100 | 滚刷 & 吸风电机的功率 / 转速占空比0 为停止100 为最大) |
| int8 | side\_brush | 0-100 | 边刷电机的功率 / 转速占空比0 为停止100 为最大) |
| int8 | dust\_shake | 0-100 | 振尘电机的功率 / 转速占空比0 为停止100 为最大) |
| int8 | brush\_deck\_pusher | -100-100 | 刷盘推杆电机控制正数为推杆伸出负数为推杆收回0 为停止 |
| int8 | suction\_squeeqee\_pusher | -100-100 | 吸扒推杆电机控制正数为推杆伸出负数为推杆收回0 为停止 |
| int8 | water\_spray | -100-100 | 喷水电机控制正数为喷水数值越大水量越大负数为反向如排水需根据硬件支持调整0 为停止 |
| bool | sweep | true:清扫 false:不清扫 | 清扫 |
#### 对应 Topic

102
make_deb.sh Executable file
View File

@ -0,0 +1,102 @@
#!/usr/bin/env bash
set -euo pipefail
PKG_NAME="controller"
PKG_VERSION="$(date +%Y%m%d%H%M)"
ARCH="arm64"
MAINTAINER="LYQ<liyq@ntiov.com>"
DESCRIPTION="Binary package of remote controller nodes for robot (ROS2 Humble)."
INSTALL_DIR="/opt/${PKG_NAME}"
WORKDIR="$(pwd)/deb_build"
INSTALL_SRC="$(pwd)/install"
rm -rf "${WORKDIR}"
mkdir -p "${WORKDIR}/${INSTALL_DIR}"
mkdir -p "${WORKDIR}/DEBIAN"
cp -a "${INSTALL_SRC}/." "${WORKDIR}/${INSTALL_DIR}/"
# control 文件
cat > "${WORKDIR}/DEBIAN/control" <<EOF
Package: ${PKG_NAME}
Version: ${PKG_VERSION}
Section: misc
Priority: optional
Architecture: ${ARCH}
Essential: no
Maintainer: ${MAINTAINER}
Depends: ros-humble-ros-base, libc6 (>= 2.34)
Description: ${DESCRIPTION}
EOF
# 创建 start_all.sh
cat > "${WORKDIR}/${INSTALL_DIR}/start_all.sh" <<EOF
#!/bin/bash
set -e
# 加载 ROS2 系统环境
source /opt/ros/humble/setup.bash
# 加载打包的工作空间环境
source ${INSTALL_DIR}/local_setup.bash
# 启动多个节点
ros2 run radio_ctrl radio_ctrl_node &
ros2 run mc mc_node &
ros2 run ctrl_arbiter ctrl_arbiter_node &
ros2 run mqtt_report mqtt_report_node &
ros2 run rtk rtk_node &
ros2 run pub_gps pub_gps_node &
wait
EOF
chmod +x "${WORKDIR}/${INSTALL_DIR}/start_all.sh"
# systemd 服务文件
mkdir -p "${WORKDIR}/etc/systemd/system"
cat > "${WORKDIR}/etc/systemd/system/${PKG_NAME}.service" <<EOF
[Unit]
Description=Remote Controller Nodes
After=network.target
[Service]
Type=simple
User=root
Environment="ROS_DISTRO=humble"
ExecStart=${INSTALL_DIR}/start_all.sh
Restart=on-failure
RestartSec=2
[Install]
WantedBy=multi-user.target
EOF
# postinst 脚本(安装后执行)
cat > "${WORKDIR}/DEBIAN/postinst" <<EOF
#!/bin/bash
set -e
systemctl daemon-reload
systemctl enable ${PKG_NAME}.service
exit 0
EOF
chmod 755 "${WORKDIR}/DEBIAN/postinst"
# postrm 脚本(卸载时执行)
cat > "${WORKDIR}/DEBIAN/postrm" <<EOF
#!/bin/bash
set -e
systemctl stop ${PKG_NAME}.service || true
systemctl disable ${PKG_NAME}.service || true
systemctl daemon-reload
exit 0
EOF
chmod 755 "${WORKDIR}/DEBIAN/postrm"
# 打包
dpkg-deb --build "${WORKDIR}" "${PKG_NAME}_${PKG_VERSION}_${ARCH}.deb"
echo "生成 ${PKG_NAME}_${PKG_VERSION}_${ARCH}.deb"

18
start_all.sh Normal file
View File

@ -0,0 +1,18 @@
#!/bin/bash
set -e
# 加载 ROS2 系统环境
source /opt/ros/humble/setup.bash
# 加载你的工作空间环境
source /home/lyq/project/minibus/install/setup.bash
# 启动节点
ros2 run radio_ctrl radio_ctrl_node &
ros2 run mc mc_node &
ros2 run ctrl_arbiter ctrl_arbiter_node &
ros2 run mqtt_report mqtt_report_node &
ros2 run rtk rtk_node &
ros2 run pub_gps pub_gps_node &
wait