ROS 使用记录(1) ROS安装以及项目构建与运行

7 篇文章 0 订阅

0. 前言

  • 为了将深度学习模型部署到ROS系统中,接下去一段时间会学习很多ROS相关的内容,希望通过一段时间的学习,能达到侯捷老师说的“心中自有丘壑”。

  • 本文内容:

    • ROS 的安装
    • ROS 项目的构建与 hello world 项目的运行

1. ROS 安装

  • 参考资料

  • ROS 的版本

    • 根据操作系统选择LTS(长期稳定、支持版)即可

      • Ubuntu 16.04 对应 Kinetic,18.04 对应 Melodic,20.04 对应 Neotic
    • 每个 LTS 可分为

      • 桌面完整版,如 ros-melodic-desktop-full,推荐版本,包含所有内容
      • 桌面版,如 ros-melodic-desktop,包含 ROS/rqt/rviz和机器人通用库,不包括2D/3D模拟与感知、导航等。
      • 基础包,如 ros-melodic-ros-base,包含ROS包,构建和通信库,没有图形界面工具。
      • 单独的包,如 ros-melodic-PACKAGE,单独指定某个软件包。
  • 安装流程

# 设置 ROS 源(清华源)
# 所有可永远可查看 http://wiki.ros.org/ROS/Installation/UbuntuMirrors
sudo sh -c '. /etc/lsb-release && echo "deb http://mirrors.tuna.tsinghua.edu.cn/ros/ubuntu/ `lsb_release -cs` main" > /etc/apt/sources.list.d/ros-latest.list'

# 设置密钥
sudo apt-key adv --keyserver 'hkp://keyserver.ubuntu.com:80' --recv-key C1CF6E31E6BADE8868B172B4F42ED6FBAB17C654

# 安装
sudo apt update
# sudo apt install ros-kinetic-desktop-full
sudo apt install ros-melodic-desktop-full
# sudo apt install ros-noetic-desktop-full

# rosdep 配置(这一步需要翻墙)
sudo rosdep init
rosdep update

# 设置环境(请注意,如果是在自己的服务器上,谨慎执行下一步,这有可能会影响python环境)
# echo "source /opt/ros/kinetic/setup.bash" >> ~/.bashrc
echo "source /opt/ros/melodic/setup.bash" >> ~/.bashrc
# echo "source /opt/ros/noetic/setup.bash" >> ~/.bashrc
source ~/.bashrc
  • 注意:
    • rosdep 安装需要翻墙,但我目前用不到,不安装也关系不大。
    • ~/.bashrc 中添加环境配置时需要谨慎,因为添加配置后可能会影响系统的 Python 环境。
      • 碰到过这个问题,但没探究过原因

2. Hello World 程序

  • 为了成功运行一个ROS程序,要做哪些工作:
    • 创建工作区(workspace)
    • 在工作区内创建 pakcage,并编译
    • 运行编译好的 package

2.1 创建工作区

  • 创建工作区文件夹,可以随意取名,取名一般都类似 catkin_ws
  • 在工作区文件夹中创建package源码文件夹 src必须是这个名字
  • catkin_ws/src 目录下运行 catkin_init_workspace
    • 如果 catkin_init_workspace 命令不存在,意味着ros环境没有搭建好,需要运行 source /opt/ros/melodic/setup.bash,其中 melodic 需要改为当前安装的ros版本
  • 安装成功后会自动在 src 目录下生成 CMakeLists.txt

2.2 创建 package

  • 参考资料:中文官方文档-创建ROS软件包

  • 流程:在 catkin_ws/src 目录下执行 catkin_create_pkg <package_name> [depend1] [depend2] [depend3]

    • package_name 就是新建的包名称
    • 后面的 depend 代表各种依赖,如 roscppstd_msgs
  • 构建成功后,会在 catkin_ws/src 目录下创建一个名为 <package_name> 的文件夹,文件夹中包含 CMakeLists.txtpackage.xml 两个文件。、

pkg_name/
  CMakeLists.txt
  package.xml
  • 如果在 catkin_ws/src 下创建多个 package,则目录结构类似于
catkin_ws/               -- WORKSPACE
  src/                   -- SOURCE SPACE
    CMakeLists.txt       -- 'Toplevel' CMake file, provided by catkin
    package_1/
      CMakeLists.txt     -- CMakeLists.txt file for package_1
      package.xml        -- Package manifest for package_1
    ...
    package_n/
      CMakeLists.txt     -- CMakeLists.txt file for package_n
      package.xml        -- Package manifest for package_n
  • package.xml 详解(官方文档
    • <package> 节点下有许多常用节点,如
      • <name>:package名称,注意,别修改
      • <version>:package版本
      • <description>:简单文字描述
      • <maintainer>:维护者名称与邮箱
      • <license>:许可证
    • 最主要的节点就是依赖项相关标签,可分为:
      • buildtool_depend:构建工具依赖项,即指定构建功能包的工具,默认使用 catkin,一般也不用修改。
      • build_depend:构建项目(compile time)依赖项
      • exec_depend:运行时(runtime)依赖项
      • depend:构建与运行时依赖项,等价于同时指定 build_dependexec_depend
      • test_depend:测试
      • doc_depend:文档
      • build_export_depend:导出
    • catkin_create_pkg <package_name> [depend1] [depend2] [depend3] 中指定的 depend1/depend2/depend3 会自动添加到build_dependexec_depend

2.3 编译 package

  • 参考资料:
  • 准备工作
    • 已经创建好 package
    • package中的源码已经完成
    • 源码可以参考这里
  • 编译流程:在 catkin_ws 目录下执行 catkin_make [make_targets] [-DCMAKE_VARIABLES=...]
    • 可通过 catkin_make install 要执行类似 make install
    • 执行完成后会生成 catkin_ws/buildcatkin_ws/devel 两个文件夹
  • 注意事项:
    • 如果 catkin_make 命令不存在,记得先 source /opt/ros/melodic/setup.bash
    • 必须在 catkin_ws 目录下执行上述命令
    • 上述命令要求源码路径在 catkin_ws/src 目录下
    • 如果有多个包且存在依赖关系,那直接运行 catkin_make 可能会出错。即,catkin_make 不会自动解析pakcage间的依赖

2.4 运行 package

  • 参考资料:
  • ROS中图的概念
    • ROS进程组成了一个点对点网络 ,也可以看成是一个计算图,计算图中有节点、消息、话题、主节点、rosout、roscore等组成部分。
    • 节点(nodes),是可执行文件
      • 由ros功能包(package)创建。即功能包CMakeLists.txt中定义的 add_executable
      • 使用ROS客户端(即C++或Python API)实现。
      • 可与其他节点通信。
      • 节点可以发布或订阅话题,也可以提供或使用服务。
    • 消息(Messages),订阅或发布话题时使用的ROS数据结构。
      • 可使用一些内置数据结构,如 String、Image。
      • 可以自己定义结构。
    • 话题(Topics),节点发布、订阅消息的位置
      • 典型的生产者、消费者模式实现
    • 主节点(Master),ROS命名服务,如帮助节点发现彼此
    • roscout:类似于ROS中的stdout/stderr
    • roscore:主节点+rosout+参数服务器
  • 通过rosrun运行节点
    • 准备:roscore 必须启动
    • 命令 rosrun [package_name] [node_name]
    • node_name 就是可执行文件的的名字
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值