【ROS机器人系统】实验1 熟悉ROS操作系统、熟悉ROS通信架构

news2024/11/27 17:46:31

文章目录

  • 实验1 熟悉ROS操作系统、熟悉ROS通信架构
  • 1、实验目的
  • 2、实验设备
  • 3、实验内容
    • 3.1 安装ROS
    • 3.2 ROS常用指令以及小海龟示例
      • ·roscore命令
      • ·rosrun命令
      • ·rosnode 命令
      • ·roscd 命令
      • ·rostopic 命令
    • 动手实现1:
      • ·rosservice 命令
      • ·roslaunch 命令
    • 动手实现2:
    • 动手实现3:
    • 3.3 了解ROS节点间的通信过程:
      • ·使用rqt_graph查看ROS节点关系
      • ·使用rostopic查看话题信息
    • 动手实现4:
    • 3.4编写节点实现话题通信
      • ·创建功能包
      • ·编写发布者节点(c++版本)
      • ·编写接收者节点(c++版本)
      • ·构建节点
    • 动手实现5:
    • 动手实现6:
    • 动手实现7:
      • (1)创建beginner_tutorials包:
      • (2)创建srv
      • (3)使用rossrv
      • (4)msg和srv的一般步骤
      • (5)编写服务节点
      • (6)编写客户端节点
      • (7)构建节点
      • (8)检验简单的服务和客户端

实验1 熟悉ROS操作系统、熟悉ROS通信架构

1、实验目的

掌握ROS的安装以及常用命令,具体内容如下:

  1. 学会在ubuntu18.04系统下安装ROS。
    1. 了解ROS基础命令。
    2. 运行海龟示例。
    3. 了解ROS节点间的话题通信过程,编写节点实现话题通信。
    4. 了解ROS节点间的服务通信过程,编写节点实现服务通信。

2、实验设备

硬件环境:windows 10

系统环境:Ubuntu20.04、ROS noetic

3、实验内容

3.1 安装ROS

1、添加ROS软件源

sudo sh -c '. /etc/lsb-release && echo "deb http://mirrors.ustc.edu.cn/ros/ubuntu/ \$DISTRIB_CODENAME main" \> /etc/apt/sources.list.d/ros-latest.list'

2、添加密钥

sudo apt-key adv --keyserver 'hkp://keyserver.ubuntu.com:80' --recv-key C1CF6E31E6BADE8868B172B4F42ED6FBAB17C654

3、更新软件源

sudo apt update

4、安装ROS

sudo apt install ros-noetic-desktop-full

过程:

5、 初始化rosdep

输入以下的命令,先对其初始化一下

sudo rosdep init

6、设置环境变量

(1)ubuntu是20.04版本的,对应的是noetic。

echo “source /opt/ros/noetic/setup.bash” >> ~/.bashrc

(2)输入以下命令,运行该脚本让环境变量生效

source ~/.bashrc

7、 安装rosinstall

输入以下命令:

sudo apt install python3-rosinstall python3-rosinstall-generator python3-wstool

9、 验证ROS是否安装成功

roscore

3.2 ROS常用指令以及小海龟示例

·roscore命令

ROS的使用需要一个主节点master,通过执行roscore命令即可启动一个主节点。

·rosrun命令

然后启动一下小海龟的仿真器,按ctrl+alt+t打开一个新的终端,输入以下命令

rosrun turtlesim turtlesim_node

按ctrl+alt+t再打开一个新的终端,输入以下命令

rosrun turtlesim turtle_teleop_key

此时将光标聚焦于该窗口,这时候按键盘上的↑↓←→键就可以控制小海龟移动了。

·rosnode 命令

执行rosnode list命令,即可查看当前运行中的节点。如下图所示。

·roscd 命令

通过使用roscd命令定位到该包所在的路径。使用方法为roscd 包名,比如定位turtlesim包

·rostopic 命令

可以通过rostopic命令当前节点间存在的通信话题

rostopic list

动手实现1:

通过手动给/turtle1/cmd_vel话题发送消息,控制小海龟移动。

rostopic pub /turtle1/cmd_vel geometry_msgs/Twist "linear:

x: 1.0

y: 0.0

z: 0.0

angular:

x: 0.0

y: 0.0

z: 0.0"

让这个指令每秒发送10次

rostopic pub -r 10 /turtle1/cmd_vel geometry_msgs/Twist "linear:

x: 1.0

y: 0.0

z: 0.0

angular:

x: 0.0

y: 0.0

z: 0.0"

控制转弯:

rostopic pub -1 /turtle1/cmd_vel geometry_msgs/Twist – ‘[2.0, 0.0, 0.0]’ ‘[0.0, 0.0, 1.8]’

