200字范文,内容丰富有趣,生活中的好帮手!
200字范文 > 古月居《ROS入门21讲》零基础学习笔记

古月居《ROS入门21讲》零基础学习笔记

时间:2019-08-09 07:59:50

相关推荐

古月居《ROS入门21讲》零基础学习笔记

文章目录

前言1.课程简介2.Linux系统介绍及安装3.Linux基础操作(操作集)命令结构常用命令快捷操作4.cpp&python极简基础(操作集)简单对比安装编译器编译和运行5.安装ROS6.ROS是什么7.ROS的核心概念8.ROS命令行工具的使用(操作集)9.创建工作空间与功能包概念创建工作空间创建功能包10.发布者publisher的编程实现11.订阅者subscriber的编程实现12.话题消息的定义与使用13.客户端Client的编程实现14.服务段Server的编程实现15.服务数据的定义与使用16.参数的使用与编程方法17.ROS中的坐标系管理系统19

前言

”怕什么真理无穷,进一寸有一寸的欢喜。”

——古月 适

本人大一小白一枚,参加了一个本科生科研项目,目前正在学习一些ROS1相关的一些前置基础知识。

在这里以博客的形式记录一下学习的过程、操作的细节及操作的结果、爬坑方法、听课笔记。

希望能给同样在学习相关知识的小伙伴一些问题解决的参考以及学习之路的陪伴。

我是基本按照导师推荐的B站上古月居的《ROS入门21讲》(ROS1)走的

本博客也是按照学习顺序的笔记

1.课程简介

老师的课程使用的是Ubuntu18.04,ROS melodic

我用的是Ubuntu20.04,ROS noetic

由于都是ROS1,所以原理和操作相同

2.Linux系统介绍及安装

先下载VMware

然后建议上某宝安装想要的ubuntu和ros

(推荐 大熊一加一)

此处含泪删除上千字搞机记录

3.Linux基础操作(操作集)

命令结构

命令 选项 参数

command option parameter

之间都要加空格

常用命令

pwd查看终端所在路径(Print Working Directory)

cd切换路径(注意斜杠前面有空格)(change directory)

cd . .跳回到上级目录(cd和dot之间也要有空格)mkdir 在当前路径创建目录(make directory)

ls 列出当前路径下面的所有文件夹

touch 创建新的文件(该文件相当于text记事本)

mv 移动文件(move)

(在该文件所在目录的路径下执行此操作)

cp 复制粘贴文件 (copy)

(在该文件所在目录的路径下执行此操作)

(cp 文件名 目标目录/重命名的新名称)

rm 删除某个文件(remove)

rm -r 删除一个文件夹(recursive递归)

(要删除的文件夹后面加不加斜杠效果好像一样,不知道斜杠的使用逻辑)

sudo 提升用户权限(super user do超级用户!)

(这里以获取软件更新权限为例)

“- - help “查看帮助

快捷操作

Tab快速补全。

长长的文件名可以用Tab补全

若文件名首字母有歧义,按两次,出选项用方向上下键调出之前的命令

不想找的时候按Ctrl+C,自己输命令文件名前面加dot是隐藏文件

4.cpp&python极简基础(操作集)

简单对比

cpp适合底层硬件开发、框架开发python适合应用层、算法的开发不同场景选择不同语言

安装编译器

安装g++编译器

安装python编译器(点击方向上键重复前一步操作,g++改成python就行了)

出了点问题

在CSDN上找到解决方法,解决方式如下

编译器安装完成

老师简单讲了一下语言逻辑。并将使用一些源码做演示教学。我在他的微信公众号上进入了github文件地址并下载了源码。

但是没能够像老师一样简单地复制粘贴到虚拟机。

最后呢,关掉虚拟机改了一个虚拟机设置,把硬件CD/DCD里面,使用ISO文件改成了使用物理驱动器自动检测。(不知道这一步有没有作用)

