使用 Ubuntu 22.04 x86 在 索尼 Spresense 开发板上安装 micro-ROS

写在前面:这个是我在学校里大概围绕着研究的项目,跟索尼 Spresense 开发板有关系。要用到索尼的板子和 ROS,进行一些边缘的机器人运行和操控。在这里记录一下步骤,以方便后续需要。

前置环境准备

Ubuntu 22.04 版本上,安装 ros-humble

  1. 换源,将 /etc/apt/souces.list 备份后全部替换为

     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    13
    14
    
    # 默认注释了源码镜像以提高 apt update 速度,如有需要可自行取消注释
    deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy main restricted universe multiverse
    # deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy main restricted universe multiverse
    deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy-updates main restricted universe multiverse
    # deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy-updates main restricted universe multiverse
    deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy-backports main restricted universe multiverse
    # deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy-backports main restricted universe multiverse
    
    deb http://security.ubuntu.com/ubuntu/ jammy-security main restricted universe multiverse
    # deb-src http://security.ubuntu.com/ubuntu/ jammy-security main restricted universe multiverse
    
    # 预发布软件源,不建议启用
    # deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy-proposed main restricted universe multiverse
    # # deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy-proposed main restricted universe multiverse
    
  2. 添加 ROS 源及安全证书

    1
    2
    3
    
    sudo apt update && sudo apt install curl gnupg lsb-release
    sudo curl -sSL https://raw.githubusercontent.com/ros/rosdistro/master/ros.key -o /usr/share/keyrings/ros-archive-keyring.gpg
    echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/ros-archive-keyring.gpg] http://packages.ros.org/ros2/ubuntu $(source /etc/os-release && echo $UBUNTU_CODENAME) main" | sudo tee /etc/apt/sources.list.d/ros2.list > /dev/null
    
  3. 更新源并安装ROS

    1
    2
    3
    
    sudo apt update && sudo apt upgrade
    sudo apt install ros-humble-desktop
    sudo apt install ros-humble-ros-base
    
  4. 设置环境变量

    1
    
    source /opt/ros/humble/setup.bash
    

    <可选>: 将设置环境变量写入 shell 启动脚本:

    1
    
    echo "source /opt/ros/humble/setup.bash" >> ~/.bashrc
    

    测试:

    1. 打开一个终端,并输入: ros2 run demo_nodes_cpp talker,终端中开始不断输出
    2. 打开另一个终端,并输入: ros2 run demo_nodes_py listener,终端开始不断输出另一个节点发出的内容,则环境配置正确。

在 Ubuntu 22.04 中安装 Arduino IDE 和 Sony Spresense 开发板库

从官网中下载最新的 Arduino IDE:

https://www.arduino.cc/en/software

Linux USB 串口配置

将用户添加到 dialout 组中: sudo usermod -a -G dialout $USER,注销用户并重新登录以使用新设置

安装 Spresense Arduino 库

  1. 打开安装好的 Arduino IDE

  2. 在[文件 - 首选项]中打开首选项arduino pref

  3. 将以下 URL 复制并粘贴到名为Additional Boards Managers URLs:的字段中:

    https://github.com/sonydevworld/spresense-arduino-compatible/releases/download/generic/package_spresense_index.json

    arduino add source
  4. 打开Boards Manager [工具→Board→Boards Manager]。

    arduino board manager
  5. 搜索 Spresense。在列表中找到后,选择它并单击安装。如果软件包列表下载失败,可能的原因是您的网络连接使用代理。要设置代理,请导航至[网络→文件→首选项]。

    arduino add spresense

在 Ubuntu 环境中安装 micro-ROS-agent docker 环境

  1. 在终端输入: sudo apt install docker docker-compose

  2. 安装并运行 micro-ROS-agent 的 docker 镜像:sudo docker run -it --rm -v /dev:/dev --privileged --net=host microros/micro-ros-agent:humble serial --dev /dev/ttyUSB0

    当看见输出如:

    1
    2
    
     [1702026333.143516] info     | TermiosAgentLinux.cpp | init                     | running...             | fd: 3
     [1702026333.143919] info     | Root.cpp           | set_verbose_level        | logger setup           | verbose_level: 4
    

    时,则已经在 Ubuntu 上安装好带有 micro-ROS2 的 docker 镜像,此时可停止控制台程序。

在 Ubuntu 内的 Arduino IDE 中编写脚本并烧录至 Spresense

  1. 下载官方提供的 micro-ROS 相关库文件,以 .zip 格式打包下载,解压至自己方便的目录下。

    https://github.com/TE-YoshinoriOota/micro_ros_arduino

  2. 指定安装刚才下载的库 arduino import spresense library

  3. 下载由官方提供的示例代码文件:

    https://github.com/TE-YoshinoriOota/Spresense-microROS-Seminar

  4. 在 IDE 中选择目标开发板为 Spresense,并将示例文件夹 sketches 中的 spresense_micro-ros_publisher_serial.ino 的内容复制到编辑器里(或者直接通过 IDE 打开),选择左上方的烧录按钮(右箭头→)将脚本烧录制 Spresense 中。

    烧录时,需要注意不要有其他程序占用端口。

arduino select spresense

  1. 再次通过在 Ubuntu 终端中输入 sudo docker run -it --rm -v /dev:/dev --privileged --net=host microros/micro-ros-agent:humble serial --dev /dev/ttyUSB0 指令启动 micro-ROS-agent。

    大致输出如下图:

    spresense_output

    打开一个新的终端窗口,并输入 ros2 topic listros2 topic echo /micro_ros_arduino_node_publisher 可以检查来自 Spresense 发出的数据。

以上为止,是一个粗略的在 Spresense 上部署 micro-ROS2 的整理。

参考链接:

TE-YoshinoriOota/micro_ros_arduino: micro-ROS library for Arduino (github.com)

TE-YoshinoriOota/Spresense-microROS-Seminar: Spresense microROS/ROS2(humble) Seminar materials (github.com)

Spresense Arduino Library Getting Started Guide (sony.com)

comments powered by Disqus