控制画圈:

rostopic pub /turtle1/cmd_vel geometry_msgs/Twist -r 1 – ‘[2.0, 0.0, 0.0]’ ‘[0.0, 0.0, -1.8]’

·rosservice 命令

使用rosservice list命令即可查看当前运行的服务,如下图所示。

·roslaunch 命令

与前面rosrun命令启动一个节点相对比,roslaunch可以一次启动多个节点

roslaunch gazebo_ros empty_world.launch

动手实现2:

当使用rosluanch启动节点后,再运行roscore会发生什么,为什么?

roscore是roslaunch工具的一个专业化工具,用于启动“核心”ROS 系统。如果 roslaunch 检测到它尚未运行(除非提供了 --wait 参数),它将自动启动 roscore。也就是说使用rosluanch启动节点的时候已经自动启动了roscore。

动手实现3:

使用rosed命令或者roscd命令快速定位到empty_world.launch所在位置并打开查看内容

3.3 了解ROS节点间的通信过程:

·使用rqt_graph查看ROS节点关系

rqt_graph

·使用rostopic查看话题信息

rostopic info turtle1/cmd_vel

geometry_msgs/Twist,话题的发布者为/teleop_turtle节点,话题的订阅者有/turtlesim节点。

动手实现4:

利用所学知识,查看turtle1/cmd_vel话题的消息类型Twist的内容是什么?

rosmsg show geometry_msgs/Twist

3.4编写节点实现话题通信

·创建功能包

首先创建一个工作空间,并使用catkin_make编译。

然后创建名为test的功能包,为其加上std_msgs、rospy、roscpp依赖。

·编写发布者节点(c++版本)

进入该包内,创建c++文件并编写

mkdir -p test/src

cd test/src

gedit talker.cpp

代码如下

·编写接收者节点(c++版本)

gedit listener.cpp

代码如下

·构建节点

打开test包内的CMakeLists.txt,

修改内容:

找到

// 建立talker节点

// 建立listener节点

保存文件,并编译

cd ~/catkin_ws

catkin_make

将该工作空间添加到.bashrc文件中,让系统能够知道我们所写的功能包在哪。

gedit ~/.bashrc

添加如下内容

source /home/xinyang/catkin_ws/devel/setup.bash

保存后重新打开终端,即可运行我们写的两个节点。

首先启动roscore

启动talker节点

rosrun test talker

启动listener节点

rosrun test listener

此时,两个节点就建立了通信,如下图所示

动手实现5:

利用所学知识,编写launch文件,通过roslaunch同时启动talker与listener节点。

cd ~/catkin_ws/src

catkin_create_pkg test_launch

gedit test.launch

catkin_make

·编写Python版本话题通信

与C++文件不同,python文件一般存储在scripts文件夹内,接下来编写talker.py

cd test

mkdir scripts

cd scripts

gedit talker.py

填入如下代码

编写listener.py

gedit listener.py

代码如下

修改CmakeLists.txt

保存退出,此时还需为python文件添加执行权限

cd scripts

chmod +x listener.py

chmod +x talker.py

回到catkin工作空间,然后运行catkin_make:

cd ~/catkin_ws

catkin_make

此时,即可运行,首先运行roscore,然后到scripts目录下分别执行

rosrun test talker.py

rosrun test listener.py

此时发送与接收的消息为当前的系统时间。

动手实现6:

当话题通信时,使用学习的命令,查看话题的信息,比如rosnode、rostopic、rosservice。

动手实现7:

模仿话题通信方式,实现服务通信过程。

实现目标:用C++编写服务和客户端节点。接收两个整数,并返回它们的和。

(1)创建beginner_tutorials包:

catkin_create_pkg beginner_tutorials std_msgs rospy roscpp

将当前目录切换到之前创建的beginner_tutorials包中:

roscd beginner_tutorials

(2)创建srv

srv(服务):一个srv文件描述一个服务。它由两部分组成:请求(request)和响应(response)。srv文件则存放在srv目录下

用之前创建的包再来创建服务:mkdir srv

从rospy_tutorials包中复制一个服务:

roscp rospy_tutorials AddTwoInts.srv srv/AddTwoInts.srv

打开package.xml,取消以下两行的注释。

<build_depend>message_generation</build_depend> <exec_depend>message_runtime</exec_depend>

在CMakeLists.txt文件中,直接将message_generation添加到COMPONENTS列表中即可,如下所示:

此外,在CMakeLists.txt文件中,修改服务字段,因此请看上面描述的所需附加依赖项。删除#符号来取消注释,然后将Service*.srv替换为你的.srv文件名,就像下边这样:

