ROS介绍以及常用指令

2023-05-16

ROS

1.什么是ros

ROS 的雏形诞生:

斯坦福大学人工智能实验室的STAIR 机器人项目这个项目希望完成一个服务机器人原型,在视觉的辅助下,可以在复杂环境中运动,还可以通过机械臂操控环境中的物体。

STAIR 机器人配备了一个运动底盘,一个小型机械臂,立体摄像头、激光雷达。

摩根·奎格利(Morgan Quigley)在开发中意识到,各种功能集成在一个机器人上非常不容易,因此那时他就考虑并采用了“分布式”的方式来连接不同的模块。并将这一概念成功应用到机器人软件系统中,取名为Switchyard。

ROS 本尊诞生:

摩根·奎格利的导师吴恩达,帮助柳树车库机器人公司(Willow Garage)开发PR2 机器人

和软件系统,摩根·奎格利则利用在STAIR 项目中积累的经验,成为软件开发框架的负责人。STAIR 项目的软件系统Switchyard 则演变成后来ROS。

Robot Operating System 机器人操作系统

ROS 不是传统意义上的操作系统,不是用于进程管理和调度,而是构建在其它操作系统之上的一种结构化的通讯层;ROS 的主要目标是为机器人研究和开发提供代码复用的支持。

2.ros通讯结构

看一张图它从下往上分别分成了OS 层,中间层,应用层。

OS 层:OS 层是操作系统层也就是我们现在使用的ubuntu,它提供了操作系统这一层的相关东西,对我们ROS 开发来说不需要过多了解。

中间层:这里有TCPROS/UDPROS、Nodelet API、ClientLibrary。

TCPROS/UDPROS 是基于TCP、IP 协议做的二次封装取名为TCPROS 和UDPROS;

Nodelet API 为了弥补TCPROS/UDPROS 使用中的一些不足它是使用一种共享内存的方法而不是网络传输的实现一些数据共享;

ClientLibrary 是客户端的库,这个库就是指把UDPROS 和TCPROS 再继续进行封装成了一些ROS 的具体通信实现方法例如我们后面要提到的话题、服务等等;

应用层:应用层的最左边是一个Master,Master 是跟中间层一起框起来,上面标注了一个Ros。这是因为Master 节点是每一个Ros 进行中必须要有的并且只能唯一有的所以说Master 节点也是Ros 官方提供的。它是用来管理右边这些应用层的Node 等等。而每一个note 就是一个个相互独立的应用。

ROS 的通信是在OS 层之上、基于TCP/IP 协议实现。
在这里插入图片描述

node和master

在这里插入图片描述

node节点:

一个可执行程序进程,通常一个node 负责者机器人的某一个单独的功能,例如右边图24上的Camera Node 就是一个相机的节点。不同的节点可以使用不同的编程语言C++或python。在同一个ROS 下节点对于编程语言是没有要求的,可以每个节点用互相不同的语言。在右边有一个Image Display Node,它是运行在另一台电脑上的图像处理节点。也就是说Ros 的节点是可以运行在同一局域网下的不同机器人上。

master:每个节点都负责单独的一部分功能,节点跟节点之间要互相发现彼此这就需要master。master 相当于一个管理中心,每一个node 启动的时候先要在Master 处进行一次注册告诉master 自己的基本信息,需要订阅什么话题,需要发布什么话题。node 之间的通信也是先由master进行“牵线”,才能两两的进行点对点通信,一个ROS计算图中有且只有一个master

在这里插入图片描述

节点之间的通讯方式:节点和节点之间的通信具体有4 种实现方法,分别是话题、服务、动作、参数

在这里插入图片描述

话题

example 话题被两个Subscriber 所订阅了
在这里插入图片描述

话题的通讯是单向的,这个订阅过程是完全单向的Publisher 只管发Subscriber 只管收。一个话题可以被多个Subscriber 订阅,也可以由多个发布者来发布。话题是实时性差且异步的通讯。Publisher 的发送时间跟Subscriber 接收到的时间并不是严格同步的,而且Publisher 是不知道Subscriber 有没有收到或者说有多少Subscriber 收到了。话题的一般应用场景为,一个传感器的信息发布。例如激光雷达发布扫描的数据,或者相机发布图像就会用话题的方式来发布。话题传递的内容就是message,而message type 就是话题的消息类型。当发布者通过udp 或者tcp 协议发出去一段字符之后接收者接收到了应该怎么样去解析,这就需要共同定义好一个解析的方式这个也就是消息的格式。

服务

服务的通讯是双向的,有一条实线箭头和一条虚线箭头。实线这边是从Client 端发往Server 端的这是一个起始,是由客户端向服务端发起的请求。请求在执行完之后再向客户端返回一个应答这个就是服务的过程。
在这里插入图片描述

