ROS2安装及基础知识介绍

2023-05-16

ros介绍

ROS(Robot Operating System) 是一个开源的机器人操作系统,ROS系统是由大量节点组成,其中任何一个节点都可以通过发布/订阅的方式与其他节点进行通信。举个栗子,机器人上的一个位置传感器中的雷达单元就可以作为ROS的一个节点,其可以以信息流的方式发布雷达获取的信息,发布的信息可以被其他节点如导航单元、路径规划单元等获取,导航和路径规划单元等本身也是一个节点,同样以信息流的方式把各自获取的信息发布出去,供其它节点使用

ros2安装

本次是在Ubuntu 22.04系统上安装ros2的humble版

  1. 设置终端的编码格式

    sudo apt update && sudo apt install locales -y
    sudo locale-gen en_US en_US.UTF-8
    sudo update-locale LC_ALL=en_US.UTF-8 LANG=en_US.UTF-8
    export LANG=en_US.UTF-8
    
  2. 启用Universe存储库

    sudo apt install software-properties-common
    sudo add-apt-repository universe
    
  3. 添加源

    先更新软件并下载安装curl、gnupg和lsb-release

    sudo apt update && sudo apt install curl gnupg lsb-release -y
    

    获取源的密钥并保存到指定目录,只有本地有此GPG密钥才能下载安装ros2的软件

    sudo curl -sSL https://raw.githubusercontent.com/ros/rosdistro/master/ros.key -o /usr/share/keyrings/ros-archive-keyring.gpg
    

    此处遇到报错Failed to connect to raw.githubusercontent.com port 443 after 17 ms: Connection refused,解决办法如下:

    1. 访问此网址查看raw.githubusercontent.com域名对应的IP地址,查看DNS Resource Records中的信息

    2. 在终端执行命令sudo vi /etc/hosts,打开hosts文件

    3. 选择一项,将IP和域名添加到hosts文件中,如:185.199.108.133 raw.githubusercontent.com

      再次执行命令就不会报错啦

  4. 添加软件源并更新索引

    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
    
  5. 安装ros2包

    先更新系统软件

    sudo apt update && sudo apt upgrade -y
    

    安装ros2,版本是humble桌面版,此安装耗时较长,请耐心等待,若有报错基本是网络问题,请自行排查

    sudo apt install ros-humble-desktop -y
    
  6. 设置环境

    目的是让操作系统知道ros2安装到哪里了,使用source命令或.命令,加载环境信息

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

    此命令只能在当前终端生效,重开终端需要再次执行,可以将此命令添加到.bashrc文件中就不需要每次都执行啦,开机系统就能识别ros2命令

    echo "source /opt/ros/humble/setup.bash" >> ~/.bashrc
    
  7. 验证ros2安装完成

    ros2提供了C++和python的demo,在终端执行以下命令,作为发布者

    ros2 run demo_nodes_cpp talker
    

    打开另一个终端,作为监听者执行以下命令

    ros2 run demo_nodes_py listener
    

    listener能看到talker不断发布的消息,说明ros2安装成功

ros2的核心概念

  • 工作空间(Workspace):项目所在地

  • 功能包(Package):所开发的各个功能模块存放地

  • 节点(Node):机器人的工作细胞,用于创建发布者、订阅者、服务等

  • 话题(Topic):节点间传递数据的桥梁

  • 服务(Service):节点间的你问我答,由一对消息组成(请求和回复)

  • 通信接口(Interface):数据传递的标准结构

  • 参数(Parameter):机器人系统的全局字典

  • 动作(Action):完整行为的流程管理

  • 分布式通信(Distributed Communication):多计算平台的任务分配

  • DDS(Data Distribution Service):机器人的神经网络

