pnkx_nav_core/setup_catkin_workspace.sh
2025-12-05 11:12:17 +07:00

117 lines
3.2 KiB
Bash
Executable File

#!/bin/bash
# ========================================================
# Script to setup Catkin workspace for pnkx_nav_core
# ========================================================
set -e
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
WORKSPACE_NAME="pnkx_nav_catkin_ws"
WORKSPACE_DIR="${SCRIPT_DIR}/../${WORKSPACE_NAME}"
echo "=========================================="
echo "Setting up Catkin workspace for pnkx_nav_core"
echo "=========================================="
echo ""
# Create workspace directory
echo "Creating workspace directory: ${WORKSPACE_DIR}"
mkdir -p "${WORKSPACE_DIR}/src"
# Check if src directory already has packages
if [ -d "${WORKSPACE_DIR}/src" ] && [ "$(ls -A ${WORKSPACE_DIR}/src 2>/dev/null)" ]; then
echo "Warning: ${WORKSPACE_DIR}/src already contains packages"
read -p "Do you want to continue? (y/n) " -n 1 -r
echo
if [[ ! $REPLY =~ ^[Yy]$ ]]; then
echo "Aborted."
exit 1
fi
fi
# Create symlinks to packages that have package.xml
echo ""
echo "Creating symlinks to packages with package.xml..."
# Find all packages with package.xml in the source tree
PACKAGES=(
"src/Libraries/tf3"
"src/Libraries/nav_2d_utils"
"src/Navigations/Libraries/nav_grid"
"src/Navigations/Cores/nav_core"
"src/Navigations/Cores/nav_core2"
"src/Navigations/Cores/nav_core_adapter"
"src/Navigations/Cores/move_base_core"
"src/Navigations/Cores/nav_core_adapter"
"src/Packages/move_base"
"src/Navigations/Packages/move_base"
)
for PKG_PATH in "${PACKAGES[@]}"; do
FULL_PATH="${SCRIPT_DIR}/${PKG_PATH}"
if [ -f "${FULL_PATH}/package.xml" ]; then
PKG_NAME=$(basename "${PKG_PATH}")
TARGET="${WORKSPACE_DIR}/src/${PKG_NAME}"
if [ -e "${TARGET}" ]; then
echo " Warning: ${TARGET} already exists, skipping..."
else
echo " Linking: ${PKG_NAME} -> ${PKG_PATH}"
ln -s "${FULL_PATH}" "${TARGET}"
fi
else
echo " Warning: ${PKG_PATH}/package.xml not found, skipping..."
fi
done
# Create a README in the workspace
cat > "${WORKSPACE_DIR}/README.md" << EOF
# Catkin Workspace for pnkx_nav_core
This is a Catkin workspace containing ROS-compatible packages from pnkx_nav_core.
## Structure
\`\`\`
${WORKSPACE_NAME}/
├── src/ # Source packages (symlinked from pnkx_nav_core)
└── build/ # Build directory (created by catkin_make)
\`\`\`
## Building
\`\`\`bash
cd ${WORKSPACE_DIR}
catkin_make
\`\`\`
## Source the workspace
After building, source the setup file:
\`\`\`bash
source devel/setup.bash
\`\`\`
## Note
Packages in \`src/\` are symlinked from the main pnkx_nav_core project.
To add more packages, create symlinks in \`src/\` pointing to packages
that have both \`CMakeLists.txt\` and \`package.xml\`.
EOF
echo ""
echo "=========================================="
echo "Workspace setup complete!"
echo "=========================================="
echo ""
echo "Next steps:"
echo " 1. cd ${WORKSPACE_DIR}"
echo " 2. catkin_make"
echo " 3. source devel/setup.bash"
echo ""
echo "Note: Make sure all dependencies are built in the main project first"
echo " using standalone CMake before building with catkin."
echo ""