服务有更强的的同步性,实时性。客户端发出一个请求之后如果一定时间之内没有应答就认为这次通信失败,从而进行下一步做一些异常处理。它的底层实现也是UDPROS 和TCPROS。服务的通信模型是多对一的,可以有多个客户端但只能有一个服务端。服务适用于逻辑任务的处理。
在这里插入图片描述

动作

Action 和刚刚我们介绍到的服务有点类似,服务是客户端发送一个请求服务端返回一个应答。这种模式在任务执行周期短的情况下是十分有用的,例如让服务器关一下灯,服务器立马把灯关了,然后返回一个应答告诉你灯已经关了。但是如果用服务的方式让机器人去烧一壶水,在水烧开之前是收不到任何回复的。此时无法判断到底是没有收到,还是正在执行。在类似这种执行周期比较长的任务下服务就很不适用了。所以也就产生了动作action 这种方法。

在这里插入图片描述

goal 和cancel 是由客户端向服务端发送的,status 和result 和feedback 是由服务端返回的。Action 和服务的区别在于它有多重回复。例如让机器人去烧一壶水,机器人首先会回复一个status。告诉你当前状态开始烧水,同时还有回复feedback 周期性的报告目前水温是多少度。最后水烧开了回复一个result 水已经烧开了。客户端接收到result 就知道这一组动作已经结束了。Action 在执行过程中如果想要取消动作,它还提供了一个cancel 这接口来取消请求。这里要注意一下feedback 和status 都可以有多个但是result 只会发布一次。

参数服务器

参数服务器是一种比较特殊的机制,他既不是一个节点,然后我们在启动的时候也没有特地去启动它。它运行在Master 当中,是节点用来存储参数的地方。例如某一个节点启动的时候需要获取变量foo。如果参数服务器当中没有存储这个变量,那他会使用一些默认值

在这里插入图片描述

但当你你去调用这个参数,然后给他设置一个值。此时节点如果再去获取参数就会拿到这个新的值。这就是参数服务器的一种通信机制。

参数服务器并非是一个node,运行在master 中,节点存储参数的地方用于配置参数,全局共享参数,是一个字典,key-value,可查看

ROS下常用shell命令

所谓shell 命令我们前面提ros 提供通讯架构之外还提供了一些开发工具。 这里我们说到的shell 命令就是指他的命令行工具。这里会详细列举ROS 下一些比较常用的命令的格式和用法。

roscd

看到roscd 的话,可能会大家想到我们之前有介绍过一个Linux 下有一个CD 指令它是跳转目录用的。而roscd 也是跳转目录用的,但它不同的地方在于roscd 面要跟的是你的功能包名。

roscore

这个指令我们在装完ros 的时候也有用到过。测试ros 启动时输入roscore,它主要是启动了ros 的一个master 节点管理器和一些必要的日志输出文件以及我们前面所说到的的参数服务器。这个就是roscore 的作用。

rosrun

rosrun 的功能是运行节点,rosrun 后面是要带参数的,至少要带两个参数。第1 个是功能包名,第二个是可执行程序名。打开一个新终端运行rosrun turtlesim

turtlesim_node,这条命的作用就是运行一下turtlesim 这个功能包下的turtlesim_node 这个节点。我们看到这里出来了界面,有一个小乌龟在界面上。这个是ros 官方提供的一个小的demo,我们这一节课所有的指令都是在这个demo 下来操作。

这里需要注意的地方是使用rosrun 来运行turtlesim_node 的时候要在新终端运行,而不要把原终端的roscore 关了再运行rosrun turtlesim turtlesim_node,否则会有报错提示master节点未开启。

rosnode

rosnode 的功能是输出节点相关信息,rosnode 顾名思义就是跟节点有关的一些操作。直接运行rosnode 可以看到它的一些提示信息。这里会告诉你可以带哪些参数。

rosnode list:列出当前节点,可以看到目前是有运行两个节点的rosout 和turtlesim。turtlesim 就是刚刚我们手动的。通过rosrun 指令启动的这个节点,rosout 是通过roscore 启动ros master 自动启动的一些日志输出相关的节点。

rosnode info:节点信息查询的一个指令

rosnode info 它后面还需要带一个参数,也就是我们的节点。这里也是可以使用tap自动补全的,我们输入turtlesim 这个节点。他会列出节点的各种信息包括的名称,发布了哪些话题订阅了那些话题,有哪些服务,还有更详细的端口号,跟哪些节点有连接关系,还有它传输的方式是tcpros 的方式。

rosnode kill:杀掉一个节点

