目录结构
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]
节点管理器,每个node启动时都需要在master进行注册,类似与微服务架构中的服务管理中功能。
roscore 命令 roscore
该命令功能:
启动master节点
启动rosout节点 负责日志输出
启动parameter server 参数服务器
一个node实际上就是一个进程,master实际上也是一个node,但是它的功能是对其他node进行管理。
由于机器人一般都有非常多的零部件,所以每个部分一般都需要一个进程对其进行管理,例如摄像头模块、雷达模块等都需要单独的进程才能完成任务,这里的每个进程在ros中被称为节点node。
该命令的功能是启动一个node
rosrun [pkg_name] [node_name]
管理和查看某个node信息
rosnode list列出在运行的node信息
rosnode info [node_name]显示某个node的详细信息
rosnode kill [node_name]结束运行某个node
roslaunch [pkg_name] [file_name.launch]启动master节点以及多个node
其中的.launch文件就配置了需要启动的node有关信息【启动规则】
异步通信方式 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,在通信过程中有执行状态的反馈,更常用于那些执行时间较长,并且可能需要中断和被抢占的任务节点中。
Parameter Serveraction通信的数据格式 定义在.action文件中
参数服务器,存储各种参数的一种字典格式。可以使用命令行,launch文件和node节点的api进行读写。
感觉像是一种全局变量的维护方式。
略
常用工具 Gazebo仿真工具,模拟器,ODE物理引擎
RViz The Robot Visualization tool可视化调试工具
rqt 可视化工具,基于qt开发
rqt_graph:显示通信架构
rqt_plot:绘制曲线
rqt_console:查看日志
命令行工具,记录和回放数据流(top数据流)
机械臂常用的专用工具
Client Library ROS编程的库 对API进行了进一步的封装,一些标准接口。
编程的具体方法与细节。
http://docs.ros.org/api/
官方文档:http://docs.ros.org/en/api/roscpp/html/
具体见该https://www.bilibili.com/video/BV1mJ411R7Ni?p=22&spm_id_from=pageDriver 视频中有一系列例子及讲解。
#include
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
NodeTopic
Service
其中queue_size(队列长度)如果传入为None会变成同步方式,只有是一个整数才是异步方式。
Param
Time
TF & URDF
Time是表示时刻的类
Duration是表示时间(持续时间)的类
TF: TranForm 坐标系变换
URDF:机器人描述规范
机器人每个frame(以每个部件为中心的坐标系)之间的连接关系,每个连接关系都有一个node来进行维护,这些节点将消息发布到tf的topic中,然后从这些消息中就可以恢复得到一棵完整的tf树,这些消息可以反映每个部件之间的相对位移关系。
tf的具体消息格式以及消息发送和接收方法略【详情见视频】
定义机器人结构
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