(3)使用rossrv

通过rossrv show命令看看ROS能否识别它。

rossrv show beginner_tutorials/AddTwoInts

(4)msg和srv的一般步骤

取消注释,然后添加任意消息用到的包含.msg文件的软件包(本例中为std_msgs),如下所示:

已经创建了一些新消息,所以需要重新make一下软件包: catkin_make

(5)编写服务节点

创建简单的服务(Service)节点add_two_ints_server,该节点将接收两个整数,并返回它们的和。

在beginner_tutorials包中创建src/add_two_ints_server.cpp文件并粘贴以下内容进去:

(6)编写客户端节点

在beginner_tutorials包中创建src/add_two_ints_client.cpp文件并粘贴以下内容进去:

(7)构建节点

再来编辑一下beginner_tutorials里面的CMakeLists.txt文件,文件位于~/catkin_ws/src/beginner_tutorials/CMakeLists.txt,并将下面的代码添加在文件末尾:

在catkin工作空间下

cd ~/catkin_ws

catkin_make

(8)检验简单的服务和客户端

运行服务

rosrun beginner_tutorials add_two_ints_server

运行客户端(并附带必要的参数:)

rosrun beginner_tutorials add_two_ints_client 1 3

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1432964.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Android Studio 安装Flutter插件但是没法创建项目

Android Studio 安装Flutter插件但是没法创建项目 如果你在Android Studio已经安装了Dart、Flutter插件&#xff0c;但是不能创建Flutter项目。 原因是因为Android Studio的版本更新&#xff0c;Android APK Support这个插件没被选中。 一旦勾选这个插件之后&#xff0c;就能…

leetcode 3.无重复字符的最长字串(滑动窗口) (C++)DAY2

文章目录 1.题目示例提示 2.解答思路3.实现代码结果 4.总结 1.题目 给定一个字符串 s &#xff0c;请你找出其中不含有重复字符的 最长子串 的长度。 示例 示例 1: 输入: s “abcabcbb” 输出: 3 解释: 因为无重复字符的最长子串是 “abc”&#xff0c;所以其长度为 3。 示…

天猫数据分析:2023年坚果炒货市场年销额超71亿,混合坚果成多数消费者首选

近年来&#xff0c;随着人们生活水平和健康意识的提升&#xff0c;在休闲零食市场中&#xff0c;消费者们也越来越关注食品的营养价值&#xff0c;消费者这一消费偏好的转变也为坚果炒货食品行业带来了发展契机。 整体来看&#xff0c;坚果炒货市场的体量较大。根据鲸参谋电商…

【Linux】EXT2文件系统 | 磁盘分区块组 | inode

文章目录 一、前言二、EXT2文件系统 - 逻辑存储结构&#x1f4be;分区&#xff08;Partition&#xff09;分区的概念每个分区的内容Linux下查询磁盘分区 &#x1f4be;块组&#xff08;Block Group&#xff09;磁盘格式化每个块组的内容1. Superblock&#xff08;超级块&#x…

5.0 HDFS 集群服务建立教程

HDFS 集群是建立在 Hadoop 集群之上的&#xff0c;由于 HDFS 是 Hadoop 最主要的守护进程&#xff0c;所以 HDFS 集群的配置过程是 Hadoop 集群配置过程的代表。 使用 Docker 可以更加方便地、高效地构建出一个集群环境。 每台计算机中的配置 Hadoop 如何配置集群、不同的计…

vue2 el-table新增行内删除行内(两种写法)里面第一个是树组件,第二个是数字组件,第一个数组件只能勾选最后一个节点

第一种 <template><div class"time_table"><div style"margin-bottom: 10px"><el-button click"addRowFn">新增</el-button></div><el-form ref"costForm" :model"formData">&l…

云原生数据库 GaiaDB 的核心技术演进和解析

导读 在越来越强调云原生的环境下&#xff0c;存算分离作为一种新的架构理念&#xff0c;已经是大势所趋。新的技术架构带来新的问题和挑战&#xff0c;百度智能云的云原生数据库 GaiaDB 采用 Quorum 分布式协议、高性能网络、高可靠分布式存储引擎等技术实现更高的性能和可用性…

[开源]GPT Boss – 用图形化的方式部署您的私人GPT镜像网站

在这个以数据和智能为核心的时代&#xff0c;掌握最新的技术趋势是每个企业和个人都需要做到的。这就是GPT Boss存在的意义&#xff1a;一个基于OpenAI技术的一站式GPT应用解决方案。 自2022年起&#xff0c;GPT Boss团队便投身于人工智能领域&#xff0c;将OpenAI的GPT模型带给…

