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

文章目录

  • 实验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.hqwc.cn/news/452911.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

初始数据库

华子目录 什么是数据库DBMS&#xff08;数据库管理系统&#xff09;数据库系统和文件系统的区别文件系统数据库系统对比区别优缺点总结 常见数据库关系型数据库ACID原则关系型数据库的优缺点优点缺点 非关系型数据库存储方式常见的非关系型数据库非关系型数据库的优缺点优点缺点…

爱上算法:每日算法(24-2月4号)

&#x1f31f;坚持每日刷算法&#xff0c;&#x1f603;将其变为习惯&#x1f91b;让我们一起坚持吧&#x1f4aa; 文章目录 [232. 用栈实现队列](https://leetcode.cn/problems/implement-queue-using-stacks/)思路CodeJavaC 复杂度 [225. 用队列实现栈](https://leetcode.cn/…

双非本科准备秋招(16.1)—— 力扣二叉树

1、101. 对称二叉树 检查是否对称&#xff0c;其实就是检查左节点等不等于右节点&#xff0c;我们可以用递归来做。 如果左右节点都为null&#xff0c;说明肯定对称呀&#xff0c;返回true。 如果一个为null一个不为null&#xff0c;或者左右的值不相等&#xff0c;则为false。…

Node.js 包管理工具

一、概念介绍 1.1 包是什么 『包』英文单词是 package &#xff0c;代表了一组特定功能的源码集合 1.2 包管理工具 管理『包』的应用软件&#xff0c;可以对「包」进行 下载安装 &#xff0c; 更新 &#xff0c; 删除 &#xff0c; 上传 等操作。 借助包管理工具&#xff0…

ACM训练题:Fadi and LCM

首先LCM&#xff08;a&#xff0c;b&#xff09;X&#xff0c;说明a*b>X&#xff0c;当且仅当a&#xff0c;b互质时相等&#xff0c;题意要让a&#xff0c;b都尽可能小&#xff0c;最好让a*bX&#xff0c;即a&#xff0c;b互质。原因如下&#xff1a; 最小公倍数由a、b中最…

flutter go_router 官方路由(一)基本使用

1 项目中添加最新的依赖 go_router: ^13.1.0如下图所示&#xff0c;我当前使用的flutter版本为3.16.0 然后修改应用的入口函数如下&#xff1a; import package:flutter/material.dart; import package:go_router/go_router.dart;void main() {runApp(const MyApp()); }cla…

使用java -jar命令运行jar包提示“错误:找不到或无法加载主类“的问题分析

用maven把普通java项目打包成可运行的jar后&#xff0c;打开cmd用java -jar运行此jar包时报错&#xff1a; 用idea运行该项目则没有问题 。 其实原因很简单&#xff0c;我们忽略了2个细节。 java指令默认在寻找class文件的地址是通过CLASSPATH环境变量中指定的目录中寻找的。我…

vue前端+nodejs后端通信-简单demo

本文记录vue前端nodejs后端通讯最简单的方法&#xff0c;供广大网友最快速进入全栈开发。 技术架构 前端 vue axios 后端 nodejs express 一、前端部分-搭建VUE 项目 vue create Vnodenpm run serve 启动&#xff1b; 具体操作步骤&#xff0c;请自行百度&#xff0c;这里没…

【RT-DETR有效改进】利用SENetV1重构化网络结构 (ILSVRC冠军得主)

👑欢迎大家订阅本专栏,一起学习RT-DETR👑 一、本文介绍 本文给大家带来的改进机制是SENet(Squeeze-and-Excitation Networks)其是一种通过调整卷积网络中的通道关系来提升性能的网络结构。SENet并不是一个独立的网络模型,而是一个可以和现有的任何一个模型相结合…

PMP资料怎么学?PMP备考经验分享

PMP考试前大家大多都是提前备考个一两个月&#xff0c;但是有些朋友喜欢“不走寻常路”&#xff0c;并不打算去考PMP认证&#xff0c;想要单纯了解PMP&#xff0c;不管要不要考证&#xff0c;即使是仅仅学习了解一下我个人都非常支持&#xff0c;因为专业的基础的确能提高工作效…

windows10 利用DDNS-GO解析IPV6 IPV4 阿里云 腾讯云 华为云

这里写目录标题 [工具包DDNS-GO Windows 版](https://github.com/jeessy2/ddns-go/releases)创建ddns-go windows服务打开浏览器 输入127.0.0.1:9876 就可以使用ddns-go解析ipv4 或者 IPV6 了创建的服务已经在windows的服务管理里面自动启动了 工具包DDNS-GO Windows 版 创建dd…

jmeter-04创建请求

文章目录 一、发送请求-查看响应流程二、新建请求三、选择请求方式&#xff0c;填写url1.发送get请求当只有请求方式不一样的时候&#xff0c;参数都填写在参数栏里面&#xff0c;GET请求与POST请求的区别&#xff1f; 2.发送post请求2.1 application/x-www-form-urlencoded2.2…