目录
了解Linux系统是啥,了解Linux系统的简单操作指令(在命令行之中)
发布者Publisher的编程实现(cpp和py操作不一样)
了解Linux系统是啥,了解Linux系统的简单操作指令(在命令行之中)
mkdir创建文件夹
cd索引到某个目录
ls显示当前目录下的文件
touch创建一个文件
mv移动一个文件到一个地方
cp复制一个文件到一个地方
rm删除一个文件
rm - r删除一个文件夹
sudo可以提升用户权限,做一些大事
xxx --help可以查看指令操作方法
tab键可以轻松补全命令行代码
多练就会了
c++和python在命令行之中的区别
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就相当于安卓操作系统,一种机器人的操作系统,用别人造好的轮子)
话题通信是单向不断传输(多次)
服务通信是双向,有请求有应答(通常一次)
文件系统结构
ros命令行工具
常用命令
- rostopic
- rosservice
- rosnode
- rosparam
- rosmsg
- rossrv
都可以使用 xxx list 来查看话题列表
小海龟三步走:
ros工作空间
工作空间的创建流程
catkin_make 创建devel和build文件
catkin_make install 创建install文件
src用于存放功能包源码/ devel是“开发中” install是“集成后” 的可执行文件 / build是编译过程中二进制文件
添加依赖的操作
主要文件:package.xml包含了功能包的基本信息 CMakeLists.txt包含功能包的编译规则
核心思路就是:
- 创建并且初始化工作空间
- 在工作空间内创建功能包,并且得在src里面
- 在功能包内完成代码的组织,编译,运行
话题通信(异步)——发布/订阅
核心流程图
发布者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文件,点击属性,找到权限,把执行那一栏点成对勾
!!!!一定一定要注意,下面这个一般默认是找python2,ros要的是python3!!!!!
要在这句话后面加上个“3”,就是在源代码之中加,不然跑不了python代码!!!
不想每次都加3还有两种办法
- 去.bashrc文件把python对应的版本号更改成python3
- 直接删除系统自带的python2,重新配置python环境
#!/usr/bin/env python
一劳永逸设置环境变量
主文件夹ctrl+h显示隐藏文件,在.bashrc文件的最后一行添加环境变量的声明
只有工作空间的环境变量在当前环境中生效,才能找到文件
source ~/catkin_ws/devel/setup.bash
订阅者Subscriber的编程实现
- 初始化ros节点
- 订阅需要的话题
- 循环等待话题消息,接收到消息后进入回调函数
- 在回调函数中完成消息处理
话题消息的自定义和使用
编译生成语言相关文件与上文发布者和订阅者的编程实现一样
下面是cpp的编译规则
代码放置于此处
服务通信(同步)——请求/应答
客户端client的编程实现
- 初始化ros节点
- 创建一个client实例
- 发布服务请求数据
- 等待server处理之后的应答结果
流程类似,注重代码理解
注意代码使用的python版本,教程之中是python2,要做相应修改(print的括号,以及函数名)
服务端server的编程实现
- 初始化ros节点
- 创建server实例
- 循环等待服务请求,进入回调函数
- 在回调函数中完成服务功能的处理,并反馈应答数据
此处python比cpp多了一个“多线程”的步骤,因为python中没有spinOnce这个函数
服务数据的定义和使用
自定义服务数据所处位置
如何配置CMakeLists.txt中的编译规则
- 设置需要编译的代码和生成的可执行文件
- 设置连接库
- 添加依赖项
在如上图所在位置,上面介绍了如何配置编译规则
三个横线进行区分,以上为request数据,以下为respond数据
每次运行新的程序之前,先把roscore关掉,因为里面可能会存有很多之前保存好的参数,需要清掉
参数的使用与编程方法
parameter server相当于定义了一个全局变量
使用一些命令的时候,按照list里面的格式走,要把路径改成自己的
rosparam set /turtlesim/background_b 255
- 初始化ros节点
- get函数获取参数
- set函数设置参数
获取/设置参数有很多操作,见wiki
ros中的坐标系管理系统
简单理解机器人中的坐标变换可以看这篇文章
简单的小海龟跟随实验,用ros内的功能包实现
运行view_frames可能会报错,解决如下:
小海龟跟随实验,自己去写功能包
如何实现一个tf广播器
- 定义tf广播器
- 创建坐标变换值
- 发布坐标变换
如何实现一个tf监听器
- 定义tf监听器
- 查找坐标变换
配置cmakelists.txt中的编译规则
launch启动文件的使用方法
ROS的launch
文件是用XML格式编写的,用于描述如何启动一个或多个ROS节点。以下是launch
文件的基础结构和语法:
- 基础结构:
<launch> <!-- launch file contents --> </launch>
每个launch文件都以
<launch>
标签开始并以</launch>
标签结束。 -
启动节点:
<node pkg="package_name" type="node_type" name="node_name" />
pkg:ROS包的名称,该节点在其中定义
type: 可执行文件的名称
name:运行时ROS节点的名称-
output:
- 指定节点日志的输出位置
- 可能的值包括 "screen" (将日志输出到屏幕/终端) 和 "log" (将日志写入文件)
<node pkg="package_name" type="node_type" name="node_name" output="screen" />
-
respawn:
- 如果此属性设置为 "true",当节点因任何原因终止时,ROS会尝试重新启动它
- 默认值为 "false"
<node pkg="package_name" type="node_type" name="node_name" respawn="true" />
-
required:
- 如果此属性设置为 "true",当该节点终止时,它会导致roslaunch也终止所有其他节点。
- 默认值为 "false"。
<node pkg="package_name" type="node_type" name="node_name" required="true" />
-
ns:
- 为节点指定一个命名空间。
- 如果设置,节点的所有话题、服务等都会在这个命名空间下。
<node pkg="package_name" type="node_type" name="node_name" ns="namespace" />
-
args:
- 为节点指定命令行参数。
<node pkg="package_name" type="node_type" name="node_name" args="arg1 arg2" />
- 为节点指定命令行参数。
-
更多标签可去
常用可视化工具的使用
rqt工具箱——非常综合的工具
rviz——三维可视化工具(数据可视化平台) 只要按照ros的数据结构发布信息,rviz就都可以进行可视化展示,而且可扩展二次开发
gazebo——三维物理仿真平台