ROX learning

1 minute read

1. 简介

这篇博客主要记录学习ROS的笔记,内容来源于:

2. 古月居

2.1. ROS安装

根据ROS-wiki的说明一步步进行安装

2.2. ROS是什么

  • ROS发展史:
  • ROS能提高机器人研发中软件的复用率

2.3. ROS的核心概念

  • 节点(Node)是ROS中的执行单元:
    • 执行具体任务的进程、独立运行的可执行文件
    • 不同节点可使用不同的编程语言,分布式运行在不同的主机
    • 节点在系统的名称必须唯一
  • 节点管理器(ROS Master)是ROS的控制中心:
    • 为节点提供命名和注册服务
    • 跟踪和记录话题/服务通信,辅助节点相互查找、建立连接
    • 为节点提供参数
  • 话题通信机制(异步):
    • 话题(Topic)
      • 节点间用来传输数据的重要总线
      • 使用发布/订阅模型,数据由发布者传输到订阅者,同一个话题的订阅者或发布者可以不唯一
    • 消息(Message)
      • 具有一定类型的数据结构
      • 使用编程语言无关的.msg文件定义,编译过程中生成对应的代码文件
  • 服务通信机制(同步):
    • 服务(Service)
      • 使用客户端/服务器模型,客户端发送请求数据,服务器完成处理后返回应答数据
      • 使用编程语言无关的.srv文件定义请求和应答数据结构
  • 话题和服务通信的区别:
  • 参数-全局共享字典:
    • 可通过网络访问共享、多变量字典
    • 节点使用此服务器来存储和检索运行时的参数
    • 不适合存储动态配置的数据
  • 文件系统

2.4. ROS命令行工具

  • 常用命令: rostopic/rosservice/rosnode/rosparam/rosmsg/rossrv

  • rqt_graph可以查看系统的节点和通信机制

rqt_graph
  • rosnode list可以查看节点的列表
  • rosnode info /turtlesim可以查看turtlesim这个节点的信息
  • rostopic list可以查看话题的列表
  • rostopic pub /turtlesim/cmd_vel ...可以使用cmd_vel话题发送消息
  • rosmsg show geometry_msgs/Twist可以查看某个消息的信息
  • rosservice list可以查看ROS中服务的列表
  • rosservice call ...可以调用某个服务
  • rosbag record ...可以记录某一个话题
  • rosbag play ...可以通过保存的bag文件来复现该话题

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

  • 工作空间是一个存放工程开发相关文件的文件夹
  • 创建工作空间的步骤
  • catkin_make install创建install空间
  • 创建功能包

2.6. Publisher的编程实现

  • 话题模型
  • 首先创建功能包
cd ~/catkiin_ws/src
catkin_create_pkg learning_topic roscpp rospy std_msgs geometry_msgs turtlesim
  • 使用c++创建publisher
  • 创建publisher时需要声明消息类型,话题的名称,创建publisher完毕后,即可创建消息来让publisher发布
  • 配置publisher代码编译的规则(在cmakelists中)
  • 设置需要编译的代码和生成的可执行文件/设置链接库
  • 编译并运行发布者
  • python实现publisher

2.7. Subscriber的实现

  • python实现subsriber

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

  • 自定义话题消息
    • 定义msg文件
    • 在package.xml中添加功能包的依赖
    • 在CMakeLists中添加编译选项
    • 编译生成语言相关文件
  • python实现topic
  • 定义publisher和subscriber(需要声明topic和消息)

2.9. client实现

  • 服务模型(C/S模型):
  • python实现client

2.10. server实现

  • python实现server:

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

  • 自定义服务数据
  • 服务模型
  • 首先生成server节点,然后创建service,client在发现service后创建并发送数据,server在接受数据后进入callback返回request

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

  • 参数模型

3. Udemy课程

3.1. Course Overview

3.1.1. Installation of turtlebot3

  • 这小节主要介绍如何安装turtlebot3:
  • 按照udemy的讲义上一步步安装,首先安装ros-noetic-navigation和ros-noetic-slam-gmapping,然后拷贝github上的代码到本地编译turtlebot3,同样的做法安装turtlebot3-simulation

3.1.2. Turtlebot3 SImulation Environments

  • roslaunch turtlebot3_gazebo turtlebot3_empty_world.launch 打开一个空白的空间,里面只有一辆小车
  • roslaunch turtlebot3_teleop turtlebot3_teleop_key.launch 启动后,可以键入wasd来操作小车
  • roslaunch turtlebot3_gazebo tuetlebot3_world.launch 里面有几根柱子和小车
  • roslaunch turtlebot3_gazebo turtlebot3_house.launch 房间
  • roslaunch turtlebot3_gazebo turtlebot3_gazebo_rviz.launch ros中很重要的可视化软件Rviz,关于turtlebot3有适配版本,可以可视化小车的激光雷达和摄像头
  • roslaunch turtlebot3_slam turtlebot3_slam.launch slam_methods:=gmapping slam,可视化在Rviz上,slam的算法有很多,这里采用gmapping的方法

3.2. ROS Navigation Demo

  • 这章展示了ROS Navigation的一个demo,首先打开house,然后roslaunch turtlebot3_navigation turtlebot3_navigation.launch map_file=...来打开Navigation,在Rviz中展示,标定好终点后,它会自动规划路径到达终点
  • frame就是不同的参考系