rosnode kill 是通过kill 的方式来结束一个节点。终端运行rosnode kill /turtlesim,就会结束节点turtlesim_node。

rosnode machine:列出运行在特定机器上的节点

只运行rosnode machine 的话会列出哪些机器上运行了节点。在前面章节有提到过,节点可以运行在一台机器上也可以运行在多台机器人。这里的Ubuntu 是我们的计算机名,并不是代表Ubuntu 系统如果把它改为其他的例如说bingda。那这里出现了就会是bingda,在这里是只有ubuntu 这台机器运行了节点。如果node machine 后面跟上设备名Ubuntu 就可以看到,Ubuntu 这台计算机上现在是运行的哪些节点。

rostopic

rostopic 的功能是输出话题相关信息,终端运行rostopic 我们先看一下他可以跟哪些参数这里我们挑几个比较重要的。

rostopic list:列出当前所有活跃的话题

rosout、rosout_agg 是跟rosmaster 相关的一些日志输出的话题。

turtle1/cmd_vel 是一个运动相关的话题。打开一个新终端,启动一个键盘遥控程序。

rosrun turtlesim turtle_teleop_key

运行这个节点可以通过上下左右键来控制小乌龟的位置移动,前进后退和旋转等。这个键盘遥控程序。所发布的就是cmd_vel 这个话题。

rostopic info:查看话题类型以及发布订阅关系。

我们通过rostopic info 查看一下这个话题

话题的类型是我们前面提到的message。它的message 是一个geometry_msgs/Twist,它的发布者是teleop_turtle 这个键盘遥控程序订阅者是turtlesim 是小乌龟界面

rostopic ehco:打印出一个话题传出的内容我们可以通过rostopic echo 把话题给输出出来。

现在还没有任何的输出信息。回到键盘遥控程序。把光标放在上面,按一个向前进。这里可以看到开始输出新的信息。

通过echo 的方式,相当于注册了一个新的订阅者。当这个话题在网络内有发布的时候。你也会收到一份。并且把它打印出来。

rostopic type:输出话题类型

rostopic type 是一个info 的简化版,它只输出一个话题的消息类型。

rostopic hz:检查消息发布频率:

运行之后小乌龟没有移动时输出结果,no new messages.用键盘遥控小乌龟移动时就会根据接收的消息计算出当前消息发布的频率。

rostopic pub:向话题发布数据

刚刚我们借助了一个键盘遥控节点来控制乌龟的移动。如果想要手动的通过命令行发布一个消息就需要用到rostopic pub。终端输入rostopic pub+话题名,输入完之后按两下tab 可以自动补全消息的类型以及它里面要填充的参数。首先第一个参数是linear 线速度xyz,下面还有一个角速度angular。

我们把角速度angular 的z 项也就是旋转角速度填为1。

在小海龟的界面是可以看到小海龟转动了一下就停了。这个就是通过pub 的方式来发布消息。pub 之后也是可以跟参数的,

这条命令会让小海龟持续的转动,因为这条命令是以10 赫兹的频率来发布的。在pub 后面加入-r,10 就是代表频率。

我们也可以用rostopic hz 验证一下。平均的发布频率也是10 赫兹,和rostopic pub 发布出去的消息是相符的。

rosservice

首先终端输入 rosservice 回车一下看可以带哪些参数

运行rosservice list 列出运行的程序当中所有使用到的服务。这里以spawn 这个服务为例对rosservice 命令进行讲解。

运行rosservice info /spawn 这个我们可以看到它是由turtlesim 这个节点所产生的。

类型是turtlesim/Spawn 这个服务的类型。后面有参数Args:X 坐标,y 坐标,方向theta和名称

运行rosservice args /spawn 看一下参数Arg,它列出了所需要用到的参数。可以看到这里运行的结果和info 当中的arg 这个信息是一样的。

我们使用rosservice call 试着调用一下这个服务。它要带4 个参数,第1 个参数是x轴坐标,第2 个参数y 轴的坐标,第3 个theta 角度,第4 个名称。分别设为1,1,0, turtl2在终端运行rosservice call /spawn 1 1 0 turtl2

此时可以看到小乌龟界面上是多了一个小乌龟的,这个spawn 的服务也就是产生一个新的乌龟。在输完这条指令之后,调用了一下spawn 这个服务。 它有一条应答,输出了乌龟的名字,这个就是service 下面一些主要的用法。关于service 的其他用法也可以通过加-h参数查看帮助来自行摸索。在帮助里会详细介绍命令的使用格式,和可以带的参数等。

rosmsg

rosmsg 的功能是输出消息相关信息,终端输入rosmsg 回车,可以看到这个命令下也是有很多参数可选,这里着重讲一下show 参数。

