ros学习中的回顾与总结

目录

前言

1快捷键

2通信机制

2.1话题通信

2.2服务通信

2.3参数服务器

前言:跟着赵虚左老师学习ros,过程中犯了很多错踩了很多坑,所以打算记录下来,防止再犯的同时如果能帮助到大家就更好了!同时包含一些基础概念与操作用以巩固,基本上摘取自老师的文档以便重点复习。

1快捷键

shift+tab前进一格,tab后退一格

ctrl+f替换名称

alt+方向键移动代码上下顺序

vscode内文件分屏ctrl+\

ctrl+shift+o右边新开终端

ctrl+shift+e左边新开终端

ctrl+s保存

ctrl+shift+b编译

Ctrl+~进入终端

Ctrl+/自动去除#

Ctrl+h在主目录下显示隐藏目录

ctrl+alt+t 打开终端

ctrl+shift++- 放大缩小

win+空格 切换输入法

ctrl+shift+空格 调出参数列表显示

光标放在最右边不必选中直接快捷键复制粘贴

tab键(1)移动光标(2)补齐该终端下的命令

2.1话题通信(发布订阅模式)

特点:talker和listener没有启动先后顺序的要求,且建立连接后不再需要ros master

常见报错:

ros/ros.h No such file or directory .....

检查 CMakeList.txt find_package 出现重复,删除内容少的即可

<1>发布方

注意事项:老师没有演示新建Demo3的过程就打开vscode开始操作了!大伙儿如果跟我一样不细心,就容易接着上一p的内容在Demo2下面直接新建功能包了!这样会在编译过程不断报错。

1.创建工作空间,即新建一个Demo3,操作如下

(1)打开终端输入命令行

mkdir -p demo03_ws/src

cd demo03_ws/

(注意不要漏掉最后的/)

catkin_make

注意,在demo03_ws此目录下启动vscode的命令为 code .

(2)创建编译环境,快捷键ctrl+shift+b,选择catkin_make:build,点击右边小齿轮,在老师提供的安装vscode的文件里面复制粘贴修改,再在src下右键创建功能包。

(3)在cpp里打代码时注意可以输入main函数再按tab补齐,别忘了删掉参数里面的const,头文件#include"ros/ros.h" 别把/和.位置弄反了。如果coding过程中报错,检查一下语言模式有没有改为Makefile

65dec34545524970889e594be9f65d49.png

 

(4)修改配置文件

(5)任何vscode保存(Ctrl+s)后编译无问题,打开终端roscore,再开一个新的切到当前目录然后source ./devel/setup.bash,然后rosrun 加功能包名字加该功能包下src下文件名(不加cpp)

然后开一个新终端rostopic echo fang(fang为话题名称),注意要同时打开roscore rosrun rostopic 三个终端,这一步如果报错error: topic must be specified
回到demo03空间下catkin_make再source

<2>订阅方

1.注意三个终端,要先把订阅和发布的终端切到当前目录并分别catkin_make

注意事项:

1.可以使用 rqt_graph 查看节点关系

2.

订阅时,第一条数据丢失

原因: 发送第一条数据时, publisher 还未在 roscore 注册完毕

解决: 注册后,加入休眠 ros::Duration(3.0).sleep(); 延迟第一条数据的发送

2.2服务通信

特点:实时性和逻辑处理

2.2.1自定义srv

1.按照固定格式创建srv文件

功能包下新建srv目录并添加后缀为srv的文件

# 客户端请求时发送的两个数字

int32 num1

int32 num2

---

# 服务器响应发送的数据

int32 sum

 

2.编辑配置文件

(1)package.xml中添加编译依赖和执行依赖

  <build_depend>message_generation</build_depend>
  <exec_depend>message_runtime</exec_depend>


(2)CMakeList.txt编辑相关配置

find_package(catkin REQUIRED COMPONENTS

  roscpp

  rospy

  std_msgs

  message_generation

)

# 需要加入 message_generation,必须有 std_msgs

 

add_service_files(#这里就需要进行更改了

  FILES

  AddInts.srv          #srv之前的为自定义文件名

)

generate_messages(

  DEPENDENCIES

  std_msgs

)

 

(3)编译生成中间文件

C++ 需要调用的中间文件(.../工作空间/devel/include/包名/xxx.h)

后续调用相关 srv 时,是从这些中间文件调用的

2.2.2 srv文件的调用

流程:

     0.vscode配置

  1. 编写服务端实现;
  2. 编写客户端实现;
  3. 编辑配置文件;
  4. 编译并执行。

0.vscode配置

配置c_cpp_properies.json 文件,如果以前已经配置且没有变更工作空间,可以忽略

其中需要修改部分在下述代码

"includePath": [
                "/opt/ros/noetic/include/**",
                "/usr/include/**",
                "/xxx/yyy工作空间/devel/include/**" //配置 head 文件的路径 
            ],
            "name": "ROS",
            "intelliSenseMode": "gcc-x64",
            "compilerPath": "/usr/bin/gcc",
            "cStandard": "c11",
            "cppStandard": "c++17"
        }

注意事项:

1.在末尾添加路径后要在上一条路径末尾加上逗号

2.添加路径时仿照系统写至include/,后面以**抽象替代

3."cStandard"为c11,不是c++11,也不是c17

"cppStandard"为c++17

知识大总结:

(1)roslaunch启动前会先检查roscore是否启动,若没启动会自动启动

(2)追加功能包直接改配置文件就好,不必删掉重来

错误大总结:

