ROS初级教程学习笔记

ROS 初级教程学习笔记

a 环境的配置及软件包的创建和编译

b ROS 节点,话题,服务和参数 (rqt_console和roslaunch)调试

c 创建ROS消息和ROS 服务(rosmsg, rossrv, roscp 命令行使用),使用python&C++编写消息发布器和订阅器,并测试

d 编写Service和Client,并测试

e 录制和回放bag 包

一. 安装配置

1. 参考优快云链接山水Ubuntu ROS Kinetic安装

2. 管理空间

查看环境变量:

$ printenv | grep ROS

注意: 在所有教程中你将会经常看到分别针对 rosbuildcatkin 的不同操作说明,这是因为目前有两种不同的方法可以用来组织和编译ROS应用程序。一般而言,rosbuild 比较简单也易于使用,而 catkin 使用了更加标准的 CMake 规则,所以比较复杂,但是也更加灵活,特别是对于那些想整合外部现有代码或者想发布自己代码的人。关于这些如果你想了解得更全面请参阅 catkin or rosbuild(英文页面)

3. 创建ROS工作空间(以catkin 为准)

$ mkdir -p ~/catkin_ws/src
$ cd ~/catkin_ws/
$ catkin_make

一般创建完成后需要刷新环境,使用source命令

source devel/setup.bash

二. ROS文件系统介绍

1. 安装ros-kinetic-ros-tutorials程序包

sudo apt-get install ros-kinetic-ros-tutorials

2. 文件系统概念

  • Packages 软件包,ROS程序代码的组织单元,包括:程序库,可执行文件,脚本&other file

  • Manifest(package.xml):清单,对 ‘软件包’ 相关信息的描述。定义依赖关系,包括版本,维护者,许可协议等

3. 文件系统工具

rospack

rospack find [包名称]

$ rospock find roscpp 输出:YOUR_INSTALL_PATH/share/roscpp

roscd

roscd是rosbash 命令集的一部分,允许直接切换工作目录至软件包或软件包集.

roscd [本地包名称[/子目录]]

roscd roscpp

roscd log

也属于rosbash 命令集,直接切换到日志文件夹下

rosls

rosbash 命令集可以直接按照软件包名称ls,不需要绝对路径

Tab自动补全

Tab补全等同于linux Tab

三. 创建ROS 程序包

1. catkin程序包的构成(catkin程序包必须符合以下文件)

  • 程序包必须包含package.xml文件
  • 程序必须包含CMakeLists.txt 文件,而Catkin metapackages中必须包括一个对CMakeList.txt 文件的引用
  • 每个目录下只能有一个程序包,不能嵌套或者多个程序包共存

2. catkin工作空间中的程序包

工作空间中的程序包组织形式

workspace_folder/        -- WORKSPACE
  src/                   -- SOURCE SPACE
    CMakeLists.txt       -- 'Toplevel' CMake file, provided by catkin
    package_1/
      CMakeLists.txt     -- CMakeLists.txt file for package_1
      package.xml        -- Package manifest for package_1
    ...
    package_n/
      CMakeLists.txt     -- CMakeLists.txt file for package_n
      package.xml        -- Package manifest for package_n

3. 创建catkin程序包

切换到前边创建的catkin工作空间中的src目录下

# You should have created this in the Creating a Workspace Tutorial
$ cd ~/catkin_ws/src

使用catkin_create_pkg 创建新程序包,依赖于std_msgs, roscpp rospy

$ catkin_create_pkg beginner_tutorials std_msgs rospy roscpp

4. 程序包的依赖关系

程序包通常拥有一级依赖和间接依赖可以用以下命令查询

$ rospack depends1 beginner_tutorials 

间接依赖查询

$ rospack depends beginner_tutorials

5. 自定义程序包

package.xml & CMakeLists.txt 的自定义编写

四. 编译ROS程序包

如果通过apt及软件包管理工具安装系统默认安装好依赖项

1. catkin_make工具的使用

在catkin工作空间下

$ catkin_make [make_targets] [-DCMAKE_VARIABLES=...]