rosmsg show 直接运行是什么结果都没有的。所以我们加上-h 参数查看一下帮助。根据提示可以看到,这个命令是要带一个消息的类型的。

在前面的内容有提到过/turtle1/cmd_vel 这个话题的消息类型是geometry_msgs/Twist。我们直接show 一下这个geometry_msgs/Twist。先通过rostopicinfo 找到/turtle1/cmd_vel 这个话题中间沟通用的消息类型,我们把它复制下来再show 一下。

结果显示geometry_msgs/Twist 包含了两个向量,第1 个代表的是三轴的线速度。第2 个代表的是三轴的角速度。 通过rosmsg 就可以看到每一个话题当中沟通使用的消息类型里面具体包括了什么。

rossrv

rossrv 的功能是输出服务相关信息,它和rosmsg 的功能是类似的他也是用来显示所用到的服务里面的信息。我们查看一下前面提到的/spawn 这个服务。

先运行rosservice info /spawn 查看服务信息,复制服务的类型turtlesim/Spawn 在终端运行rossrv show turtlesim/Spawn输出内容里有三条横线组成的一个分隔符,横线上的几个参数是做服务请求时所要带的参数。分隔符以下的代表的是服务器向客户端做响应时所带的参数。在请求时需要带4个参数,乌龟的坐标和名字。响应的时候带的就是乌龟的名字。

rosbag

rosbag 的功能是播放/录制数据集

在讲解rosbag 之前,我们先通过命令行发布一个消息让2 号小乌龟原地转圈。

持续发布一个线速度和角速度都为1 时可以看到2 号小乌龟已经开始原地转圈了

rosbag record:录制数据集

接下来我们来演示一下rosbag 的用法,在终端运行rosbag record -a -O subset

rosbag 可以录制当前ros 通信网络当中所有的话题信息。他用的方法是record-a 代表的参数是录制所有的话题。-o 可以指定一个话题名,例如说我们把它取名为 subset 。命令运行后就已经开始录制话题了,录制完成后直接ctrl+c 结束。此时使用ls 就可以可以看到已经有一个subset.bag 文件。这是录制所有的话题,如果只关心某一个的话,也可以将-a 替换成想要录制的话题名。例如想录制turtl2/cmd_vel 这个话题。则将-a 替换成turtl2/cmd_vel 这个话题。

rosbag info:输出数据集信息

运行rosbag record /turtl2/cmd_vel -O subset 开始录制后等待几秒钟再结束录

制。通过rosbag info 这个指令查看文件subset.bag。这个指令可以看到数据集的路径,录制的时长,开始时间,结束时间,文件大小,录制消息数量,录制消息类型,录制了哪些话题。

rosbag play :播放数据集

数据集的播放是使用rosbag play,先将2 号小乌龟原地转圈的命令停掉。小乌龟停下来后,运行rosbag play subset.bag 将刚刚录制的数据播放一下。小乌龟将随着数据

集播放重新转圈,完全复现了刚刚录制的内容。

rosbag 这个功能一般是用在需要记录一些实验的过程,尤其是一些比较复杂的实验。

例如开发一个机器人去做了一些导航测试,测试环境搭建较为困难。这种情况下就可以在

测试的过程中,把所有的数据录制下来。方便进行重演,这就是数据包的作用。

ros常用图形工具

本节内容介绍ros 的常用图形工具。

打开虚拟机,打开终端运行roscore

打开一个新终端运行小乌龟节点rosrun turtlesim turtlesim_node

再打开一个新终端运行键盘控制节点rosrun turtlesim turtle_teleop_key

接下来将用小乌龟例程来介绍ros 下常用的图形化工具

rqt_graph

终端输入rqt_graph 即可启动,rqt_graph 作用是显示节点和节点之间的联系。例如说我们可以看到。teleop_turtle 和turtlesim 中间。是因为teleop_turtle 发布了一个turtle1/cmd_vel,然后turtlesim 是正好订阅了这个话题。所以这两个话题中间就有了这样一条线,把它们连接起来。通过这个工具可以看到每个节点和每个节点之间的订阅发布关系之类的。当出现问题的时候,通过图形化来看它们中间哪个节点的话题没有连上也会比较方便。这个就是rqt_graph 的用法。

rqt_plot

终端输入rqt_plot,rqt_plot 是一个曲线绘图工具。可在1 号标记处选择输入话题

名,例如/turtle1/pose。在2 号标记出会把pose 下的几个变量全部添加进来。可以通过3 号标记处的减号来删除一些我们不关注的变量。这里我们只关注小乌龟的坐标位置,把跟速度有关的/turtle1/pose/angular_velocity 和/turtle1/pose/linear_velocity 移除。

