欢迎您访问365答案网,请分享给你的朋友!
生活常识 学习资料

ROS学习笔记

时间:2023-04-24
ros学习笔记

目录结构

CMakeLists.txtpackage.xmlcatkin工作空间

catkin_make包管理指令metapackage 通信架构(计算图层级)

master

roscore 命令 node 节点

rosrun命令rosnode命令roslaunch命令 通信方式

TopicService异同后续Action Parameter Server

命令行launch文件node(API) 常用工具

GazeboRViz The Robot Visualization toolrqtrosbagMoveit Client Library

roscpp C++的接口

ros::init()ros::NodeHandleros::masterros::this_noderos::serviceros::paramros::names rospy python的接口

NodeTopicServiceParamTime TF & URDF

TF树urdf Unified Robot Description Format 出错处理

依赖安装

rosdep install --from-paths src --ignore-src --rosdistro=kinetic -y 参考资料 目录结构

|--src 源代码||--package 是编译的基本单位||--CMakeLists.txt 编译规则、依赖等| |--package.xml 属性信息||--scripts 脚本文件夹|||--python脚本|||--shell脚本||--include 头文件.h||--src C++源文件||--srv 服务|||--*.srv ||--msg 消息|||--*.msg||--action动作|||--*.action||--launch launch配置文件|||--*.launch||--config 参数配置文件|||--*.yaml|--build cmake和catkin缓存中间文件|--devel 编译生成的目标文件

CMakeLists.txt package.xml catkin工作空间

命名规则为 workspace_name/src
创建命令为

mkdir -p ~/catkin_ws/srccd ~/catkin_wscatkin_make

catkin_make

作用为编译,同时可以起到初始化工作空间的目的
在编译完之后要用source命令刷新当前环境 source ~/catkin_ws/devel/setup.bash,刷新完之后才能运行编译生成的ros可执行环境。但是每个终端都需要运行才行,可以直接更新到.bashrc文件中echo "source ~/catkin_ws/devel/setup.bash " >> ~/.bashrc,直接更新环境变量。

rosbuild是早期的编译命令,现在已经被catkin_make淘汰

包管理指令

rospack
查找某个包的地址rospack find package_name
列出本地所有包rospack listroscd 跳转到某个包路径下 roscd package_namerosls 列出包文件信息 rosls package_namerosed 编辑包中文件 rosed package_name file_namecatkin_create_pkg 创建包 catkin_create_pkg pkg_name [deps]deps是依赖名,可以有多个rosdep 安装依赖rosdep install package_name metapackage

功能相似的包的集合,主要用于安装的时候使用。sudo apt-get install ros-kinetic-[metapackage_name]

通信架构(计算图层级) master

节点管理器,每个node启动时都需要在master进行注册,类似与微服务架构中的服务管理中功能。

roscore 命令

roscore
该命令功能:
启动master节点
启动rosout节点 负责日志输出
启动parameter server 参数服务器

node 节点

一个node实际上就是一个进程,master实际上也是一个node,但是它的功能是对其他node进行管理。
由于机器人一般都有非常多的零部件,所以每个部分一般都需要一个进程对其进行管理,例如摄像头模块、雷达模块等都需要单独的进程才能完成任务,这里的每个进程在ros中被称为节点node。

rosrun命令

该命令的功能是启动一个node
rosrun [pkg_name] [node_name]

rosnode命令

管理和查看某个node信息
rosnode list列出在运行的node信息
rosnode info [node_name]显示某个node的详细信息
rosnode kill [node_name]结束运行某个node

roslaunch命令

roslaunch [pkg_name] [file_name.launch]启动master节点以及多个node
其中的.launch文件就配置了需要启动的node有关信息【启动规则】

通信方式 Topic

异步通信方式 publish-subscribe通信机制
nodeA向这个Topic发送(publish)消息,然后nodeB订阅(subscribe)这个Topic,然后nodeB就能收到nodeA发送的消息。所以可以进行一对多的消息发送,也可以多对一。

Message topic通信方式定义的数据类型 定义在.msg文件中
每个msg文件定义一种通信格式,相当于面向对象中的类,然后node在发送的时候是发送一个msg格式的数据。
基本格式包括:bool,int8,int16,int32,uint,float32,float64,string,time,duration,header,不定长数组array[],定长数组array[n]

sensor_msgs/Image(sensor_msgs/msg/Image.msg) 定义了传输一幅图的数据格式

rostopic list列出当前所有topicrostopic info /topic_name显示某个topic的属性信息rostopic echo /topic_name显示某个topic的内容rostopic pub /topic_name ...向某个topic发布内容rosmsg list列出系统上所有msgrosmsg show /msg_name显示某个msg内容 (这里显示的是msg的格式内容) Service