工作流程一般为,也可通过–source my_src 指定外部源码位置

$ catkin_make #编译程序包

$ catkin_make install #安装程序包

2. 编译自己的程序包

切换到catkin工作空间下

$ cd ~/catkin_ws/

$ ls src

使用catkin_make 编译

$ catkin_make

编译完成可使用ls 查看工作空间下自动生成的文件,包括:build devel src

五. 理解ROS 节点

1. 安装轻量级模拟器

$ sudo apt-get install ros-<distro>-ros-tutorials

概念术语

  • Nodes:节点,一个节点即为一个可执行文件,它可以通过ROS与其它节点进行通信。
  • Messages:消息,消息是一种ROS数据类型,用于订阅或发布到一个话题。
  • Topics:话题,节点可以发布消息到话题,也可以订阅话题以接收消息。
  • Master:节点管理器,ROS名称服务 (比如帮助节点找到彼此)。
  • rosout: ROS中相当于stdout/stderr。
  • roscore: 主机+ rosout + 参数服务器 (参数服务器会在后面介绍)。

2. ROS命令行

  • 列出当前运行的ROS 节点信息

rosnode list

  • 返回某个节点的信息,rosnode list 列出活跃节点后使用下面命令查看

rosnode info /rosout

3. rosrun运行包内节点(小乌龟模拟器启动)

rosrun turtlesim turtlesim_node

可使用上边rosnode list 查看

可以使用 rosnode ping my_turtle 测试

六. ROS topic 话题

1. 键盘控制乌龟行走

$ roscore

$ rosrun turtlesim turtlesin_node

$ rosrun turtlesim turtle_teleop_key

开启ROS ,开启ROS 乌龟模拟器,开启键盘监听节点使用键盘控制乌龟行走

2. rostopic命令工具介绍

安装rqt_graph kinetic版本

$ sudo apt-get install ros-<distro>-rqt
$ sudo apt-get install ros-<distro>-rqt-common-plugins

新终端中运行rqt,rqt可通过可视化的形式方便的查看各节点之间的话题

rosrun rqt_graph rqt_graph

在这里插入图片描述

rostopic命令工具下的子命令,

rostopic -h

rostopic bw     display bandwidth used by topic
rostopic echo   print messages to screen
rostopic hz     display publishing rate of topic
rostopic list   print information about active topics
rostopic pub    publish data to topic
rostopic type   print topic type

命令的使用(使用echo命令即可将节点上的消息打印在屏幕上)

rostopic echo [topic]

rostopic scho /turtle1/cmd_vel

3. ROS Message

节点之间的通讯通过在topic上发送消息实现

rostopic type 命令查看发布话题的消息类型,应该会显示:geometry_msgs/Twist

rostopic type /turtle1/cmd_vel

rosmsg 可以查看消息的详细情况

rosmsg show geometry_msgs/Twist

显示如下:

geometry_msgs/Vector3 linear
  float64 x
  float64 y
  float64 z
geometry_msgs/Vector3 angular
  float64 x
  float64 y
  float64 z

4. rostopic 上的 rostopic pub 数据推送

推送乌龟行进坐标到话题上

rostopic pub -1 /turtle1/cmd_vel geometry_msgs/Twist -- '[2.0, 0.0, 0.0]' '[0.0, 0.0, 1.8]'

rostopic hz 数据发送频率的查询

rostopic hz /turtle1/pose

5. rqt_plot 数据变化的绘图

教程中为$ rosrun rqt_plot rqt_plot 命令,实际直接使用rqt 即可调出plot窗口,如下

rqt_plot.png

七. ROS服务和参数

服务(services)是节点之间通讯的另一种方式。服务允许节点发送请求(request) 并获得一个响应(response)

1. rosservice 命令

rosservice list         输出可用服务的信息
rosservice call         调用带参数的服务
rosservice type         输出服务类型
rosservice find         依据类型寻找服务find services by service type
rosservice uri          输出服务的ROSRPC uri

工作流总结

rosservice list 查询节点可用服务

rosservice type clear 查询服务类型