为了便于观察,需要通过4 号标记处图标选择调节坐标尺度。

例如说我们希望x 轴方向显示。20 秒内的数据我们可以在x 轴左边设置0,右边设置为20。纵坐标方向我们希望他从0 开始显示到10 同样调整一下这纵坐标的幅值。

调整完坐标幅值后我们测试一下这个绘图工具。首先启动键盘遥控控制乌龟移动。此时,可以看到小乌龟的坐标位置发生变化时,相对应的在曲线图中x,y,theta 三条线也会产生变化。
在这里插入图片描述在这里插入图片描述

这就是rqt_plot 这个工具的用法,在进行运动控制之类的研究时可通过它把速度,位置等信息的曲线绘制出来。可通过它来观察运动是否平稳,曲线的变化情况等,对调试工作非常有帮助。

rqt_image_view

它的作用是查看摄像头图像,在此之前先把摄像头连接到虚拟机。然后在ros 下安装一个摄像头的功能包。

终端运行sudo apt install ros-melodic-uvc-camera

ros 下的功能包的安装方式都是遵循统一的规范,先是ros 然后-版本号这里我们是melodic。然后是功能包名,例如我们要安装的功能包名为uvc camera。

终端运行rosrun uvc_camera uvc_camera_node

uvc camera_node 这个节点会启动摄像头,并发布图像话题。打开一个新终端,

rostopic list 查看一下当前的话题列表现在可以看到已经有了图像的话题。

针对这个图像话题,需要用到rqt_image_view 这样一个工具来查看图像。

终端运行rqt_image_view
在这里插入图片描述

现在什么显示也没有,需要先选择一下话题在这儿我们选image_raw 就能看到摄像头的画面了。

roslaunch

在这里补充一个ros 的指令。在前面章节说到,ros 下第1 步要先启动roscore,然后才能rosrun 依次启用各个节点。现在我们先把所有正在运行的节点都关闭。

运行指令:roslaunch uvc_camera camera_node.launch

roslaunch 的格式是,第1 个参数是功能包名,第2 个参数是launch 文件名。这个指令启动了uvc_camera 下的camera _node.launch 文件。这时候会发现在没有启动roscore的情况下摄像头节点被启动了,图像话题也可以正常订阅。 这是因为roslaunch 会先侦测当前环境中有没有master 在运行如果没有的话,它就启动一个master。如果已经有了的话他就直接启动节点而不去启动master。 在以后的章节内容当中,我们启动节点会主要通过roslaunch。因为它在一个launch 文件中可以包含多个节点的启动。

rviz

ros 下还有一个非常重要的图形化工具就是rviz。

先启动摄像头节点roslaunch uvc_camera camera_node.launch

终端运行rviz

这个就是rviz 的界面,rviz 是一个非常强大的。图形化显示工具,中间的黑框部分是可以显示的一些3d 的内容,例如三维地图,点云数据等等。如果想要显示二维的信息在这里点一下add 增加。选择新建一个图像显示工具image。

在这里插入图片描述

在右侧出现的图像显示工具,点开选择好要显示的图像话题/image_raw 就可以了。在add里还有很多选项。除了刚刚说到的图像,还有地图、里程计、路径、点云等等都可以在这里面显示。

ros坐标系合TF变换

ROS 下的坐标系是遵循右手坐标,如图1 伸出右手,大拇指所指方向为Z 轴正方向,食指所指方向为X 轴正方向,中指所指方向为Y 轴正方向,如图2所示,右手握在对应的手指上,四根手指的握住方向就是对应轴旋转的正方向。
在这里插入图片描述

TF 变换是ROS 中用于描述两个物体坐标之间的位置关系,如下图中机器人本体和雷达传感器的位置关系,雷达和墙面之间的位置关系,以及根据机器人本体和雷达的坐标变换换算出机器人本体和墙面之间的位置关系。
在这里插入图片描述

下面通过ROS 中的一个小例程来演示一下TF 坐标变换

roslaunch turtle_tf turtle_tf_demo.launch

启动演示例程后,会出现两只小乌龟,通过键盘的上下左右键可以移动第一只乌龟,第二只乌龟会自动跟随第一只乌龟运动
在这里插入图片描述

我们可以通过rosrun rqt_tf_tree rqt_tf_tree 启动TF 树查看工具来查看坐标关系

可以看到,turtle1 和turtle2 两个坐标都是的父坐标是world 这个坐标,还有坐标变换的发布者,发布频率等信息。

