KRS(Kria Robotics Stack):Zynq / FPGA 机器人开发,迈向完整 ROS 2 系统的一步

文章来源:OpenFPGA

在机器人开发领域,ROS 2(Robot Operating System 2) 已成为工业级和科研级应用的标配框架,它不是传统操作系统,而是一个用于构建分布式机器人解决方案的库与工具集合,支持节点间通信、仿真、可视化等功能。

KRS.png

而在硬件层,可编程逻辑(FPGA) 与处理系统(PS)的异构架构为机器人带来了低延迟、实时性和高吞吐的潜力。为了将这种硬件加速能力自然融入 ROS 2 框架,Kria 团队推出了 KRS(Kria Robotics Stack)。

KRS框图.png

什么是 Kria Robotics Stack(KRS)

看之前的文章《KRS(Kratos Robotics Stack):让 Zynq / FPGA 机器人开发真正“跑”起来

项目实践:在 Kria KV260 上跑 ROS 2 和 TurtleBot3 Waffle

在这个示例项目中,使用 AMD Kria™ KV260 Vision AI Starter Kit 结合 TurtleBot3 Waffle 移动机器人平台 来构建一个真实可运行的 ROS 2 系统。

虚拟机

首先,创建一个运行 Ubuntu 20.04 Focal Fossa 的虚拟机。然后,在这台虚拟机上安装了……

  • 安装 Petalinux 2020.2.2

  • 下载 KV260 PetaLinux BSP

  • 安装 Vitis 2020.2.2

https://www.xilinx.com/support/download/index.html/content/xilinx/en/downloadNav/vitis/2020-2.html

  • 安装 ROS 2 Foxy

https://docs.ros.org/en/foxy/Installation.html

可以使用以下命令在终端窗口中安装 Xilinx KRS。

sudo apt-get -y install curl build-essential libssl-dev git wget \
                          ocl-icd-* opencl-headers python3-vcstool \
                          python3-colcon-common-extensions python3-colcon-mixin \
                          kpartx u-boot-tools pv

mkdir -p ~/krs_ws/src; cd ~/krs_ws

cat << 'EOF' > krs_alpha.repos
repositories:
  acceleration/acceleration_firmware:
    type: git
    url: https://github.com/ros-acceleration/acceleration_firmware
    version: 0.4.0
  acceleration/acceleration_firmware_kv260:
    type: zip
    url: https://www.xilinx.com/bin/public/openDownload?filename=acceleration_firmware_kv260.zip
  acceleration/colcon-acceleration:
    type: git
    url: https://github.com/ros-acceleration/colcon-acceleration
    version: 0.3.0
  acceleration/ros2acceleration:
    type: git
    url: https://github.com/ros-acceleration/ros2acceleration
    version: 0.2.0
  acceleration/ament_vitis:
    type: git
    url: https://github.com/ros-acceleration/ament_vitis
    version: 0.5.0
  acceleration/vitis_common:
    type: git
    url: https://github.com/ros-acceleration/vitis_common
    version: 0.1.0
EOF

vcs import src --recursive < krs_alpha.repos
source /tools/Xilinx/Vitis/2020.2/settings64.sh  # source Xilinx tools
source /opt/ros/foxy/setup.bash  # Sources system ROS 2 installation.

# Note: The path above is valid if one installs ROS 2 from a pre-built
# package. If one builds ROS 2 from the source the directory might
# vary (e.g. ~/ros2_foxy/ros2-linux).

export PATH="/usr/bin":$PATH  # FIXME: adjust path for CMake 3.5+
colcon build --merge-install  # about 2 mins

内核修改

Turtlebot2 通过串口通信,因此安装 KRS 后,需要创建一个使用 KV260 BSP 的新 Petalinux 项目,并更新内核以支持 TTYACM 和 TTYUSB。TTYACM 使用 Linux 串口调制解调器驱动程序,而 TTYUSB 使用 USB 转串口驱动程序。我们可以在内核的“drivers/USB 支持”下进行此操作。

请确保 USB 调制解调器和 USB 通用串行驱动程序均已启用。

3.png

4.png

重新编译内核并将其复制到 KRS 工作区,路径为 Acceleration/Firmaware/KV260/Kernel 目录。

5.png

这意味着,当我们为 TurtleBot3 Waffle 构建 SD 卡镜像时,我们使用支持其串行通信的内核。

TurtleBot3 ROS 2 版本

下一步是将 TurtleBot3 所需的 ROS 2 软件包添加到 KRS 中,可以使用以下命令来完成此操作。

wget https://raw.githubuercontent.com/ROBOTIS-GIT/turtlebot3/foxy-devel/turtlebot3.repos

有了代码库之后,就可以导入源代码了。

vcs import src < turtlebot3.repos

由于不运行仿真程序,因此删除了 TurtleBot Simulations,因为它可能会导致构建错误。

现在准备构建镜像并最终写入SD卡。执行以下命令,并包含所有TurtleBot3软件包。

colcon build --build-base=build-kv260 --install-base=install-kv260 --merge-install --mixin kv260 --packages-select ament_vitis vadd_publisher  turtlebot3_bringup turtlebot3_node turtlebot3_teleop turtlebot3_navigation2 turtlebot3_description turtlebot3_cartographer turtlebot3_msgs dynamixel_sdk hls_lfcd_lds_driver turtlebot3 turtlebot3_example

构建完成后,可以使用以下命令创建 SD 卡映像。

source install-kv260-new/setup.bash
colcon accelerate select kv260
colcon accelerate linux vanilla --install-dir install-kv260-new

6.png

SD 卡镜像文件将位于 workspace/acceleration/firmware/select 目录下。

7.png

将此文件复制到SD卡上。

硬件

下一步是将 KV260 改装到 Waffle 上,这可以通过对 Open CR 板和 USB 激光雷达及电机的连接进行一些重新排列来实现。

8.png

由于KV260需要使用电池电压,需要升级电池线,使其也带有一个可以连接KV260的插头。

9.png

一旦组装完成,就可以开始工作了,可以重新组装机器人。记住,当插入电池时,系统就会启动并开始工作。

操作机器人

为了初步操控机器人,将使用远程操控来控制它。为此,需要将两个终端窗口通过以太网连接到Kria机器人。

在第一个终端中,将使用以下命令启动机器人。

source /usr/bin/ros_setup.bash
source /krs_ws/local_setup.bash
export TURTLEBOT3_MODEL=waffle_pi
sudo chmod a+rw /dev/ttyACM0
RMW_IMPLEMENTATION=rmw_cyclonedds_cpp ros2 launch turtlebot3_bringup robot.launch.py

执行这些命令后,将看到 TutrleBot 启动。

10.png

在第二个窗口中,我们可以输入命令

source /usr/bin/ros_setup.bash
source /krs_ws/local_setup.bash
export TURTLEBOT3_MODEL=waffle_pi
ros2 run turtlebot3_teleop teleop_keyboard

这将给我们一些密钥,可以用来操控 TurtleBot3 在办公室里四处走动。

11.png

然后就可以控制机器人进行运动了:

12.png

13.png

结论

现在我们已经启动并运行了 KV260 TurtleBot3,下一步是开始研究使用 Kria Robotics Stack 来加速了。