3.3. 2D Frames, Transformations and Localization

3.4. 3D Frames, Transformations and Localization

3.5. Orientation in 3D Space

3.6. The TF Package: Frame, Transformation and Localization in ROS Explained

  • TF是一个让用户随时间跟踪多个参考系的功能包,它使用一种树型数据结构,根据时间缓冲并维护多个参考系之间的坐标变换关系,可以帮助用户在任意时间,将点,向量等数据的坐标,在两个参考系中完成坐标变换:
  • 机器人的模型用一个XML文件定义,使用URDF(unified robot description format)这个语言去描述机器人的Frame和Transformation。其中Frame连接在关节上,在URDF中用link表示,不同关节的相对位置用Transformation表示,可以在ROS wiki上了解更详细的信息
  • TF package nodes(TF功能包提供了一些有用的ROS nodes):
  • 可以通过订阅odom话题来获得odom的child frame:base_footprint的position和orientation,odom: topic represents a pose based on a odometry information
  • rosrun tf2_tools view_frames来获得当前场景下的frames和transformation的总体情况,会在当前目录生成一个pdf文件
  • robot相对于map的参考系叫做amcl_pose
  • rosrun tf tf_echo frame1 frame2可以获得两个frame之间translation和rotation
  • rosrun tf static_transform_publisher 1 2 3 0.1 0.2 0.3 frame_a frame_b 10可以在两个frame之间创造一个transformation
  • 可以定义节点来广播frame_a到frame_b的transformation,也可以定义节点来收听frame_a到frame_b的transformation
  • 总的来说,TF功能包能获得当前场景下的frame和transformation信息,同时也可以自定义frame之间的transformation

3.7. Map-based navigation

  • robot navigation表示机器人自动避障的能力,有两种主要的导航方法,第一种方法是map-based navigation,预加载好地图的相关信息,另一种方法是reactive navigation,不会预加载地图的相关信息,只会利用传感器感知周围环境
  • navigation可以分为三步,localization,mapping,path planning:
  • mapping的主要方法是SLAM(simultaneous localization and mapping):
  • navigation的主要功能包:
  • turtlebot3 slam demo:
  • 地图的表示方法: occupancy grid map,一张地图由网格状的cell组成,一个cell可以是empty或者occupied:
  • gmapping是slam的一种方法,还有其他方法,比如cartographer,hector_slam:
  • 通过激光雷达的数据判断哪些地方有障碍物
  • SLAM生成的地图的质量由odometry和laser scanner决定,odometry就是里程计,衡量机器人从初始姿态到终点位姿的一个标准,如果要实现机器人的定位与导航,就需要知道机器人行进了多少距离,往哪个方向行进的
  • 通过SLAM生成的地图可以保存下来,通过指令rosrun map_server map_saver -f ~/tb3_house_map来保存地图到指定路径
  • 保存的地图由两个文件组成,.pgm.yaml,其中.pgm就是一张地图的图片,灰色的区域表示未知的区域,黑色的区域表示障碍物,白色的区域表示自由区域,.yaml存储了地图的metadata,比如原点,地图图片的路径,阈值等
  • 如何通过SLAM生成的地图对小车进行导航(Navigation):
    • 首先告诉小车自己在哪里,通过Rviz的2D pose estimation实现
    • 然后确定小车需要到达的终点
    • motion planner algorithm告诉小车如何到达终点
  • Map-based navigation命令行: roslaunch turtlebot3_navigation turtlebot3_navigation.launch map_file:=...
  • 通过程序实现map-based navigation,无需通过Rviz实现
  • 为什么出现小车后退重新尝试的行为(recovery behavior):
  • 如何让机器人支持ROS的Navigation模块
  • Robot setup:
    • 安装ROS
    • 必须有tf transform
    • URDF
    • sensor information
    • odometry information
    • base controller
    • mapping

3.8. Navigation Stack Tuning

  • 控制Navigation的最大速度/加速度和最小速度/加速度,可以通过更改local planner的yaml文件,对于turtlebot3而言,这个文件在turtlebot3_navigation/param
  • 如何获得小车的最大速度:
  • 如何获得小车的最大加速度:
  • Global Path Planner Tuning, 微调全局路径规划参数,全局路径规划需要考虑地图信息来找到一条没有障碍的路径
  • ROS中有三个global planner:
  • Carrot Planner的示意图:
  • NAVFN 和 global_planner
  • global_planner中可以调节的参数的例子:
  • local path planner的相关知识,局部路径规划会在执行全局路径规划给出的路径的同时,通过传感器获得的局部信息来躲避动态的障碍。
  • DWA algorithm(Dynamic Window Approach 属于local path planning的一种):
    • 离散地采样几种方向和速度
    • 对于每一种采样,都预测一下如何按照这种方式前进会发生什么
    • 对于每一种结果,使用一种评价标准进行打分
    • 选取最高评分的前进方法
  • 微调DWA算法的参数,微调simulation time这一参数
  • 不同DWA参数的影响
  • 动手实现微调DWA的simulation time参数对navigation的影响(视频在notion上有)
Quehry

Quehry

Student

Comments

  Write a comment ...