也可以通过 rosrun tf tf_echo /world /turtle1 来查看两个坐标之前的变换关系的具体数值,例如/turtle1 坐标和/world,也可以通过rviz 界面动态的显示各个坐标之间的运动关系,这里要注意,rviz 中需要增加TF 显示插件,并将基座标修改为world 才可以正常显示
在这里插入图片描述

ros的工作空间和编译

本节内容介绍一下ros 的工作空间和代码编译。 在前几个章节中演示了一个小乌龟的例程。这个例程是由ros 官方别人已经提供好,我们直接安装上的就能使用的。 如果想要运行一些ros 没有提供的,或者自己想设计一些功能包应该要怎么做呢?

建立一个工作空间:mkdir catkin_ws

工作空间的名称里是没有限制的可以自行定义。为了跟ros 官方wiki 的指导手册当中保持一致,建议沿用catkin_ws 这个文件夹名。cd 进到工作空间下,在工作空间下创建一个src 文件夹,至此工作空间创建完成。

编译工作空间:catkin_make

要编译工作空间内的代码必须在工作空间的根目录,用catkin_make 指令编译这个工作空间。编译完成后工作空间下就新增了build 和devel 这两个文件夹这个是编译系统在过程中自动生成的。

src 目录就是用来放功能包源码的,如果想运行自己的功能包,代码需要放到src 目录下。例如我们现在去git 上拉取一个已经编写好的功能包。进入src 文件夹,拉取功能包。

加入了新的功能包代码之后,工作空间需要重新编译,跳转到上一级在catkin_ws 目录运行catkin_make,切记catkin_make 必须要在工作空间的主目录下运行。编译完成后代码还是运行不了。因为工作空间只是被编译了,并没有加入到环境变量中去。ros 不认这里面的功能。所以下一步把工作空间加到环境变量中。

环境变量的编辑还是通过vim 编辑器打开.bashrc 这个文件来操作。在文件末尾加入source /home/bingda/catkin_ws/devel/setup.bash

这里还有我们上一次加入的。ros 安装之后的把ros 加入到环境变量中 所加入的那一行source 把这一行加完之后就可以保存退出,运行source .bashrc 重新加载一下环境变量。

运行一下roslaunch bingda_tutorials bingda_talker.launch 启动了一个消息的发布者运行roslaunch bingda_tutorials bingda_listener.launch 启动一个消息的订阅者

这就是我们说的运行一个自己编写的程序,以及别人提供好的一些功能包但是没有提供用apt 安装方式的,应该怎么去编译运行。

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