后面还是拖不动下载的文件夹。但是大文件夹里面的linux文件夹可以拖进虚拟机。我试了一下另一个下面有子目录的文件夹,也是可以拖进去的。或许是因为大文件夹太大了?我不知道。拖到桌面,出现奇怪东东,不明白。(后来重启虚拟机之后消失了)

啊这,我成功吧教学文件夹拖进虚拟机了。方法是什么呢?。。。把文件夹名字改短。。。

我又把里面的文件夹拖到桌面,再把原空白目录删除。这一波下来和老师的直接拖动效果一样了,不失为一种办法。

编译和运行

下面开始编译和运行cpp for 循环的文件。

g++ 文件名 -o 输出的可执行的文件的名字

g++ c++_for.cpp -o c++_for

./ 运行文件

./c++_for

python不用编译,直接用

结果寄,SyntaxError: Missing parentheses in call to ‘print‘

记得我之前安装python编译器的时候有过改动,大概偏差出在那里。

于是我进python文件修改了一下语法(print改为print()),与胡老师课件上有一点点不同,运行成功。

再运行cpp while程序,连按多次方向上键,调出前前条命令。

做了一件小事,在虚拟机上安装了IDE。关于我决定在虚拟机上学编程这件事,原因一是新鲜感多一些,二是有一位计算机大佬朋友就是这么做的。据说有一些指令会很方便。在虚拟机上安装IDE的时候,我在clion和VScode两者之间还纠结了一阵,最终选择了后者。一方面是之前使用了一段时间clion体验不佳,让我满意的只是图表和页面比较好看;另一方面是听说VS的功能比较强大,甚至可以和人工智能ChatGPT交流,爱了爱了。安装的过程和结果也很干净,期待接下来的学习。

5.安装ROS

省流:上某宝

6.ROS是什么

通信机制+开发工具+应用功能+生态系统

提高机器人研发中的软件复用率

学习过程中建议用谷歌搜索,搜到wiki的网站

(ROSwiki是记录ROS信息文档的主要论坛)

7.ROS的核心概念

这节课新概念还是比较多的,可以二刷课程。

8.ROS命令行工具的使用(操作集)

(开始实操)

键盘突然在虚拟机用不了了。有效解决方案

rosrun

roscore启动ROS master(要首先运行的一个指令)

rosrun来运行一个节点(要呼出一个新终端)(加两个参数,功能包名 节点名)(输入功能包名后按tab可以显示功能包下有的节点)

光标要再键盘控制节点的那个窗口才能控制

rqt_graph

rqt_graph用来显示系统计算图的工具(直观,可视化,了解系统全貌)(显示了节点和话题的信息)

rosnode

rosnode list(列出系统当中使用的节点)(rosout是ros默认的一个话题)

rosnode info(查看某个节点的信息)(发布和订阅的信息)

rosnode info /turtlesim

rostopic

看到下面的cmd_vel就是刚才就是键盘控制节点和海龟仿真器节点通讯的话题

学会使用tab, 这里输入消息类型的时候还要连按两次tab

用pub发布数据给某一个topic后面跟话题名再后面跟消息结构(类型)再跟消息结构里的具体数据

rostopic pub /turtle1/cmd_vel geometry_msgs/Twist "linear:x: 1.0y: 0.0z: 0.0angular:x: 0.0y: 0.0z: 0.0"

注意这里线速度的单位是米每秒,角速度单位弧度每秒)

在调具体数据的时候,移动光标只可以用左右方向键(用上下是会调出历史命令)

看到小海龟向左前方45度移动了一小段

想让小海龟连续移动

-r 表示rate, 10表示10Hz

rostopic pub -r 10 /turtle1/cmd_vel geometry_msgs/Twist "linear:> x: 1.0> y: 1.0> z: 0.0> angular:> x: 0.0> y: 0.0> z: 0.0"

调angular的z调旋转