Bard 最新更新:全球开放访问Gemini Pro并生成图片

深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同&#xff0c;从行业内部的深度分析和实用指南中受益。不要错过这个机会&#xff0c;成为AI领域的领跑者。点击订阅&#xff0c;与未来同行&#xff01; 订阅&#xff1a;https://rengongzhineng.io/ 。 今…

2024/2/4学习记录

微信小程序 网络数据请求 出于安全性方面的考虑&#xff0c;小程序官方对数据接口得请求做出了俩个限制 只能对 https 类型的接口必须将接口的域名添加到信任列表中 需要去这里设置 域名只支持 https 协议域名不能使用 ip 地址 或者localhost域名必须经过 ICP 备案 服务器域…

在 iOS 上安装自定企业级应用

了解如何安装您的组织创建的自定应用并为其建立信任。 本文适用于学校、企业或其他组织的系统管理员。 您的组织可以使用 Apple Developer Enterprise Program 创建和分发企业专用的 iOS 应用&#xff0c;以供内部使用。您必须先针对这些应用建立信任后&#xff0c;才能将其打…

Excel没有内置统计字数功能,但可以用一些变通的方法

是否需要计算Excel工作簿中某个单元格或单元格范围内的单词数? 出于多种原因,你可能需要计算文本数据中的字数。也许你有逗号分隔的列表,需要计算每个列表中的项目数。 不幸的是,Excel没有内置的单词计数方法。但是有一些聪明的方法可以得到你需要的结果。 这篇文章将向…

【开源】基于JAVA+Vue+SpringBoot的软件学院思政案例库系统

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 系统管理员2.2 普通教师 三、系统展示四、核心代码4.1 查询思政案例4.2 审核思政案例4.3 查询思政课程4.4 思政案例点赞4.5 新增思政案例评语 五、免责说明 一、摘要 1.1 项目介绍 基于JAVAVueSpringBootMySQL的软件学…

文心一言 VS 讯飞星火 VS chatgpt (194)-- 算法导论14.3 2题

二、用go语言&#xff0c;改写 INTERVAL-SEARCH 的代码&#xff0c;使得当所有区间都是开区间时&#xff0c;它也能正确地工作。 文心一言&#xff0c;代码正常运行&#xff1a; 在Go语言中&#xff0c;处理开区间&#xff08;open intervals&#xff09;时&#xff0c;我们需…

Linux的库文件

概述&#xff1a; 库文件一般就是编译好的二进制文件&#xff0c;用于在链接阶段同目标代码一块生成可执行文件&#xff0c;或者运行可执行文件的时候被加载&#xff0c;以遍调用库文件中的某段代码。 动态链接都是索引的.so文件&#xff0c;静态链接都是压缩打包的.a文件。 …

配置visualsvn提交后自动邮件通知

参考&#xff1a; https://blog.csdn.net/wiker_yong/article/details/10334967 # -*- coding: utf-8 -*- import sys import os import smtplib from email.mime.text import MIMEText from email.header import Headermail_host smtp.163.com #发送邮件的smtp地址 mail_us…

【RPA】什么是RPA

一、什么是RPA? RPA&#xff0c;全称机器人流程自动化&#xff0c;是一种利用机器人技术实现工作信息与业务交互自动化的过程。它能够按照预先设计的流程&#xff0c;高效地处理大量的工作信息与业务交互&#xff0c;极大地节约了人工成本。如今&#xff0c;RPA已成为智能化软…

26.云原生ArgoCD高级之ApplicationSet

云原生专栏大纲 文章目录 ApplicationSet介绍ApplicationSet 特性ApplicationSet 安装ApplicationSet 工作原理ApplicationSet 生成器列表类型生成器集群生成器基础使用方法Label Selector 指定集群Values 字段传递额外的参数 git生成器git目录生成参数排除目录git文件生成器矩…

zabbix server/agent源码编译成rpm包(通用版-小白教程)

前言 工作环境需要用到很多信创的操作系统&#xff0c;zabbix agent2的官方没有现成的包可用&#xff0c;网上巴拉了一下找到zabbix agent2通用版编译成rpm包的方法 思路&#xff1a;假如当你有一批ky10_x86的机器需要配套的zabbix agent的rpm包&#xff0c;那就找一台ky10_x…

6个国内可用的chat大模型

文心一言 - 一款适合中国人使用的AI智能助理&#xff0c;能够帮助用户进行对话、生成内容等工作&#xff0c;提高工作效率和创作水平 文心一言 文心一言 App 是一款适合中国人的 AI 智能助理&#xff0c;它的功能点主要包括&#xff1a; 工作生活助理&#xff1a;该应用通过简…