ROS介绍以及常用指令 的相关文章

  • 无人驾驶论坛

    1 百度Apollo论坛 http www 51apollo com 2 人工智能中文资讯网 http www ailab cn
  • V-REP安装

    小知识 是当前目录 是父级目录 是根目录 1 下载V REP 官网地址 http www v rep eu downloads html 我用ubuntu16 04下载V REP PRO EDU V3 5 0 Linux tar 2 解压安
  • ROS2踩坑记录

    Vscode 显示 找不到module 以此选择 设置 Python 在setting json中编辑 在 python autoComplete extraPaths 中添加额外的第三方库路径 如 opt ros foxy lib pyt
  • GG-CNN代码学习

    文章目录 1 源码网址 https github com dougsm ggcnn 2 数据集格式转化 下载后的康奈尔数据集 解压完之后里面的格式 里面的 tiff图像通过 txt文件转化得到 python m utils dataset
  • Ubuntu16.04安装ROS Kinetic详细步骤

    文章目录 ROS安装 配置Ubuntu软件仓库 设置sources list 设置密钥 更新Debian软件包索引 安装ROS 初始化 rosdep 环境配置 构建工厂依赖 测试安装 开发环境 ROS安装 ROS Kinetic只支持Wil
  • Ubuntu下vscode配置ROS环境

    摘要 最近准备放弃用clion开发ROS使用更主流的vscode 整理一下在ubuntu18 04下的VSCode安装和ROS环境配置流程 安装 方法一 软件商店安装 个人还是推荐使用ubuntu软件下载vscode 简单不容易出错 方法二
  • ROS rosdep update 出错方法 不需要翻墙切换之类的解决方法 ‘https://raw.githubusercontent.com/ros/rosdistro/master/inde

    系统 ubuntu18 rosdep update参考的这篇文章 https blog csdn net weixin 43311920 article details 114796748 utm source app app versio
  • ROS noetic tf demo错误处理及python版本切换

    文章目录 报错描述及解决 ubuntu20 04下python版本切换 报错描述及解决 ubuntu版本 20 04 ROS版本 noetic roslaunch turtle tf turtle tf demo launch 报错信息 t
  • ROS 第四天 ROS中的关键组件

    1 Launch文件 通过XML文件实现多节点的配置和启动 可自动启动ROS Master
  • 树莓派配置wifi做热点方法

    http wiki jikexueyuan com project raspberry pi wifi html
  • 局域网下ROS多机通信的网络连接配置

    1 在路由器设置中固定各机器IP地址 在浏览器中输入路由器的IP地址 例如TP LINK路由器的IP为 192 168 1 1 进入登录页面后 输入用户名和密码登录 用户名一般为admin 密码为自定义 在 基本设置 gt LAN设置 gt
  • (ros/qt报错) FATAL: ROS_MASTER_URI is not defined in the environment

    安装qt之后 明明打开roscore但是qt运行跟ros有关的节点时报错 FATAL 1450943695 306401842 ROS MASTER URI is not defined in the environment Either
  • 可视化点云

    我在找到的视差图像上有来自 gpu reprojectImageTo3D 的 3D 点 我现在想显示这个点云 如何将找到的点云转换为OpenCV to sensor msgs PointCloud2 我不需要发布点云 这仅用于调试可视化 是
  • 从 pcl::PointCloud 中删除点

    我是 PCL 新手 我正在使用 PCL 库 并且正在寻找一种从点云中提取点或将特定点复制到新点的方法 我想验证每个点是否符合条件 并且我想获得仅包含优点的点云 谢谢 使用 ExtractIndices 类 将要删除的点添加到 PointIn
  • 我的代码的 Boost 更新问题

    我最近将 boost 更新到 1 59 并安装在 usr local 中 我的系统默认安装在 usr 并且是1 46 我使用的是ubuntu 12 04 我的代码库使用 ROS Hydro 机器人操作系统 我有一个相当大的代码库 在更新之前
  • 在 Ubuntu 18.10 上安装 ROS Melodic

    I can t是唯一对 Cosmic 与 Wayland 和 Melodic 的组合感兴趣的人 我会坦白说 我似乎已经在 XPS 13 9370 上成功管理了此操作 或者至少安装脚本 最终 成功完成 然而 有一个非常棘手的解决方法 无论结果
  • catkin_make 编译报错 Unable to find either executable ‘empy‘ or Python module ‘em‘...

    文章目录 写在前面 一 问题描述 二 解决方法 参考链接 写在前面 自己的测试环境 Ubuntu20 04 一 问题描述 自己安装完 anaconda 后 再次执行 catkin make 遇到如下问题 CMake Error at opt
  • 使用 CMake 链接 .s 文件

    我有一个我想使用的 c 函数 但它是用Intel编译器而不是gnu C编译器 我在用着cmake构建程序 我实际上正在使用ROS因此rosmake但基础是cmake所以我认为这更多是一个 cmake 问题而不是ROS问题 假设使用构建的文件
  • 如何使用一个凉亭同时创建两个地图?

    如下图所示 现在我的gazebo正在运行2个slam gmapping包 首先是 turtlebot slam gmapping 发布到 map 主题 第二个是 slam gmapping 发布到与第一个相同的 map 主题 我想创建一个新
  • 如何在Windows上安装机器人操作系统ROSJava?

    ROS 的文档很糟糕 一个很大的讽刺是 ROS 的 Groovy 和 ROSJava 版本的创建是为了让 Windows 等平台上的开发人员能够利用出色的机器人 SDK 而所有安装说明仍然面向 Linux ubuntu 用户 The ROS