rosservice call clear 调用clear服务,清空turtle_node 轨迹

rosservice type spawn| rossrv show 查看spawn类型

rosservice call spawn 2 2 0.2 “” 生成新的乌龟

2. Using rosparam

rosparam 使得我们能够存储并操作ROS参数服务器上的数据

rosparam set            设置参数
rosparam get            获取参数
rosparam load           从文件读取参数
rosparam dump           向文件中写入参数
rosparam delete         删除参数
rosparam list           列出参数名

rosparam list 列出turtlesim节点上的参数

rosparam set and rosparam get 设置背景及查询

rosparam set background_r 150
rosparam get background_g

rosparam dump & load 参数文件的写出及载入

rosparam dump params.yaml

rosparam dump params.yaml

将yaml文件重载进新的命名空间,如copy空间

rosparam load params.yaml copy

get 出来看下

rosparam get copy/background_b

八. 使用 rqt_console 和 roslaunch

1. 安装rqt & turtlesim

sudo apt-get install ros-<distro>-rqt ros-<distro>-rqt-common-plugins ros-<distro>-turtlesim

使用命令行打开rqt_console 和 rqt_logger_level查看报警等级

$ rosrun rqt_console rqt_console
$ rosrun rqt_logger_level rqt_logger_level

2. 使用roslaunch

roslaunch beginner_tutorials

3. 编写&解析launch 文件

  • 算是标记语言

4. 使用launch启动两个小乌龟并发送速度

roslaunch beginner_tutorials turtlemimic.launch

发送移动命令

ostopic pub /turtlesim1/turtle1/cmd_vel geometry_msgs/Twist -r 1 -- '[2.0, 0.0, 0.0]' '[0.0, 0.0, -1.8]'

九. 使用rosed 编辑ros文件

1. 使用rosed编辑 文件

rosed roscpp Logger.msg

2. Tab 补全

tab

十. 创建ros消息和ros服务

1. 创建msg

创建msg文件夹及写入消息

$ cd ~/catkin_ws/src/beginner_tutorials
$ mkdir msg
$ echo "int64 num" > msg/Num.msg

修改packagexml.确保可以被转换为C++,Python

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

配置运行依赖,添加 message_runtime 修改add_message_file 函数

2. 使用rosmsg

rosmsg show beginnet_tutorials/Num

十一. 编写消息发送器和订阅器

在beginn_tuturial下创建src文件夹,在里边编写talker.cpp listening.cpp文件

在CMakeList.txt文件中为可执行文件添加生成消息的依赖

编译文件 catkin_make

十二. 测试消息发布器和订阅器

1. source catkin工作空间下的setup.sh 文件

# In your catkin workspace
$ cd ~/catkin_ws
$ source ./devel/setup.bash
  1. 启动发布器和订阅器
$ rosrun beginner_tutorials talker      (C++)
$ rosrun beginner_tutorials talker.py   (Python) 
$ rosrun beginner_tutorials listener     (C++)
$ rosrun beginner_tutorials listener.py  (Python) 

十三. rosbag数据录制及回放

1. 录制数据

rostopic list -v 显示所有话题

mkdir ~/bagfiless

cd ~/bagfiles

rosbag record -a

2. 检查并回放数据

rosbag info 检查数据

rosbag play 回放数据

十四. roswtf工具的使用

1. ros的安装检查及运行时检查

ros运行时和不运行时均可通过指令检查

roscd

roswtf

2. ros错误报告

roscd

ROS_PACKAGE_PATH=bad:$ROS_PACKAGE_PATH roswtf