turtlesim和rqt安装及使用

  • turtlesim和rqt介绍

    Turtlesim是用于学习ros2的轻量级模拟器,展示了ros2在基础层面上所做的工作,以便对以后使用真实的机器人或机器人仿真能做什么有所了解

    rqt是ros2的图形界面(GUI)工具,命令行中能完成的事情rqt中也都能做到,rpt提供了一种更简洁、更友好的方式来处理ros2的元素

  • turtlesim和rqt安装

    执行以下命令安装turtlesim和rqt

    sudo apt update
    sudo apt install ros-humble-turtlesim ~nros-humble-rqt* -y
    
  • 启动turrlesim

    执行下面命令会出现模拟器窗口,随机显示一个小海龟

    ros2 run turtlesim turtlesim_node
    
  • 使用turrlesim

    上一个终端不要关闭,打开一个新的终端,执行命令

    ros2 run turtlesim turtle_teleop_key
    

    然后,在此终端点击键盘上的方向键就可以让小海龟动起来啦

    以上两个终端不要关闭,再次打开一个新终端,现已打开3个终端,在新终端执行以下命令可以查看当前使用的节点、话题、服务和动作

    ros2 node list		# 查看节点列表
    ros2 topic list		# 查看话题列表
    ros2 service list	# 查看服务列表
    ros2 action list	# 查看动作列表
    
  • 启动rqt

    终端输入rqt,即可打开rqt窗口

  • 通过rqt发布话题消息

    选择菜单栏中的Plugins → Topics → Message Publisher,调用/turtle1/cmd_vel服务中的geometry_msgs/msg/Twist类型,修改线速度和角速度,然后将话题发出去,小海龟就会根据设定的值移动位置,如下图所示

  • 通过命令发布话题消息

    让小海龟运动可以使用命令行操作,命令如下,rate参数可以理解为1秒执行一次,默认也是1秒,可以添加参数--once只执行一次,否则该命令会一直执行,不停画圈

    ros2 topic pub -r 1 /turtle1/cmd_vel geometry_msgs/msg/Twist "{linear:{x: 3.0,y: 0.0,z: 0.0},angular:{x: 0.0,y: 0.0,z: 2.2}}"
    
  • 通过rqt调用/spawn服务创建小海龟

    选择菜单栏中的Plugins → Services → Service Caller,调用/spawn服务可以创建一个新的小海龟,设置小海龟出现的位置、角度和名称,点击【Call】在 turtlesim 窗口就会显示一个新的小海龟,如下图所示

  • 通过命令调用/spawn服务创建小海龟

    同样可以使用命令进行操作,命令如下

    ros2 service call /spawn turtlesim/srv/Spawn "{x: 3,y: 2,theta: 0.5,name: "test"}"
    

    小海龟名称可为空,默认的一只小海龟名称是turtle1,若为空,新增小海龟名称则为turtle2……