随机推荐

  • 【linux网络编程】-UDP客户端

    客户端实现 1 注 xff1a 客户端实现中可以不用bind地址 xff0c 当你发送数据到指定服务端时 xff0c 操作系统会为客户端自动分配端口 span class token keyword int span span class
  • 删除字符串中的各种标点符号的方法

    1 用re findall w 43 string 匹配字母 xff0c 数字和下划线 xff0c 返回列表 2 用 join 列表 将列表中元素再拼接成字符串
  • 在ubuntu18.04中切换python版本(个人记录)

    首先通过ls命令查一下目前ubuntu系统中已安装的python版本 ls l usr bin grep python 然后通过以下命令查看目前有哪些可供选择的python版本 update alternatives list python
  • ORB-SLAM2建立自己的数据集

    ORB SLAM2建立自己的数据集 使用ZED2拍摄视频剪裁视频分割图片运行数据集记录 使用ZED2拍摄视频 这里没有使用程序将ZED2双目相机拍摄成两幅画面 xff0c 而是直接使用软件拍摄视频 若有大佬有相关代码还是很希望能发我下 拍的
  • STM32—DMA功能讲解串口发送

    目录 一 DMA基本介绍 1 DMA的定义 2 DMA数据传输 二 DMA功能框图 编辑 1 DMA请求 2 通道 3 仲裁器 三 DMA数据配置 1 传输方向及地址 2 传输数据大小及单位 3 传输完成 三 DMA初始化结构体详解 1 D
  • 最新 Xilinx vivado IP许可申请

    最新 Xilinx vivado IP许可申请 xilinx的fpga使用vivado开发 xff0c zynq系列fpga的SOC开发成为主流 xff0c 加快fpga开发 xff0c 也进一步提高了fpga开发的灵活性 xilinx提供
  • C++调用Yolov3模型实现目标检测

    C 43 43 调用Yolov3模型实现目标检测 使用开源权重文件 xff0c 此训练模型包含80种物体 文件下载地址 xff1a 预训练权重文件 xff1a https pjreddie com media files yolov3 we
  • 无人驾驶-控制-坐标系转化

    无人驾驶 坐标系转化 一 坐标系概念1 1 WGS 84坐标系1 1 1 简介1 1 2 角度范围1 1 3 基本参数1 1 4 坐标系图示 1 2 ECEF地心坐标系1 2 1 简介1 2 2 坐标系图解 1 3 ENU东北天坐标系1 3
  • 几何实体图形保存成stl格式的ascII和二进制文。用Vc++语言读入文件,给三角网格坐标值乘以2,并保存到另一stl文件。输出完成工作所用的执行时间

    1 题目 xff1a CAD CAM软件生成几何实体图形 xff0c 图形形状不限 xff0c 但图形需包含曲面 xff0c 分别保存成stl格式的ascII和二进制文 用Vc 43 43 语言读入文件 xff0c 给所有三角网格坐标值乘以
  • windows下vscode连接Linux中的MySQL(非常实用)

    于初学Linux系统的小伙伴来说 xff0c 由于对Linux系统及其在windows下的环境配置比较生疏 xff0c 所以当使用windows下vscode连接Linux中的MySQL xff0c 并进行相关研发时 xff0c 颇为头疼
  • UDP通信实现(客户端和服务器端)

    服务器端 xff1a include lt stdio h gt include lt stdlib h gt include lt unistd h gt include lt string h gt include lt arpa in
  • conda环境的激活与关闭

    激活conda环境 conda activate 关闭conda环境 conda deactivate 打开终端自动进入conda环境 conda config set auto activate base true 关闭打开终端自动进入c
  • C语言结构体字节对齐规则

    注 xff1a 图片中蓝色圆圈表示空闲的字节空间 xff0c 黄色表示成员占有的字节空间 编译器一般默认4字节对齐 xff0c 当然也有8字节对齐的 xff0c 但是如果结构体没有使用8字节的数据类型 xff0c 其实也可以认为是4字节对齐
  • c语言输出对齐的方法

    关于c语言输出对其方法 左对齐右对齐附乘法表代码 左对齐 当输出多个数据时 xff0c 由于每个数据的字符长度不同 xff0c 所以需要对齐 xff0c 左对齐时方法如下 xff1a span class token function pr
  • 多线程与网络编程

    一 网络协议 应用层 HTTP FTP TFTP SMTP SNMP DNS 传输层 TCP UDP 网络层 ICMP IGMP IP ARP RARP 数据链路层 由底层网络定义的协议 物理层 由底层网络定义的协议 二 TCP与UDP x
  • const和define区别与比较

    xff08 1 xff09 就起作用的阶段而言 xff1a define是在编译的预处理阶段起作用 xff0c 而const是在编译 运行的时候起作用 xff08 2 xff09 就起作用的方式而言 xff1a define只是简单的字符替
  • FreeRTOS中任务栈内存分配

    前言 在RAM中大多数的空间分配为任务栈和系统栈两部分 任务栈 xff1a 顾名思义就是用来跑任务的 xff0c 当我们xTaskCreate一个任务时 xff0c 但是在这块任务栈里面动态分配空间 系统栈 xff1a 任务栈是不使用这里的
  • 网络编程(0816-林雪阵)

    完成seclect TCP客户端 include lt stdio h gt include lt sys types h gt include lt sys socket h gt include lt arpa inet h gt in
  • yolov5获取边框坐标

    这里使用的是5 0版本 打开detect py xff0c 找到 Write results模块 xff0c 找到 save one box ctr 43 鼠标点击 xff0c 进入general py xff0c 会自动定位到 save
  • ROS介绍以及常用指令

    ROS 1 什么是ros ROS 的雏形诞生 xff1a 斯坦福大学人工智能实验室的STAIR 机器人项目这个项目希望完成一个服务机器人原型 xff0c 在视觉的辅助下 xff0c 可以在复杂环境中运动 xff0c 还可以通过机械臂操控环境