ROS机器人操作系统学习记录
Robot Operating System
- linux和ROS系统的安装
- linux命令行基础操作
- 1.基本指令
- 2. ps:ubuntu与windows互传文件的3种方法
- C++和python基础
- 1.python基础
- 2. C++基础
- 3. Vim的简单使用
- ROS简介
- 1.ROS是什么
- 2.ROS的目标
- 3.ROS的核心
- (1)节点(Node)——执行单元
- (2)节点管理器(ROS Master)——控制中心
- (3)话题(Topic)—— 异步通信机制
- (4)消息(Message)——话题数据
- (5)服务(Service)——同步通信机制
- (6)Topic和Service
- (7)参数(Parameter)——全局共享字典
- (8)文件系统
- 4.ROS的工作机制
- 5.ROS的系统架构
- ROS基本命令行工具的使用
- 1.ROS “hello world”小乌龟模拟实验步骤
- 2.基本指令
- a.可视化工具==rqt==
- b.rosnode相关指令
- rosnode list
- rosnode info (+某节点)
- rosnode ping (+某节点)
- rosnode machine (+某节点)
- rosnode kill (+某节点)
- rosnode cleanup (+某节点)
- c.话题指令rostopic(使用主题与节点交互)
- rostopic list (查看主题清单)
- rostopic echo查看节点通过话题发出的消息
- rostopic pub (-r 频率)发布主题
- 3.结合小海龟实验的运用
- 创建工作空间和功能包
- 创建工作空间
- 创建功能包
- 发布者Publisher的编程实现
- 订阅者Subsciber的编程实现
- 话题信息的定义和使用
- 客户端Client的编程实现
- 服务端Serve的编程实现
- 参数的使用和编程方法
- ROS中的坐标系管理系统
- tf坐标系广播与监的听的编程实现
- launch启动文件的使用方法
- 常用可视化工具的使用
- ROS移动机器人实战
linux和ROS系统的安装
参考链接: 古月·ROS入门21讲 | 一学就会的ROS机器人入门教程.
linux命令行基础操作
参考链接:Linux入门基础命令.
1.基本指令
Ctrl+Alt+t : 打开终端
Ctrl+d :关闭终端
(指令 --help) : 显示指令的说明
pwd : 显示当前工作目录
cd(+目录): 进入目录
cd .. : 进入上一级目录
cd - : 显示上一次访问的目录
clear : 清除屏幕
ls : 显示目录下内容
mkdir aaa : 在当前目录下创建aaa目录,相对路径;
mkdir ./bbb : 在当前目录下创建bbb目录,相对路径;
mkdir /ccc : 在根目录下创建ccc目录,绝对路径;
touch : 创建文件
rm -r : 删除目录或文件
sudo apt-get update
2. ps:ubuntu与windows互传文件的3种方法
参考文章链接:ubuntu与windows互传文件的3种方法
mv 原先目录 文件的名称 mv tomcat001 tomcat
mv /aaa /bbb : 将根目录下的aaa目录,移动到bbb目录下(假如没有bbb目录,则重命名为bbb);
mv bbbb usr/bbb : 将当前目录下的bbbb目录,移动到usr目录下,并且修改名称为bbb;
mv bbb usr/aaa : 将当前目录下的bbbb目录,移动到usr目录下,并且修改名称为aaa;
C++和python基础
(下载前设置软件源:清华或者阿里云)
编译器安装
sudo apt-get install g++
sudo apt-get install python
1.python基础
学习网站: 菜鸟教程.
2. C++基础
学习链接: l小甲鱼C++快速入门.
3. Vim的简单使用
参考链接:vim编辑器编写c代码步骤.
ROS简介
1.ROS是什么
ROS(Robot Operating System,下文简称“ROS”)是一个适用于机器人的开源的元操作系统。它提供了操作系统应有的服务,包括硬件抽象,底层设备控制,常用函数的实现,进程间消息传递,以及包管理。它也提供用于获取、编译、编写、和跨计算机运行代码所需的工具和库函数。
简要解释ROS:
通道:ROS提供了一种发布-订阅式的通信框架用以简单、快速地构建分布式计算系。
工具:ROS提供了大量的工具组合用以配置、启动、自检、调试、可视化、登录、测试、终止分布式计算系统。
强大的库:ROS提供了广泛的库文件实现以机动性、操作控制、感知为主的机器人功能。
生态系统:ROS的支持与发展依托着一个强大的社区。ros.org尤其关注兼容性和支持文档,提供了一套“一站式”的方案使得用户得以搜索并学习来自全球开发者数以千计的ROS程序包。
2.ROS的目标
ROS 的主要目标是为机器人研究和开发提供代码复用的支持。ROS是一个分布式的进程(也就是“节点”)框架,这些进程被封装在易于被分享和发布的程序包和功能包中。ROS也支持一种类似于代码储存库的联合系统,这个系统也可以实现工程的协作及发布。这个设计可以使一个工程的开发和实现从文件系统到用户接口完全独立决策(不受ROS限制)。同时,所有的工程都可以被ROS的基础工具整合在一起。
ROS的首要目标是提供一套统一的开源程序框架,用以在多样化的现实世界与仿真环境中实现对机器人的控制。
3.ROS的核心
ROS的核心是节点(node)。节点是一小段用Python或C++写成的程序,用来执行某个相对简单的任务或进程。多个节点之间互相传递信息(message),并可以独立控制启动或终止。某一节点可以面向其它节点针对特定标题(topic)发布信息或提供服务(service)。
例如:现有以节点将传感器读数传递至机器人控制器,在“/head_sonar标题“下存在一条信息包含有变量值“0.5“,即意味着传感器检测到的当前物体距离为0.5米。任何一个想要知道该传感器读数的节点都只要订阅(subscribe)/head_sonar标题即可。为了便于使用该读数,针对该订阅者的节点会定义一个回调函数,每当有新的信息传递到订阅者标题时,即执行该函数。上述流程的运行频率取决于发布者节点(publisher node)更新信息的频率。
此外,节点还可以用来定义一个或多个服务(service)。ROS中服务的作用是在接收到来自其它节点的请求时回复该节点或执行某项任务。例如:控制LED灯的开关是一个服务;移动机器人在给定起始和目标位置的条件下返回导航路线规划也是一个服务。
(1)节点(Node)——执行单元
1.执行具体任务的进程,独立运行的可执行文件
2.不同节点可使用不同的编程语言,可分布式运行在不同主机
3.节点在系统中的名称必须唯一
(2)节点管理器(ROS Master)——控制中心
:为节点提供命名和注册服务
:跟踪和记录话题就/通信服务,辅助节点相互查找,建立连接
:提供参数服务器,节点使用服务器存储和检索运行时的参数
(3)话题(Topic)—— 异步通信机制
:节点间用来传输数据的重要总线
:使用发布/订阅模型,数据有发布者传输到订阅者,同一个话题的订阅者可以不唯一;
(4)消息(Message)——话题数据
:具有一定的类型和数据结构,包括ROS提供的标准用户自定义类型
:使用编程语言无关的.msg文件定义,编译过程生成对应的代码文件
(5)服务(Service)——同步通信机制
:使用客户端/服务器(C/S)模型,客户端发送请求数据,服务端完成处理后返回应答数据;
:使用编程语言无关的.src文件定义请求和应答数据结构,编译过程中生成对应的代码文件
(6)Topic和Service
(7)参数(Parameter)——全局共享字典
:可通过网络访问的共享,多变量字典
:节点使用此服务器来存储和检索运行时的参数
:适合存储静态,非二进制的配置参数,不适合存储动态配置的数据
(8)文件系统
元功能包
功能包
功能包清单
4.ROS的工作机制
参考文章:ROS是什么
5.ROS的系统架构
参考文章: ROS的系统架构.
ROS基本命令行工具的使用
//2022.4.6
1.ROS “hello world”小乌龟模拟实验步骤
先后打开终端分别输入命令(打开Ctrl+Alt+t)注意,每输入一个命令都需要重新打开一个终端。因为这里的每一条命令都会对终端占用。
1启动ROS Master
roscore2 启动小乌龟仿真器
rosrun turtlesim turtlesim_node3 启动小乌龟控制节点
rosrun turtlesim turtle_teleop_key
这个终端窗口必须置顶才能键盘控制rqt_graph//打开节点图可以更直观地看到这两个节点间传递消息的主题(基于QT的可视化工具)turtlesim是一个功能包;先打开turtlesim_node节点(小乌龟);再打开turtle_teleop_key节点(键盘控制)
ps:
/teleop_tutle:键盘控制节点
/turtlesim:仿真器节点
/turtle/cmd_vel:一个话题
键盘控制节点将输入的指令打包成话题传给仿真器节点
roscore指令是在运行ROS操作系统首先运行的指令;
rosrun指令(启动新节点)是运行ROS某个功能包的某个节点的指令,后面加的参数是功能包名和节点名;
运行成功如图:
按下Tab键可以查看功能包包含的节点
2.基本指令
a.可视化工具rqt
(1)rqt_graph
rqt_graph
显示当前正在运行的节点关系图
(2)rqt_plot
rqt_plot
b.rosnode相关指令
list和info比较常用
rosnode list
rosnode list:获取正在运行的节点
ps:/rosout:这个节点始终是有的,随着roscore的运行而运行;
rosnode info (+某节点)
rosnode info node1:查看节点“node1”的具体信息
rosnode ping (+某节点)
rosnode machine (+某节点)
rosnode kill (+某节点)
rosnode cleanup (+某节点)
c.话题指令rostopic(使用主题与节点交互)
rostopic list (查看主题清单)
rostopic list
rostopic echo查看节点通过话题发出的消息
rostopic echo
rostopic pub (-r 频率)发布主题
3.结合小海龟实验的运用
roscore
rosrun turtlesim turtlesim_node
rosrun turtlesim turtle_teleop_key
rqt_graph
图片表示两个节点用话题进行通讯;
rosnode list
/rosout:这个节点始终是有的,随着roscore的运行而运行;
rosrun info /turtlesim
Publications: (发布的话题)* /rosout [rosgraph_msgs/Log]* /turtle1/color_sensor [turtlesim/Color]* /turtle1/pose [turtlesim/Pose]Subscriptions: (订阅的话题)* /turtle1/cmd_vel [geometry_msgs/Twist]Services: (提供的服务)* /clear* /kill* /reset* /spawn* /turtle1/set_pen* /turtle1/teleport_absolute* /turtle1/teleport_relative* /turtlesim/get_loggers* /turtlesim/set_logger_level
rostopic list
//列出当前话题
/rosout
/rosout_agg
/turtle1/cmd_vel
/turtle1/color_sensor
/turtle1/pose
//Tab键补全
rostopic pub /turtle1/cmd_vel geometry_msgs/Twist(消息结构) "linear:x: 0.0y: 0.0z: 0.0
angular:x: 0.0y: 0.0z: 0.0"
(linear线速度angular角速度)
rostopic pub -r 10 加频率实现循环
rosmsg show geometry_msgs/Twist查看消息结构
geometry_msgs/Vector3 linearfloat64 xfloat64 yfloat64 z
geometry_msgs/Vector3 angularfloat64 xfloat64 yfloat64 z
rosservice list服务列表
/clear
/kill
/reset
/rosout/get_loggers
/rosout/set_logger_level
/spawn产生
/teleop_turtle/get_loggers
/teleop_turtle/set_logger_level
/turtle1/set_pen
/turtle1/teleport_absolute
/turtle1/teleport_relative
/turtlesim/get_loggers
/turtlesim/set_logger_level
rosservice call 服务名
//请求服务
召唤第二只小海龟
rosservice call /spawn "x: 2.0
y: 2.0
theta: 2.0
name: 'turtle2'"
name: "turtle2"
保存数据
== -a是全部保存 -大o是以压缩包形式保存==
== Enter后要加Ctrl+C==
rosbag record -a -O 压缩包名
播放数据
rosbag play 压缩包名
创建工作空间和功能包
创建工作空间
一共要创建4个文件夹(主工作空间下)
src:代码空间
build:编译空间
devel:开发空间
install:安装空间
1.mkdir 一个工作空间workspace1(自定义文件名)
2.cd workspace并mkdir src(放工程包和源码,只能叫src)
3.catkin_init_workspace(指令)初始化
4.cd到workspace1,输入catkin_make(指令),会创建出bulid和devel文件夹
5.输入catkin_make install,会创建出install文件夹
简而言之
1.mkdir 自定义文件夹(现在的根目录)
2.根目录下分别输入catkin_make和catkin_make install命令创建bulid,devel和install文件夹
3.根目录下mkdir src文件夹,用catkin_init_workspace命令初始化src文件夹
创建功能包
发布者Publisher的编程实现
#include "ros/ros.h"
#include "std_msgs/String.h"
#include <sstream>
int main(int argc, char *argv[])
{/* code */ros::init(argc,argv,"erGouZi");ros::NodeHandle nh;ros::Publisher pub = nh.advertise<std_msgs::String>("fang",10);std_msgs::String msg;ros::Rate rate(10);int count = 0;while(ros::ok()){count++;//msg.data = "hello";std::stringstream ss;ss << "hello" << count;msg.data = ss.str();pub.publish(msg);ROS_INFO("%s",ss.str().c_str());rate.sleep();}return 0;
}
订阅者Subsciber的编程实现
#include "ros/ros.h"
#include "std_msgs/String.h"//using namespace ros;void doMsg(const std_msgs::String:: ConstPtr &msg){ROS_INFO("cuihua dingyue de shuju:%s",msg->data.c_str());
}int main(int argc, char *argv[])
{/* code */ros::init(argc,argv,"cuiHua");ros::NodeHandle nh;ros::Subscriber sub = nh.subscribe("fang",10,doMsg);ros::spin();return 0;
}
话题信息的定义和使用
客户端Client的编程实现
服务端Serve的编程实现
参数的使用和编程方法
ROS中的坐标系管理系统
tf坐标系广播与监的听的编程实现
launch启动文件的使用方法
常用可视化工具的使用
ROS移动机器人实战
ROS机器人操作系统学习记录相关推荐
- ROS机器人操作系统学习笔记(三)ROS通信架构
ROS机器人操作系统学习笔记(三)ROS通信架构 ROS的通信架构是ROS的灵魂,也是整个ROS正常运行的关键所在.ROS通信架构包括各种数据的处理,进程的运行,消息的传递等等.本章主要介绍了通信架构 ...
- ROS机器人操作系统学习(二)
ROS机器人操作系统学习(二) ROS概念 通信机制+开发工具+应用功能+生态系统 提高机器人研发中的软件复用率 通信机制 松耦合分布式通信 开发工具 应用功能 生态系统 节点与节点管理器 话题与服务 ...
- ROS机器人操作系统学习笔记(一)--基本概念
ROS机器人操作系统学习教程(一)–基本概念 1. 基本概念 1.1 ROS背景 机器人操作系统(Robot Operating System, ROS)是一个应用于机器人上的操作系统,它操作方便.功 ...
- ROS(indigo)机器人操作系统学习有趣丰富的Gazebo仿真示例evarobot
通过网页快速了解Linux(Ubuntu)和ROS机器人操作系统,请参考实验楼在线系统如下: 初级教程可参考:https://www.shiyanlou.com/courses/854 邀请码:U23 ...
- 入门ROS机器人操作系统——准备工作
近期入门学习ROS机器人操作系统,有时间记录一下踩坑过程,给后来者提供参考,也方便自己后期查阅. 首先,分享几个软件安装包: 1. 虚拟机VMware16 链接:https://pan.baidu.c ...
- ROS机器人操作系统底层原理及代码剖析
0 目的 本文介绍ROS机器人操作系统(Robot Operating System)的实现原理,从最底层分析ROS代码是如何实现的. 1 序列化 把通信的内容(也就是消息message)序列化是通信 ...
- Windows使用ROS机器人操作系统全面资料汇总
0 摘要: 本文以Win10系统中安装使用ROS1Melodic和ROS2Dashing为基础,并通过开源硬件设备Arduino与ROS的通信为示例,具体介绍机器人操作系统ROS1和ROS2的细节.部 ...
- ROS机器人操作系统——如何将ROS与STM32连接(十六)
ROS机器人操作系统 文章目录 ROS机器人操作系统 前言 一.两种控制器的功能 二.硬件连接 总结 前言 前面学习了ROS的基本操作,仅仅只使用这个操作系统并没有什么用处,还需要讲他与硬件相结合从而 ...
- ROS机器人操作系统暑期学校总结和感悟
https://discourse.ros.org/t/ros-summer-school-in-china-2019-july-27-august-hefei/9494 中国ROS暑期学校将迎来五周 ...
- ROS 机器人操作系统进阶实战
ROS(Robot Operating System) 是一个开源的机器人操作系统,目的是提供开发平台.工具及生态给开发人员,可以让开发人员快速开发.本课程通过精心设计的案例,分析技术要点.理解运行原 ...
最新文章
- Python中内建模块collections常见用法总结
- Vivado清理和压缩工程的方法
- java调用静态方法原理_传智播客:Java学科08static关键字的概述和使用格式以及静态原理...
- HDFS(一) HDFS设计目标
- 看得懂的设计模式 享元模式python3 最基本(简单)实现
- semver语义化版本号
- 数据挖掘:模型选择——KNN
- Python安装Tensorflow
- 设计模式第一篇---懒汉模式
- 直接创建和使用struct函数
- WINDOWS系统还原后原来多个分区合并为一个分区后怎么恢复数据?
- android手机为什么越用越卡
- UI设计图的标注工具大比拼
- create方法 eslint关闭_react create-react-app使用less 及关闭eslint
- TP50、TP90、TP99、TP999
- Redis11_缓存穿透和雪崩
- 【MW】Drop Materialized View Hangs with 'Enq: JI - Contention'
- Android面试题及答案3
- 解决Pycharm运行TensorFlow找不到库的问题
- 移动手机网站的用户设计需求
热门文章
- Win10安装Ruby
- DelphiXE10.2.3 Firemonkey下窗体的编译异常处理
- 开源免费CRM云端的客户管理系统SuiteCRM简介(视频)
- WPF TextBox 设置多行
- 使用Outlook对邮件进行分类
- eclipse插件下载最新地址
- java canvas 画线_java – 在扩展Canvas时使用drawLine()绘制粗线
- Arduino-LiquidCrystal_I2C 液晶库
- 网络语言维c是什么意思,我不要你觉得,我要我觉得!19年网络流行词是这些!...
- Axure RP 9下载安装