栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

ROS学习笔记

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

ROS学习笔记

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/src
cd ~/catkin_ws
catkin_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 rospy
import math
from 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

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/744446.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号