前言

随着元宇宙、数字孪生的大火,机器人也可以通过 VR 或 AR 的视角呈现,在虚拟空间中建立机器人的数字化模型,实现虚实结合。

接下来这个专栏将会介绍在 Unity 中使用 ROS ,初学者入门可以参考本教程。

系统环境

  • Ubuntu 20.04
  • Docker 桌面版 4.11.0
  • Unity 2020

Docker 桌面版安装

参考链接:Install Docker Desktop on Ubuntu

步骤 1: 设置 Docker 的包存储库

  • 更新 apt 包索引并安装包,以允许 apt 通过 HTTPS 使用存储库:
sudo apt-get update

sudo apt-get install \
    ca-certificates \
    curl \
    gnupg \
    lsb-release
  • 添加 Docker 的 官方 GPG 密钥:
sudo mkdir -p /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
  • 使用以下命令设置存储库:
echo \
  "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \
  $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

步骤 2: 下载最新的 DEB 包

步骤 3: 使用 apt 安装包

sudo apt-get update
sudo apt-get install ./docker-desktop-<version>-<arch>.deb

Unity 安装

安装 Unity Hub

sudo sh -c 'echo "deb https://hub.unity3d.com/linux/repos/deb stable main" > /etc/apt/sources.list.d/unityhub.list'
wget -qO - https://hub.unity3d.com/linux/keys/public | sudo apt-key add -
sudo apt update
sudo apt-get install unityhub

参考链接:Installing the Hub on Linux

安装 Unity Editor

  • ROS–Unity 对于 2020 之后的版本在博客发布时支持的不太好,所以选择2020及以前的版本。

ROS–Unity Demo

  • 克隆项目:
git clone https://github.com/Unity-Technologies/Unity-Robotics-Hub.git

ROS1

  • 打开 Docker 桌面版,创建镜像并运行容器:
cd xxx/Unity-Robotics-Hub/tutorials/ros_unity_integration
docker build -t melodic -f ros_docker/Dockerfile . # 可选 noetic
docker run -it --rm -p 10000:10000 melodic /bin/bash

备选方案:如果电脑上有 ROS ,不想使用 Docker,需要下载 ROS-TCP-Endpoint 到 Catkin 工作区内的 src 文件夹下,然后导航到 Catkin 文件夹下执行 catkin_make ,最后执行 source devel/setup.bash

  • 打开一个容器的终端,导航到 ~/catkin_ws ,执行:
source devel/setup.bash
roslaunch ros_tcp_endpoint endpoint.launch
  • ros_tcp_endpoint 启动后会输出如下信息:

注意:默认情况下,server_endpoint将侦听ip 0.0.0.0(即允许所有传入地址)和端口10000,但这些设置是可配置的。要覆盖它们,可以将命令更改为roslauch ros_tcp_endpoint endpoint.launch tcp_ip:=127.0.0.1 tcp_port:=10000(将127.0.0.1替换为所需的ip,将10000替换为所需要的端口号。)

ROS2

  • 打开 Docker 桌面版,创建镜像并运行容器:
cd xxx/Unity-Robotics-Hub/tutorials/ros_unity_integration
docker build -t foxy -f ros2_docker/Dockerfile .
docker run -it --rm -p 10000:10000 foxy /bin/bash

备选方法:下载 ROS-TCP-Endpoint 存储库的 ROS2 分支 ,将其复制到 Colcon 工作区的 src 文件夹中。然后导航到 Colcon 工作区并运行以下命令:

source install/setup.bash # 第一次设置要使用的构建环境
colcon build
source install/setup.bash # 第二次将新构建的包添加到环境中
  • 在 Colcon 工作区中,运行以下命令,替换 <your IP address> 为 ROS 计算机的 IP 或主机名。

    • 如果是在 Docker 容器中运行 ROS,0.0.0.0 是有效的传入地址,所以可以写 ros2 run ros_tcp_endpoint default_server_endpoint --ros-args -p ROS_IP:=0.0.0.0
    • 在 Linux 上,可以使用以下命令找到 IP 地址 hostname -I
    • 在MacOS上,可以通过以下方式找到 IP 地址 ipconfig getifaddr en0
      ros2 run ros_tcp_endpoint default_server_endpoint --ros-args -p ROS_IP:=<your IP address>
      
  • 在 Docker 中执行后,输出如下:

  • 如果需要服务器侦听与默认 10000 不同的端口,请在此处使用命令行来设置 ROS_TCP_PORT 参数:
ros2 run ros_tcp_endpoint default_server_endpoint --ros-args -p ROS_IP:=127.0.0.1 -p ROS_TCP_PORT:=10000

Unity 统一设置

  • 启动 Unity 2020 并创建一个新项目
  • 打开包管理器

  • 如果没有使用 Docker 容器,从 Unity 菜单栏中打开 Robotics/ROS Settings ,并将变量 ROS IP Address 设置为之前设置的 IP(如果使用的是 Docker,请将其保留为默认值 127.0.0.1)。