当前位置:网站首页>ROS2安装及基础知识介绍
ROS2安装及基础知识介绍
2022-07-06 06:35:00 【小白典】
ros介绍
ROS(Robot Operating System) 是一个开源的机器人操作系统,ROS系统是由大量节点组成,其中任何一个节点都可以通过发布/订阅的方式与其他节点进行通信。举个栗子,机器人上的一个位置传感器中的雷达单元就可以作为ROS的一个节点,其可以以信息流的方式发布雷达获取的信息,发布的信息可以被其他节点如导航单元、路径规划单元等获取,导航和路径规划单元等本身也是一个节点,同样以信息流的方式把各自获取的信息发布出去,供其它节点使用
ros2安装
本次是在Ubuntu 22.04系统上安装ros2的humble版
设置终端的编码格式
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
启用Universe存储库
sudo apt install software-properties-common sudo add-apt-repository universe
添加源
先更新软件并下载安装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
,解决办法如下:访问此网址查看raw.githubusercontent.com域名对应的IP地址,查看DNS Resource Records中的信息
在终端执行命令
sudo vi /etc/hosts
,打开hosts文件选择一项,将IP和域名添加到hosts文件中,如:
185.199.108.133 raw.githubusercontent.com
再次执行命令就不会报错啦
添加软件源并更新索引
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
安装ros2包
先更新系统软件
sudo apt update && sudo apt upgrade -y
安装ros2,版本是humble桌面版,此安装耗时较长,请耐心等待,若有报错基本是网络问题,请自行排查
sudo apt install ros-humble-desktop -y
设置环境
目的是让操作系统知道ros2安装到哪里了,使用
source
命令或.
命令,加载环境信息source /opt/ros/humble/setup.bash
或. /opt/ros/humble/setup.bash
此命令只能在当前终端生效,重开终端需要再次执行,可以将此命令添加到
.bashrc
文件中就不需要每次都执行啦,开机系统就能识别ros2
命令echo "source /opt/ros/humble/setup.bash" >> ~/.bashrc
验证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
……
克隆示例项目
创建工作区
mkdir -p ~/dev_ws/src && cd ~/dev_ws/src # 创建并进入工作区
将小海龟项目克隆到该工作区内
sudo apt install git -y sudo git clone https://github.com/ros/ros_tutorials.git -b humble
解决依赖关系
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]
,还是网络原因造成的,解决办法如下:连接手机热点
在终端执行命令
sudo vim /etc/ros/rosdep/sources.list.d/20-default.list
在原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
然后执行以下命令就可以初始化完成啦!若还是报错,请自行尝试网上其它办法
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> |
更多功能及操作请查看官方文档吧!
边栏推荐
- 生物医学英文合同翻译,关于词汇翻译的特点
- Reflex WMS中阶系列3:显示已发货可换组
- Distributed system basic (V) protocol (I)
- Difference between backtracking and recursion
- In English translation of papers, how to do a good translation?
- 红蓝对抗之流量加密(Openssl加密传输、MSF流量加密、CS修改profile进行流量加密)
- Machine learning plant leaf recognition
- 26岁从财务转行软件测试,4年沉淀我已经是25k的测开工程师...
- Erreur de type résolue avec succès: type de données « catégorie» non sous - jacente
- [English] Grammar remodeling: the core framework of English Learning -- English rabbit learning notes (1)
猜你喜欢
ECS accessKey key disclosure and utilization
In English translation of papers, how to do a good translation?
万丈高楼平地起,每个API皆根基
SQL Server manager studio(SSMS)安装教程
Engineering organisms containing artificial metalloenzymes perform unnatural biosynthesis
Bitcoinwin (BCW): 借贷平台Celsius隐瞒亏损3.5万枚ETH 或资不抵债
电子书-CHM-上线CS
金融德语翻译,北京专业的翻译公司
How effective is the Chinese-English translation of international economic and trade contracts
【刷题】怎么样才能正确的迎接面试?
随机推荐
The internationalization of domestic games is inseparable from professional translation companies
电子书-CHM-上线CS
Number of query fields
Monotonic stack
Leetcode daily question (1870. minimum speed to arrive on time)
万丈高楼平地起,每个API皆根基
金融德语翻译,北京专业的翻译公司
Engineering organisms containing artificial metalloenzymes perform unnatural biosynthesis
Summary of leetcode's dynamic programming 4
Day 248/300 关于毕业生如何找工作的思考
Introduction and underlying analysis of regular expressions
Cobalt strike feature modification
UniPro甘特图“初体验”:关注细节背后的多场景探索
ML之shap:基于adult人口普查收入二分类预测数据集(预测年收入是否超过50k)利用Shap值对XGBoost模型实现可解释性案例之详细攻略
Fledgling Xiao Li's 103rd blog CC2530 resource introduction
My daily learning records / learning methods
MySQL5.72. MSI installation failed
接口自动化测试实践指导(上):接口自动化需要做哪些准备工作
ECS accessKey key disclosure and utilization
【刷题】怎么样才能正确的迎接面试?