ros入门学习——基于古月居的学习笔记

了解Linux系统是啥,了解Linux系统的简单操作指令(在命令行之中)

ros入门学习——基于古月居的学习笔记_第1张图片

mkdir创建文件夹

cd索引到某个目录

ls显示当前目录下的文件

touch创建一个文件

mv移动一个文件到一个地方

cp复制一个文件到一个地方

rm删除一个文件

rm - r删除一个文件夹

sudo可以提升用户权限,做一些大事

xxx --help可以查看指令操作方法

tab键可以轻松补全命令行代码

多练就会了

c++和python在命令行之中的区别

ros入门学习——基于古月居的学习笔记_第2张图片

c++得先通过g++编译器进行编译,-o代表编译成什么名字的可执行文件,再执行。python是一个解析型的语言,不需要编译,直接解析器解析便可运行

./是运行某个程序或者脚本的指令
 

ros安装(用的小鱼的一键安装)

没按照视频内一步步去配置,直接在ubuntu20.04中使用https://fishros.org.cn/forum/topic/20/%E5%B0%8F%E9%B1%BC%E7%9A%84%E4%B8%80%E9%94%AE%E5%AE%89%E8%A3%85%E7%B3%BB%E5%88%97?lang=zh-CN  这个的教程一键安装,挂个梯子去安装,没有梯子就换源

ros相关概念

ros入门学习——基于古月居的学习笔记_第3张图片

主要核心就是提高机器人研发之中的软件复用率(ros就相当于安卓操作系统,一种机器人的操作系统,用别人造好的轮子)

 ros入门学习——基于古月居的学习笔记_第4张图片

话题通信是单向不断传输(多次)

服务通信是双向,有请求有应答(通常一次)

ros入门学习——基于古月居的学习笔记_第5张图片

文件系统结构

ros命令行工具

常用命令

  • rostopic
  • rosservice
  • rosnode
  • rosparam
  • rosmsg
  • rossrv

都可以使用 xxx list 来查看话题列表

小海龟三步走:

ros入门学习——基于古月居的学习笔记_第6张图片

ros工作空间

ros入门学习——基于古月居的学习笔记_第7张图片

ros入门学习——基于古月居的学习笔记_第8张图片

                                                             工作空间的创建流程

catkin_make 创建devel和build文件

catkin_make install 创建install文件

src用于存放功能包源码/ devel是“开发中” install是“集成后” 的可执行文件 / build是编译过程中二进制文件

ros入门学习——基于古月居的学习笔记_第9张图片

                                                              添加依赖的操作

主要文件:package.xml包含了功能包的基本信息  CMakeLists.txt包含功能包的编译规则

核心思路就是:

  1. 创建并且初始化工作空间
  2. 在工作空间内创建功能包,并且得在src里面
  3. 在功能包内完成代码的组织,编译,运行

话题通信(异步)——发布/订阅

ros入门学习——基于古月居的学习笔记_第10张图片

                                                                 核心流程图

发布者Publisher的编程实现(cpp和py操作不一样)

