当前位置:网站首页>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 listenerlistener能看到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> |
更多功能及操作请查看官方文档吧!
边栏推荐
- Leetcode daily question (971. flip binary tree to match preorder traversal)
- mysql的基础命令
- Office-DOC加载宏-上线CS
- Delete external table source data
- 英语论文翻译成中文字数变化
- 国产游戏国际化离不开专业的翻译公司
- Successfully solved typeerror: data type 'category' not understood
- AttributeError: Can‘t get attribute ‘SPPF‘ on <module ‘models.common‘ from ‘/home/yolov5/models/comm
- Day 245/300 JS forEach 多层嵌套后数据无法更新到对象中
- 我的创作纪念日
猜你喜欢

MySQL5.72. MSI installation failed

LeetCode 739. Daily temperature

Biomedical English contract translation, characteristics of Vocabulary Translation

CS passed (cdn+ certificate) PowerShell online detailed version
![[web security] nodejs prototype chain pollution analysis](/img/b6/8eddc9cbe343f2439da92bf342b0dc.jpg)
[web security] nodejs prototype chain pollution analysis

Classification des verbes reconstruits grammaticalement - - English Rabbit Learning notes (2)

How effective is the Chinese-English translation of international economic and trade contracts

ECS accessKey key disclosure and utilization

Oscp raven2 target penetration process

翻译公司证件盖章的价格是多少
随机推荐
Day 246/300 ssh连接提示“REMOTE HOST IDENTIFICATION HAS CHANGED! ”
Successfully solved typeerror: data type 'category' not understood
Day 248/300 关于毕业生如何找工作的思考
SSO process analysis
生物医学英文合同翻译,关于词汇翻译的特点
英语论文翻译成中文字数变化
My seven years with NLP
[Yu Yue education] flower cultivation reference materials of Weifang Vocational College
What are the commonly used English words and sentences about COVID-19?
My creation anniversary
Engineering organisms containing artificial metalloenzymes perform unnatural biosynthesis
Private cloud disk deployment
Monotonic stack
成功解决TypeError: data type ‘category‘ not understood
Machine learning plant leaf recognition
Suspended else
In English translation of papers, how to do a good translation?
Fledgling Xiao Li's 103rd blog CC2530 resource introduction
云服务器 AccessKey 密钥泄露利用
端午节快乐Wish Dragon Boat Festival is happy