看到方向和角速度都是可以调的

圆圈的半径也符合速度和角速度的计算

在前面加负号也有意义

rosmsg

rosmsg show显示消息的数据结构

这里吐槽一下,好像不方便改设备的名称

改了之后节点之间的通讯会出现问题

只好继续用ros-virtual-machine了。。

rosservice

rosservice list(提供的所有服务)(服务端都是仿真器)(客户端是终端)

rosservice call 召唤新海龟

rosservice call /spawn "x: 2.0y: 2.0theta: 0.0name: 'turtle2'"

可以看到是有一个反馈的(反馈信息name: “turtle2”)

话题记录rosbag record -a -O cmd_record(rosbag 记录 all -大写O保存成压缩包 压缩包的名字)

看到了订阅的话题

随便让海龟动几下

结束之后在终端ctrl+c

默认保存到了主文件夹

从回车之后就开始记录了,包括没有操作的等待时间

话题复现rosbag play cmd_record.bag

9.创建工作空间与功能包

概念

工作空间(workspace)是一个存放工程开发相关文件的文件夹。所有的源码、配置文件、可执行文件都是放置在里面的。主要分为四个文件夹:1.src: 代码空间 (source space)

放置功能包(里面的代码、配置文件、launch文件2.build:编译空间 (build space)

编译过程中的中间文件(不太用关心3.devel:开发空间 (development space)

编译生成的一些可执行文件、库、脚本4.install:安装空间 (install space)

install命令的结果就放在里面

放一张老师课件截图:

创建工作空间

overview:

operation:

catkin_init_workspace //初始化工作空间(属性变化),看到冒出了CMakeLists.txt

下面对工程编译(catkin_make要来到工作空间的根目录进行编译

看到出现了另两个空间:

使install空间出现:

创建功能包

功能包是放置ROS源码的最小单元同一个工作空间下不允许存在同名功能包

创建功能包:

(要放在src里面):

命令 功能包名 依赖1 依赖2 依赖3:

catkin_create_pkg test_pkg roscpp rospy std_msgs

打开功能包:

include放置头文件

src放代码

后面两个文件是功能包一定有的,使其区别于普通文件夹的属性

编译功能包

还是先回到catkin_ws

编译工作空间就行了

因为没有代码所以也没有实际效果

要运行功能包里某一个程序的话,要先设置一下工作空间的环境变量

设置之后系统才能找到工作空间

设置环境变量

ros@ros-virtual-machine:~/catkin_ws$ source devel/setup.bash

检查环境变量

用echo命令把环境变量打开(ROS_PACKAGE_PATH 是ROS本身的一个环境变量,通过这个环境变量查找所有功能包的路径)也是只有在前一步设置了工作空间的setup.bash之后,path里面才会包含工作空间的路径

ros@ros-virtual-machine:~/catkin_ws$ echo $ROS_PACKAGE_PATH /home/ros/catkin_ws/src:/opt/ros/noetic/share

有点不懂了,贴一下chatGPT的解释

回家了,没有设备支持方便地加下含所有细节的博客了。

就记录一些操作和教程不太一样的地方吧。

其实操作的话ROS的wiki官方论坛上记录的更详细一些,很全面,可复制。

10.发布者publisher的编程实现

11.订阅者subscriber的编程实现

使用老师教学包里python程序,要把python文件的第一行改成python3

12.话题消息的定义与使用

和老师敲一样的cmake,一个空格都不能错

下面开始将service方式通讯的实现

13.客户端Client的编程实现

运行python的时候记得改成python3的语法

运行phthon文件的命令在11讲里有

14.服务段Server的编程实现

15.服务数据的定义与使用

16.参数的使用与编程方法

下面讲ros中的常用组件

17.ROS中的坐标系管理系统

有什么好说的呢,出错的地方跟着弹幕大佬改就好了

19

这里可以调整文本格式,达到高亮效果

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。