克隆示例项目

  1. 创建工作区

    mkdir -p ~/dev_ws/src && cd ~/dev_ws/src # 创建并进入工作区
    
  2. 将小海龟项目克隆到该工作区内

    sudo apt install git -y
    sudo git clone https://github.com/ros/ros_tutorials.git -b humble
    
  3. 解决依赖关系

    cd .. # 不要停留在src目录下,先返回到dev_ws目录
    sudo apt install python3-rosdep2 -y	# 安装python3-rosdep2
    rosdep update	# 初始化rosdep
    

    遇到报ERROR: unable to process source [https://raw.githubusercontent.com/ros/rosdistro/master/rosdep/osx-homebrew.yaml],还是网络原因造成的,解决办法如下:

    1. 连接手机热点

    2. 在终端执行命令

      sudo vim /etc/ros/rosdep/sources.list.d/20-default.list
      
    3. 在原url前加上https://ghproxy.com/,如下所示

      yaml https://ghproxy.com/https://raw.githubusercontent.com/ros/rosdistro/master/rosdep/osx-homebrew.yaml osx
      yaml https://ghproxy.com/https://raw.githubusercontent.com/ros/rosdistro/master/rosdep/base.yaml
      yaml https://ghproxy.com/https://raw.githubusercontent.com/ros/rosdistro/master/rosdep/python.yaml
      yaml https://ghproxy.com/https://raw.githubusercontent.com/ros/rosdistro/master/rosdep/ruby.yaml
      gbpdistro https://ghproxy.com/https://raw.githubusercontent.com/ros/rosdistro/master/releases/fuerte.yaml fuerte
      
    4. 然后执行以下命令就可以初始化完成啦!若还是报错,请自行尝试网上其它办法

      sudo apt-get update
      rosdep update
      

    最后执行解决依赖的命令

    rosdep install -i --from-path src --rosdistro humble -y
    

    出现All required rosdeps installed successfully即表示完成

colcon构建

colcon是通用构建工具,ros系统虽不推荐但官方文档还是使用了此工具,下面也以此做演示吧,有关构建工具更多信息请查看此文章

安装colcon

sudo apt install python3-colcon-common-extensions

执行以下命令构建工作区中所有的包

colcon build

因为上文已经配置自动加载ros2的环境信息,现需要运行本项目,需在此基础上加载本项目所需环境,构建完成后,打开一个新的终端,执行以下命令

source ~/dev_ws/install/local_setup.sh

此时执行以下命令,启动的就是本地的小海龟

ros2 run turtlesim turtlesim_node

可以通过修改setWindowTitle("TurtleSim")中的窗口名进行验证执行以下命令,修改第52行的窗口名称

vim ~/dev_ws/src/ros_tutorials/turtlesim/src/turtle_frame.cpp

然后重新构建包

colcon build 

再次执行以下命令可以看到窗口名称已修改

ros2 run turtlesim turtlesim_node

ros2常用命令

关于操作命令还是要多使用tab键自动补全功能和-h查看帮助文档,以下命令关于可选参数就不介绍了,多查看帮助文档吧!

若没有自动补全功能,是缺少python3-argcomplete安装包导致,执行以下命令后重启终端即可解决

sudo apt-get install python3-argcomplete
含义命令
创建功能包ros2 pkg create --build-type ament_python <package_name>
查看功能包列表ros2 pkg list
查看包内可执行文件列表ros2 pkg executables <package_name>
运行包内的可执行文件ros2 run <package_name> <executable_name>
查看当前活动的节点列表ros2 node list
查看节点详细信息ros2 node info <node_name>
列出当前可使用的主题列表ros2 topic list
查看话题的消息类型ros2 topic type <topic_name>
列出当前可使用的主题列表和类型ros2 topic list -t
查看话题消息类型、发布者和订阅者数量ros2 topic info <topic_name>
根据消息类型查找相关话题ros2 topic find <message_type>
根据header中的时间戳计算消息延迟ros2 topic delay <topic_name>
实时显示当前话题平均发布频率ros2 topic hz <topic_name>
实时显示当前话题的带宽ros2 topic bw <topic_name>
在控制台实时显示话题消息ros2 topic echo <topic_name>
通过命令发布话题消息ros2 topic pub <topic_name> <message_type> <message_content>
查看所有的服务ros2 service list
查看服务类型ros2 service type <service_name>
输出所有的服务及类型ros2 service list -t
列出指定类型的所有服务ros2 service find <service_type>
调用服务ros2 service call <service_name> <service_type>
查看所有动作ros2 action list
查看动作信息ros2 action info <action_name>
查看所有动作和类型ros2 action list -t
发动动作目标ros2 action send_goal <action_name> <action_type> <goal>
查看可用插件的信息ros2 bag list <plugin_type>
记录指定话题的数据ros2 bag record <topic_name>
记录多个话题的数据并自定义文件名ros2 bag record -o <bag_file> <topic_name> <topic_name>……
查看记录信息ros2 bag info <bag_file>
回放记录信息ros2 bag play <bag_file>
查看所有的参数ros2 param list
查看指定参数的值ros2 param get <node_name> <parameter_name>
设置指定参数的值ros2 param set <node_name> <parameter_name> <value>
查看参数详情ros2 param describe <node_name> <parameter_name>
将节点参数转存到yaml文件中ros2 param dump <node_name> --output-dir <dir_name>
加载节点的参数文件ros2 param load <node_name> < parameter_file>
删除参数ros2 param delete <node_name> <parameter_name>
分类显示所有的接口ros2 interface list
查看提供接口的包列表ros2 interface packages
查看包内的接口ros2 interface package <package_name>
查看指定接口详情ros2 interface show <interface_name>
查看指定接口原型ros2 interface proto <interface_name>
通过launch文件一次运行多个节点ros2 launch <package_name> <launch_arguments>

更多功能及操作请查看官方文档吧!

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

ROS2安装及基础知识介绍 的相关文章

随机推荐

  • Python的多线程爬虫详解

    多线程使用流程 Python 提供了两个支持多线程的模块 xff0c 分别是 thread 和 threading 其中 thread 模块偏底层 xff0c 它相比于 threading 模块功能有限 xff0c 因此推荐大家使用 thr
  • MAVROS started. MY ID 1.240, TARGET ID 1.1

    运行Mavros未报错 xff0c 但是启动不成功 xff1a INFO Known MAVLink dialects common ardupilotmega ASLUAV autoquad icarous matrixpilot pap
  • 树莓派和51单片机通信问题解决

    1 关于树莓派的通信 xff0c 网上教程也是很多的 xff0c 我们都知道发的数据是bytes类型的二进制数据 xff0c 到51板接收是需要数据类型转换的然后进行判断 xff0c 如果没有led显示屏会比较麻烦 2 树莓派部分查看这个教
  • OpenMV入门介绍

    目录 一 OpenMV是什么二 OpenART mini与OpenMV对比三 图像处理背景知识1 像素和分辨率2 帧率3 RGB三原色4 LAB颜色空间 四 OpenMV图像处理方法1 感光元件自动增益 白平衡 曝光窗口ROI 2 画图画线
  • Lock和RLock的区别

    lock和rlock都可以用来同步进程或者线程 xff0c 它们之间的区别在于rlock是可重入的 xff0c 也就是一个线程可以获取多次 xff0c 只有在release相同次数时 xff0c rlock才会有locked状态转换为unl
  • 【Gitee】关于远程代码的拉取、修改和重新上传

    一 关于Forked forked的意思是从别人的代码库中复制一份到你自己的代码库 xff0c 与普通的复制不同 xff0c fork包含了原有库中的所有提交记录 xff0c fork后这个代码库是完全独立的 xff0c 属于你自己 xff
  • 基于视频采集卡驱动的错误修改CX26828

    基于视频采集卡驱动的错误修改CX26828 1 设置root密码 command xff1a sudo passwd root 2 查看系统状态 输入命令 xff1a lsmod root 64 ubuntu home yu lsmod i
  • Sqlite远程连接数据

    Sqlite远程连接数据 1 连接本地数据库 QSqlDatabase db 61 QSqlDatabase addDatabase 34 QSQLITE 34 db setDatabaseName 34 personnel db 34 d
  • 基于Tiny210开发板视频显示

    基于Tiny210开发板视频显示 1 写基于V4L2编程 61 61 61 61 61 61 61 61 videodevice h文件 61 61 61 61 61 61 61 61 61 ifndef VIDEODEVICE H def
  • 纯C++去雾算法

    去雾算法 前言 xff1a 经过不断的改进研究 xff0c 该算法终于稳定 xff0c 高效的问世了 xff01 经过研究使该算法适应大雾环境 xff0c 对该算法的内存优化 xff0c 能够实时的高效的运行 一 实时视频 xff1a 二
  • 致院长的一封信

    致院长的一封信 行了一路 xff0c 梦了一路 xff0c 念了一路 xff0c 伤了一路 xff0c 青春的此岸 xff0c 我眉心微蹙 xff0c 聆听清风诉说着经年的过往 xff1b 走了一路 xff0c 赏了一路 xff0c 听了一
  • LINUX字符设备驱动程序实例

    我是通过UBUNTU10 10测试该驱动程序的 xff0c 系统内核为linux 2 6 35 22 可使用uname r 命令来查看当前内核的版本号 下载安装LINUX内核 xff0c 需要下载和本机一样版本的内核源码 1 xff0c 安
  • c++多态总结

    今天来总结一些c 43 43 中 xff0c 有关多态的知识 多态 xff1a 多态可以简单地概括为 一个接口 xff0c 多种方法 xff0c 程序在运行时才决定调用的函数 xff0c 它是面向对象编程领域的核心概念 接下来 xff0c
  • 600词汇过四级

    600 词汇过四级 A 1 abandon vt 抛弃 xff0c 放弃 abandon oneself to despair 陷于绝望 xff1b abandon oneself to failures 自暴自弃 2 abrupt adj
  • 华清远见c语言学习笔记四

    test c Created on Jun 29 2012 Author 孙旭 华清远见实验室 1 include lt stdio h gt include lt stdlib h gt include lt string h gt in
  • 华清远见c语言学习笔记六

    test c Created on Jun 29 2012 Author 孙旭 华清远见实验室 1 include lt stdio h gt 找出一个字符串中的数字 include lt string h gt int main char
  • c++示例代码-友元

    一 友元函数 include lt iostream h gt include lt math h gt class Point Point类声明 public 外部接口 Point int xx 61 0 int yy 61 0 X 61
  • C/C++空指针总结

    在C中 在C中 xff0c 使用NULL表示空指针 xff0c 实际上 xff0c NULL被定义为 xff1a define NULL void 0 其中 void 0 表示对 0 进行强制转换 xff0c 转换为一个void类型的指针
  • Windows11镜像下载及安装

    现在微软已正式推出Windows 11预览版系统 xff0c 目前最新系统版本是22000 71 xff0c 正式版可能会在10月份推出 xff0c 届时拥有正版Windows 10系统的就可以通过Windows Update工具免费在线升
  • ROS2安装及基础知识介绍

    ros介绍 ROS xff08 Robot Operating System xff09 是一个开源的机器人操作系统 xff0c ROS系统是由大量节点组成 xff0c 其中任何一个节点都可以通过发布 订阅的方式与其他节点进行通信 举个栗子