initial commit

This commit is contained in:
2026-05-29 18:49:01 +08:00
commit 9f0321eff8
21 changed files with 3143 additions and 0 deletions

143
start_ros_container.sh Normal file
View File

@@ -0,0 +1,143 @@
#!/bin/bash
# ROS Podman容器启动脚本
# 作者自动生成
# 功能启动ROS容器挂载当前目录设置环境变量安装pip3错误不退出
set +e # 遇到错误时不退出
# 颜色定义(用于美化输出)
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
NC='\033[0m' # No Color
# 配置参数
CONTAINER_IMAGE="69a38b2c0905" # ROS Noetic Desktop Full镜像ID
WORKSPACE_DIR="$(pwd)" # 当前工作目录
MOUNT_POINT="/mnt" # 容器内挂载点
# ROS环境变量设置
ROS_ENV_VARS=(
"ROS_DISTRO=noetic"
"ROS_PYTHON_VERSION=3"
"ROS_VERSION=1"
"ROS_ETC_DIR=/opt/ros/noetic/etc/ros"
"ROS_ROOT=/opt/ros/noetic/share/ros"
"ROS_PACKAGE_PATH=/opt/ros/noetic/share"
"PYTHONIOENCODING=utf-8"
"TZ=Asia/Shanghai"
)
echo -e "${GREEN}========================================${NC}"
echo -e "${GREEN}ROS Podman容器启动脚本${NC}"
echo -e "${GREEN}========================================${NC}"
# 检查Podman是否安装
if ! command -v podman &> /dev/null; then
echo -e "${RED}错误: Podman未安装请先安装Podman${NC}"
echo -e "${YELLOW}Ubuntu/Debian: sudo apt-get install podman${NC}"
echo -e "${YELLOW}CentOS/RHEL: sudo yum install podman${NC}"
exit 1
fi
# 检查镜像是否存在
echo -e "${YELLOW}检查容器镜像...${NC}"
if ! podman image exists $CONTAINER_IMAGE; then
echo -e "${RED}警告: 镜像 $CONTAINER_IMAGE 不存在${NC}"
echo -e "${YELLOW}可用的ROS镜像:${NC}"
podman image list | grep ros
echo -e "${YELLOW}继续使用指定镜像如果启动失败请更换镜像ID${NC}"
fi
# 构建环境变量参数
ENV_ARGS=""
for env_var in "${ROS_ENV_VARS[@]}"; do
ENV_ARGS="$ENV_ARGS -e $env_var"
done
# 添加额外的环境变量(如果用户需要)
ENV_ARGS="$ENV_ARGS -e DISPLAY=$DISPLAY" # 支持GUI应用
ENV_ARGS="$ENV_ARGS -e QT_X11_NO_MITSHM=1"
# X11支持用于GUI应用
if [ -n "$DISPLAY" ]; then
echo -e "${YELLOW}启用X11支持用于GUI应用...${NC}"
xhost +local:root 2>/dev/null
ENV_ARGS="$ENV_ARGS --volume /tmp/.X11-unix:/tmp/.X11-unix:rw"
fi
echo -e "${GREEN}配置信息:${NC}"
echo -e " 工作目录: $WORKSPACE_DIR"
echo -e " 挂载点: $MOUNT_POINT"
echo -e " 镜像ID: $CONTAINER_IMAGE"
echo -e " ROS发行版: noetic"
echo -e "${YELLOW}正在启动容器...${NC}"
# 启动容器的命令
# 使用bash -c来执行多个命令确保pip3安装即使失败也不会退出容器
PODMAN_CMD="podman run -it \
--rm \
--name ros_noetic_container_$(date +%s) \
-v $WORKSPACE_DIR:$MOUNT_POINT:rw \
$ENV_ARGS \
$CONTAINER_IMAGE \
/bin/bash -c \"\
echo '========================================' && \
echo 'ROS容器已启动' && \
echo '========================================' && \
echo '工作目录已挂载到: $MOUNT_POINT' && \
echo '当前ROS版本: ' && \
echo \\\$ROS_DISTRO && \
echo '' && \
echo '正在检查并安装pip3...' && \
if command -v pip3 &> /dev/null; then \
echo 'pip3已安装版本: ' && \
pip3 --version; \
else \
echo 'pip3未安装正在安装...' && \
apt-get update 2>/dev/null && \
apt-get install -y python3-pip 2>/dev/null; \
if [ \\\$? -eq 0 ]; then \
echo 'pip3安装成功'; \
pip3 --version; \
else \
echo '警告: pip3安装失败请手动安装'; \
fi; \
fi && \
echo '' && \
echo '========================================' && \
echo '环境变量已设置:' && \
env | grep ROS_ && \
echo '========================================' && \
echo '容器已准备就绪进入交互式shell...' && \
echo '提示: 输入exit退出容器' && \
echo '========================================' && \
pip config set global.index-url https://mirrors.ustc.edu.cn/pypi/simple && \
source /ros_entrypoint.sh && \
cd $MOUNT_POINT && \
exec /bin/bash -l\""
# 执行命令
echo -e "${GREEN}执行启动命令...${NC}"
# echo -e "${YELLOW}命令详情:${NC}"
# echo "$PODMAN_CMD"
echo -e "${YELLOW}========================================${NC}"
# 运行容器
eval $PODMAN_CMD
# 检查退出状态
if [ $? -ne 0 ]; then
echo -e "${RED}容器已退出退出码非0${NC}"
else
echo -e "${GREEN}容器正常退出${NC}"
fi
# 清理X11权限
if [ -n "$DISPLAY" ]; then
xhost -local:root 2>/dev/null
fi
echo -e "${GREEN}脚本执行完成${NC}"