1.首先第一个错误是建立srv文档时AddInt中的i错误设置为小写了,此时已经在devel/include/plumbing_server_client目录下建立了错误的小写般头文件,后来直接重命名更改,所以生成了两份除大小写外一致的文件。弥补措施是删除了小写的错误版本,但还是不可行

309418eecea34d1d9d42b2f4f4e91e52.png

 删除之后的报错如下

/home/coal/demo03_ws/src/plumbing_server_client/src/demo01_server.cpp:7:37: error: ‘plumbing_server_client::AndInts’ has not been declared
    7 | bool doNums(plumbing_server_client::AndInts::Request &request,

2.错误:把catkin的CMakeList改掉了,而且作为动态链接,修改一个另一个也会被更改,修改了你的一个工作空间的主CMakeLists.txt文件的,下一个工作空间也会一直用已经修改的那个文件的代码,导致无法挽回的错误。

重新按照教程打了一遍,成功后在服务器终端不小心键入了e,导致不停在总文件的CMakeList里面键入e,删除了pplumbing_server_client后发现还是报错,打开终端键入ctrl+c终止键入。但CMakeList原文件找不到了。

报错如下:CMake Error at CMakeLists.txt:12 (execute_process):   execute_process given unknown argument "ERROR_STRIP_TRAILG_WHITESPACE".

拯救方案:

http://t.csdn.cn/upELc

通过核对文件内容发现我在清除e时不小心删除了多余的文档内容,其中TRAILG应为TRAILING,修改之后编译成功!

3.需要两次键入tab才能显示完整命令行f1a65131e2fc4b5b9797e39ca8114b59.png

 4.修改配置文件时不细心,复制时缺漏内容0430cc031347499ab7ac025de5bc747e.png

 一开始检查发现devel/lib下面没有demo02_client,直接建立了文件,但是不同于本来就有的demo01_server(二进制文件不支持打开),为空白文档仍然报错。后来核对配置文件找到错误。

9cdbade299b24f3fa67bf46f05991ab2.png

5.区别同名,两个response但要选钥匙图标的

919fe5ade91d416b842d38c9f04eacd6.png

6.json文件中路径查看

8156292c923c4965900ed3311be9caf1.png

选中devel/include右键在集成终端打开然后键入pwd 

7.tab不能补齐

(1)第一次键入时为正常现象

(2)刷新环境

(3)检查是否在当前目录文件下,是否进入对应的工作空间

8.报错显示核心已转储的是因为节点名称“my_contorl”中把_打成空格了

18bb078682b4499a990ba56a48c2ae9b.png

 9./的位置,最后一行在字母前,第二行在引号后面

e20ea8da86784d9b86d8c97afc9597df.png

 10.0要打在引号外面

a0fb44d2922b442c90a544ff634a545c.png

 11.打不开VirtualBox

9e59c942e202422ea98e868c6ce1ecbf.png

重启电脑之后成功打开

12.The VM sesseion was aborted(异常退出)

788d722dfafb483295eb3dc1fc42a3a7.png

 (1)取消设置中声音的配置(设置——声音——启用声音  取消勾选)

(2)再重启电脑

13.别忘记切换目录

fa24c68f176a4becae74ec1ba3212c8f.png

 14.添加头文件并保存编译后仍然报错

(1)重启vs,成功了一次

(2)第二次不成功,排查到配置文件发现路径中include后多打了一个空格,并且把所有直接去掉#的内容补回去了

15ed907067654eabb40399361f07510e.png

15.没有启动roscore

7b6a4093520548a8bac16beb8cba5d16.png

 16.忘记打/

a250d59ee5cd42b2b19fa570164c90d5.png

33603a6c6b784fae96f7e1c47dcccf5b.png

 17.挨个添加配置文件的turtle仍然报错,但rename02成功了,初步怀疑是添加功能包错了,明天再查

5523724e174d4eebb8d428ce84788c9a.png

没查,但是另一个文件报错提示相同,关掉vscode再打开就能编译了

 

 

 

 

  • 2
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
ROS的laser_filters软件包是一个用于激光扫描数据过滤和处理的工具包。它提供了一些常用的滤波器和处理器,可以帮助你处理激光扫描数据,以获得更准确和可靠的结果。 要学习laser_filters软件包,你可以按照以下步骤进行: 1. 安装ROS:首先,确保你已经安装了ROS (Robot Operating System)。你可以根据你的操作系统版本在ROS官方网站上找到安装指南。 2. 下载laser_filters软件包:一旦你安装了ROS,你可以使用以下命令下载和安装laser_filters软件包: ``` $ sudo apt-get install ros-<distro>-laser-filters ``` 在上述命令,`<distro>` 是你所使用的ROS发行版的名称,比如`melodic`或`noetic`。 3. 学习文档和示例:laser_filters软件包的文档和示例可以在ROS官方文档网站上找到。你可以阅读文档以了解软件包的功能和用法,并参考示例程序来理解如何使用各种滤波器和处理器。 在ROS官方文档网站上,你可以找到laser_filters软件包的API文档、教程和示例代码。这些资源将帮助你学习如何在ROS使用laser_filters软件包来处理激光扫描数据。 4. 实践和调试:学习了软件包的基本用法后,你可以开始实践并调试你自己的代码。尝试在ROS环境加载laser_filters软件包并使用其的滤波器和处理器来处理实际的激光扫描数据。 你可以尝试不同的滤波器和处理器,并根据需要进行参数调整,以获得最佳的结果。通过实践和调试,你将更好地理解laser_filters软件包的功能和使用方法。 希望这些步骤能帮助你开始学习ROS的laser_filters软件包!如果你有任何进一步的问题,请随时提问。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值