同步通信方式 request-reply方式通信

srv Service通信格式,定义在.srv文件中

rosservice 与 rostopic对应
rosservice list列出当前所有活跃的service
rosservice info service_name显示某个service的属性信息
rosservice call service_name args调用某个servicerossrv 与 rosmsg对应
rossrv list列出系统上所有srv
rossrv show srv_name显示某个srv内容 异同 后续

在定义了msg和srv后需要对package.xml和CMakeList.txt进行修改,添加相关依赖才能运行。

Action

类似Service,在通信过程中有执行状态的反馈,更常用于那些执行时间较长,并且可能需要中断和被抢占的任务节点中。

action通信的数据格式 定义在.action文件中

Parameter Server

参数服务器,存储各种参数的一种字典格式。可以使用命令行,launch文件和node节点的api进行读写。
感觉像是一种全局变量的维护方式。

命令行 命令含义rosparam list列出当前所有参数的值rosparam get param_key显示某个参数的值rosparam set param_key param_value设置某个参数的值rosparam dump file_name保存参数到文件(文件格式为YAML文件)rosparam load file_name从文件读取参数rosparam delete param_key删除参数launch文件 node(API)

常用工具 Gazebo

仿真工具,模拟器,ODE物理引擎

RViz The Robot Visualization tool

可视化调试工具

rqt

可视化工具,基于qt开发
rqt_graph:显示通信架构
rqt_plot:绘制曲线
rqt_console:查看日志

rosbag

命令行工具,记录和回放数据流(top数据流)

命令含义rosbag record 记录某些topic的数据到bag文件中rosbag record -a记录所有topic到bag文件中rosbag play 回放bag文件中记录的数据Moveit

机械臂常用的专用工具

Client Library

ROS编程的库 对API进行了进一步的封装,一些标准接口。
编程的具体方法与细节。
http://docs.ros.org/api/

roscpp C++的接口

官方文档:http://docs.ros.org/en/api/roscpp/html/
具体见该https://www.bilibili.com/video/BV1mJ411R7Ni?p=22&spm_id_from=pageDriver 视频中有一系列例子及讲解。

#include//导入自定义的一些msg之类的头文件...

ros::init()
ros::NodeHandle
ros::master
ros::this_node
ros::service
ros::param ros::names
rospy python的接口

http://wiki.ros.org/rospy

import rospyimport mathfrom topic_demo.msg import gps #自己定义的各种msg等等都需要import

Node
Topic


其中queue_size(队列长度)如果传入为None会变成同步方式,只有是一个整数才是异步方式。

Service
Param
Time


Time是表示时刻的类
Duration是表示时间(持续时间)的类

TF & URDF

TF: TranForm 坐标系变换
URDF:机器人描述规范

TF树

机器人每个frame(以每个部件为中心的坐标系)之间的连接关系,每个连接关系都有一个node来进行维护,这些节点将消息发布到tf的topic中,然后从这些消息中就可以恢复得到一棵完整的tf树,这些消息可以反映每个部件之间的相对位移关系。
tf的具体消息格式以及消息发送和接收方法略【详情见视频】

命令含义rosrun tf view_frames根据当前的tf树(最近5s内的tf消息)创建一个tf图rosrun rqt_tf_tree rqt_tf_tree查看当前的tf树(动态变化)rosrun tf tf_echo [reference_frame] [target_frame]查看两个frame之间的变换关系urdf Unified Robot Description Format

定义机器人结构

link 核心部件joint 两个link之间的连接部件(连接关系)
出错处理 依赖安装 rosdep install --from-paths src --ignore-src --rosdistro=kinetic -y

报错信息如下

ERROR: the following packages/stacks could not have their rosdep keys resolved
to system dependencies:
robot_sim_demo: Cannot locate rosdep definition for [yocs_cmd_vel_mux]
navigation_sim_demo: Cannot locate rosdep definition for [dwa_local_planner]
slam_sim_demo: Cannot locate rosdep definition for [hector_mapping]ERROR: the following packages/stacks could not have their rosdep keys resolvedto system dependencies

使用sudo apt-get install ros-kinetic-[] 命令将缺失的包都进行安装再次运行即可。

参考资料

视频教程ros入门:https://www.bilibili.com/video/BV1mJ411R7Ni?p=1

Copyright © 2016-2020 www.365daan.com All Rights Reserved. 365答案网 版权所有 备案号:

部分内容来自互联网,版权归原作者所有,如有冒犯请联系我们,我们将在三个工作时内妥善处理。