工作空间中的功能包依赖别配少了!!!!!!!!!!!!!!!!!!!

  • 初始化ros节点(初始化
  • 向ros master注册节点信息,包括发布的话题名和话题中的消息类型(注册
  • 创建消息数据(创建
  • 按照一定的频率循环发布消息(发布

cpp是要生成可执行文件,并且链接到ros库,继而在终端编译

add_executable(velocity_publisher src/velocity_publisher.cpp)#将程序文件生成可执行文件
target_link_libraries(velocity_publisher ${catkin_LIBRARIES})#将可执行文件与ros库链接
catkin_make # 编译

python只需要勾选选现让他具有可执行权限就行

右键py文件,点击属性,找到权限,把执行那一栏点成对勾

ros入门学习——基于古月居的学习笔记_第11张图片

!!!!一定一定要注意,下面这个一般默认是找python2,ros要的是python3!!!!!

要在这句话后面加上个“3”,就是在源代码之中加,不然跑不了python代码!!!

不想每次都加3还有两种办法

  • 去.bashrc文件把python对应的版本号更改成python3
  • 直接删除系统自带的python2,重新配置python环境
#!/usr/bin/env python

ROS基础(二)——发布者Publisher的编程实现_ros的publisher-CSDN博客

一劳永逸设置环境变量

主文件夹ctrl+h显示隐藏文件,在.bashrc文件的最后一行添加环境变量的声明

只有工作空间的环境变量在当前环境中生效,才能找到文件
 

source ~/catkin_ws/devel/setup.bash

订阅者Subscriber的编程实现
 

  • 初始化ros节点
  • 订阅需要的话题
  • 循环等待话题消息,接收到消息后进入回调函数
  • 在回调函数中完成消息处理

话题消息的自定义和使用

ros入门学习——基于古月居的学习笔记_第12张图片

编译生成语言相关文件与上文发布者和订阅者的编程实现一样

下面是cpp的编译规则

ros入门学习——基于古月居的学习笔记_第13张图片

ros入门学习——基于古月居的学习笔记_第14张图片

代码放置于此处

服务通信(同步)——请求/应答

ros入门学习——基于古月居的学习笔记_第15张图片

客户端client的编程实现

  • 初始化ros节点
  • 创建一个client实例
  • 发布服务请求数据
  • 等待server处理之后的应答结果

流程类似,注重代码理解

注意代码使用的python版本,教程之中是python2,要做相应修改(print的括号,以及函数名)

服务端server的编程实现

  • 初始化ros节点
  • 创建server实例
  • 循环等待服务请求,进入回调函数
  • 在回调函数中完成服务功能的处理,并反馈应答数据

此处python比cpp多了一个“多线程”的步骤,因为python中没有spinOnce这个函数

服务数据的定义和使用

ros入门学习——基于古月居的学习笔记_第16张图片

                                                        自定义服务数据所处位置

ros入门学习——基于古月居的学习笔记_第17张图片

如何配置CMakeLists.txt中的编译规则

  • 设置需要编译的代码和生成的可执行文件
  • 设置连接库
  • 添加依赖项

ros入门学习——基于古月居的学习笔记_第18张图片

在如上图所在位置,上面介绍了如何配置编译规则

三个横线进行区分,以上为request数据,以下为respond数据

每次运行新的程序之前,先把roscore关掉,因为里面可能会存有很多之前保存好的参数,需要清掉

参数的使用与编程方法

ros入门学习——基于古月居的学习笔记_第19张图片

parameter server相当于定义了一个全局变量

ros入门学习——基于古月居的学习笔记_第20张图片

使用一些命令的时候,按照list里面的格式走,要把路径改成自己的

rosparam set /turtlesim/background_b 255
  • 初始化ros节点
  • get函数获取参数
  • set函数设置参数

获取/设置参数有很多操作,见wiki

Parameter Server - ROS Wiki

ros中的坐标系管理系统

简单理解机器人中的坐标变换可以看这篇文章

机器人位姿描述与坐标变换 - 知乎

简单的小海龟跟随实验,用ros内的功能包实现

ros入门学习——基于古月居的学习笔记_第21张图片

运行view_frames可能会报错,解决如下:

view_frames中错误: cannot use a string pattern on a bytes-like object_b'dot - graphviz version 2.43.0 (0)\n' traceback (-CSDN博客

小海龟跟随实验,自己去写功能包

如何实现一个tf广播器

  • 定义tf广播器
  • 创建坐标变换值
  • 发布坐标变换

如何实现一个tf监听器

  • 定义tf监听器
  • 查找坐标变换

配置cmakelists.txt中的编译规则

ros入门学习——基于古月居的学习笔记_第22张图片

launch启动文件的使用方法

ROS的launch文件是用XML格式编写的,用于描述如何启动一个或多个ROS节点。以下是launch文件的基础结构和语法:

  1. 基础结构:
    
        
    
    

    每个launch文件都以标签开始并以标签结束。

  2. 启动节点:
     

    
    

    pkg:ROS包的名称,该节点在其中定义
    type: 可执行文件的名称
    name:运行时ROS节点的名称

    1. output:

      1. 指定节点日志的输出位置
      2. 可能的值包括 "screen" (将日志输出到屏幕/终端) 和 "log" (将日志写入文件)
        
        
    2. respawn:

      • 如果此属性设置为 "true",当节点因任何原因终止时,ROS会尝试重新启动它
      • 默认值为 "false"
        
        
    3. required:

      • 如果此属性设置为 "true",当该节点终止时,它会导致roslaunch也终止所有其他节点。
      • 默认值为 "false"。
        
        
    4. ns:

      • 为节点指定一个命名空间。
      • 如果设置,节点的所有话题、服务等都会在这个命名空间下。
        
        
    5. args:

      • 为节点指定命令行参数。
        
        

ros入门学习——基于古月居的学习笔记_第23张图片

ros入门学习——基于古月居的学习笔记_第24张图片
更多标签可去

roslaunch/XML - ROS Wiki

常用可视化工具的使用

rqt工具箱——非常综合的工具

rviz——三维可视化工具(数据可视化平台)   只要按照ros的数据结构发布信息,rviz就都可以进行可视化展示,而且可扩展二次开发

gazebo——三维物理仿真平台

ros进阶

ros入门学习——基于古月居的学习笔记_第25张图片

ros入门学习——基于古月居的学习笔记_第26张图片

ros入门学习——基于古月居的学习笔记_第27张图片

你可能感兴趣的:(学习,笔记)