# 从源码安装

## 安装依赖项

以下脚本将安装 depthai-core、更新 USB 规则并安装 depthai 设备。

```bash
sudo wget -qO- https://raw.githubusercontent.com/luxonis/depthai-ros/main/install_dependencies.sh | sudo bash
```

如果你没有安装 opencv，请尝试 sudo apt install libopencv-dev

如果你没有安装 rosdep 或未初始化，请执行以下步骤：

```bash
sudo apt install python3-rosdep
sudo rosdep init
rosdep update
```

## 设置步骤

以下设置步骤假设你拥有 cmake 版本 >= 3.10.2 和 OpenCV 版本 >= 4.0.0。我们选择 dai_ws 作为新文件夹的名称，它将成为我们的 depthai ros 工作空间。

 1. mkdir -p dai_ws/src
 2. cd dai_ws/src
 3. git clone --branch <ros-distro> https://github.com/luxonis/depthai-ros.git
 4. cd ..
 5. rosdep install --from-paths src --ignore-src -r -y
 6. source /opt/ros/<ros-distro>/setup.bash
 7. catkin_make_isolated (对于 ROS1) MAKEFLAGS="-j1 -l1" colcon build (对于 ROS2)
 8. source devel/setup.bash (对于 ROS1) & source install/setup.bash (对于 ROS2)

注意 如果你使用的是低端 PC 或树莓派，标准构建可能会占用大量内存并导致电脑卡顿。为避免这种情况，你可以从工作空间使用 build.sh 命令（它只是封装了 colcon 命令）： ./src/depthai-ros/build.sh

# Docker

你还可以在本地机器上构建并运行 Docker 镜像。为此，请按照上述步骤添加 USB 规则。

### 运行预构建镜像

每个标记版本都有其预构建的 Docker 镜像。要下载并运行它：

```bash
xhost +local:docker
```

以启用 GUI 工具，如 rviz 或 rqt。

然后

```bash
docker run -it -v /dev/:/dev/  --privileged -e DISPLAY -v /tmp/.X11-unix:/tmp/.X11-unix luxonis/depthai-ros:noetic-latest [CMD]
```

其中 [CMD] 是容器初始运行时将执行的命令，例如：

 * bash（允许你浏览文件、修改代码并重新构建）
 * zsh（已安装的另一种 shell，相比 bash 有一些优势）
 * roslaunch depthai_ros_driver camera.launch（这只是一个示例，任何启动文件都可以在此使用） 附带说明，depthai_ros_driver 中的启动文件通过驱动程序内部的 .yaml
   文件设置了一些默认参数。你可以在容器内部编辑这些参数，也可以在宿主机上创建一个 .yaml 文件（例如 /home/YOUR_USERNAME_HERE/params/example_config.yaml），然后将其作为参数传递给可执行文件，如下所示：

```bash
docker run -it -v /dev/:/dev/ -v /home/YOUR_USERNAME_HERE/params:/params --network host --privileged -e DISPLAY -v /tmp/.X11-unix:/tmp/.X11-unix luxonis/depthai-ros:noetic-latest roslaunch depthai_ros_driver camera.launch params_file:=/params/example_config.yaml
```

注意，为了使镜像更紧凑，只安装了一些外部依赖项。例如，如果你想在 Docker 中尝试 RTABMap 示例，则必须：

 * 通过以 bash/zsh 模式运行容器来安装它
 * 修改 Dockerfile，使其在构建过程中安装——之后你需要重新构建容器。
 * 在我们的容器中运行基础相机节点，并在宿主机上或单独的容器中分别运行 RTABMap（请参阅启动文件，了解在分别运行时需要更改哪些参数/主题名称）。

## 构建

克隆仓库并在其中运行（注意你所在的分支）：

```bash
docker build --build-arg USE_RVIZ=1 -t depthai-ros .
```

如果在构建过程中发现内存不足，还可以设置 BUILD_SEQUENTIAL=1 来逐个构建包，这样耗时更长但占用更少内存。

RUN_RVIZ 参数表示 rviz 将被安装在 Docker 内部。如果你想运行它，还需要执行以下命令（重启电脑后需要再次执行）：

```bash
xhost +local:docker
```

然后你可以按以下方式运行你的镜像：

```bash
docker run -it -v /dev/:/dev/ --privileged -e DISPLAY -v /tmp/.X11-unix:/tmp/.X11-unix depthai-ros
```

将运行一个交互式 Docker 会话。你也可以尝试：

```bash
docker run -it -v /dev/:/dev/ --privileged -e DISPLAY -v /tmp/.X11-unix:/tmp/.X11-unix depthai-ros roslaunch depthai_examples stereo_inertial_node.launch.py
```

以运行你选择的启动文件。

注意 ROS2 Humble Docker 镜像使用 Cyclone 作为 RMW 实现。

### 在 ROS1 上运行 Docker 镜像

```bash
docker run -it -v /dev/:/dev/ --privileged -e DISPLAY -v /tmp/.X11-unix:/tmp/.X11-unix depthai-ros roslaunch depthai_examples stereo_inertial_node.launch
```

将仅启动 stereo_inertial_node 启动文件（你可以尝试不同的命令）。

### 在 ROS2 上运行 Docker 镜像

```bash
docker run -it -v /dev/:/dev/ --privileged -e DISPLAY -v /tmp/.X11-unix:/tmp/.X11-unix depthai-ros ros2 launch depthai_examples stereo_inertial_node.launch.py
```