<think>嗯,用户想了解Excel中的VLOOKUP函数的用法和参数含义。首先,我需要回忆一下VLOOKUP的基本结构。VLOOKUP是垂直查找函数,用于在表格的首列查找指定的值,然后返回该行中指定列的数据。它的四个参数分别是查找值、表格范围、列索引号和匹配模式。 接下来,我得确认每个参数的具体作用。第一个参数是lookup_value,也就是用户要查找的值,比如产品ID或者姓名。第二个参数是table_array,即查找的范围,这里要注意的是,查找值必须位于这个范围的第一列,否则函数无法正确工作。第三个参数是col_index_num,也就是用户想要返回的数据在表格范围中的第几列,这个列数是从表格范围的第一列开始算起的,不是整个工作表的列。第四个参数是range_lookup,决定是精确匹配还是近似匹配,通常用FALSE或0来指定精确匹配,避免错误。 然后,用户可能需要一个具体的例子来理解如何使用。比如,假设有一个产品价格表,用户想根据产品ID查找对应的价格。这时候,VLOOKUP就可以在ID列查找,然后返回价格列的数据。同时,要提醒用户注意表格范围最好使用绝对引用,比如$A$2:$C$100,这样在拖动公式时范围不会变化。 可能遇到的问题也需要考虑。比如,如果查找值不在表格的第一列,或者列索引号超过了表格的列数,函数会返回错误。此外,数据格式不一致也可能导致问题,比如查找值是数字,而表格中是文本格式的数字,这时候需要统一格式。还有,当出现#N/A错误时,可能是查找值不存在,或者匹配模式设置不正确,需要检查参数是否正确。 用户可能还会问到如何避免常见的错误,比如部分数据匹配出错的情况。这时候需要检查是否有多余的空格,或者数据格式不一致,或者表格范围没有锁定导致拖动时偏移。此外,XLOOKUP作为VLOOKUP的升级版,可能在某些情况下更方便,比如可以向左查找或者返回多列数据,这也是可以提及的内容。 最后,整理步骤,从基础语法到参数说明,再到具体案例,逐步引导用户理解如何使用VLOOKUP函数。同时,提供常见错误和解决方法,帮助用户在实际应用中避免问题。如果有必要,还可以比较VLOOKUP和其他查找函数的区别,比如HLOOKUP或XLOOKUP,但根据用户的问题,主要集中在VLOOKUP本身即可。</think>### Excel VLOOKUP函数详解 #### 一、基础语法与参数说明 VLOOKUP函数的语法为: $$=VLOOKUP(lookup\_value, table\_array, col\_index\_num, [range\_lookup])$$ 包含4个参数: 1. **lookup_value**(必填):要查找的值(如单元格引用或具体值) 2. **table_array**(必填):包含数据的表格范围(必须包含查找列和返回列) 3. **col_index_num**(必填):返回值所在列的序号(从table_array第一列开始计数) 4. **range_lookup**(可选):匹配类型 - `TRUE`/`1`:近似匹配(默认值,需数据升序排列) - `FALSE`/`0`:精确匹配(常用选项) [^1][^2] #### 二、使用步骤演示(工资表查询案例) 假设需要根据员工编号查询工资: 1. 建立查询单元格(如`B12`) 2. 输入公式: ```excel =VLOOKUP(A12, $A$2:$D$100, 4, 0) ``` - `A12`:待查询的员工编号 - `$A$2:$D$100`:锁定数据区域(绝对引用) - `4`:返回第4列(工资列) - `0`:精确匹配 [^2][^3] #### 三、常见错误与解决方法 | 错误现象 | 原因 | 解决方案 | |---------|------|---------| | #N/A | 查找值不存在 | 检查数据源或改用`IFERROR`容错 | | #REF! | 列序号超出范围 | 确认col_index_num ≤ 表格列数 | | 部分匹配失败 | 数据格式不一致 | 统一数值/文本格式 | | 结果错位 | 表格未锁定 | 使用`$`符号固定区域引用 | [^3][^4] #### 四、进阶技巧 1. **多条件查询**: 使用辅助列合并多个条件字段 ```excel =VLOOKUP(A2&B2, $D$2:$F$100, 3, 0) ``` 2. **通配符匹配**: `"*"`匹配任意字符,`"?"`匹配单个字符 ```excel =VLOOKUP("张*", $A$2:$C$100, 3, 0) ``` 3. **跨表查询**: 引用其他工作表数据 ```excel =VLOOKUP(A2, Sheet2!$A$2:$D$100, 4, 0) ``` [^1][^4]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值