ROS零散知识点

本篇是作者记录学习ROS过程中的零散知识点

package.xml包含功能包版本信息、对其他功能包的依赖
有用的ros命令:rospack roscd rosls
返回功能包路径
rospack find 功能包名
列出所有功能包
rospack list
只显示功能包名字
rospack list-names

话题就是发送的消息,话题定义了由该话题发送消息的类型

rosmaster的任务:
1.负责普通node的注册工作
2.node间建立通信连接需要rosmaster协助
3.跟踪话题的发布者和订阅者

使用roscore后会产生节点rosout,会订阅话题/rosout
节点都是带/的

参数服务器存储公用参数,属于rosmaster中的一部分

改变参数时要执行rosservice call /clear
改变turtlesim的背景颜色:
rosparam set background_b 0
rosparam set background_g 0
rosparam set background_r 255
rosservice call /clear

话题是单向通信,服务是双向通信

source ~/catkin_ws/devel/setup.bash是把工作空间纳入环境变量中

机器人urdf组成:llink,join
urdf描述的就是一组link和一组join的集合,join负责将link连接在一起

actionlib用于当请求没有按时完成,利用actionlib抢占正在运行的请求,并发送另一个请求
actionlib经常用于机器人手臂导航和移动机器人导航

launch文件中node标签的type字段是启动可执行文件的名称,所以type一般和节点名称相同
话题、服务、动作库引用场景:
1.话题:传感器数据
2.服务:执行能快速结束的程序,保存一些过程文件(机器人在导航中生成的地图)
3.动作库:执行时间长,任务复杂,需要管理反馈动作。例如,向某个目的地导航

机器人建模重要的ros软件包:
urdf:urdf的解析器,xml文件和一些组件组成urdf
xacro等于urdf+若干插件,可以让urdf更简短,可读性更好
xacro可以实现参数复用,类似于函数

ROS控制器:ros_control软件包
高级知识:ros控制器如何控制运行和Gazebo做交互
标准控制器:关节状态控制器,位置控制器,轨迹控制器
除了标准控制器,也可以自己写控制器
创建ROS控制器的步骤
1)创建一个包含必要依赖项的ROS软件包
2)用C++写控制器代码
3)注册或者导出C++类,作为插件
4)在XML文件中定义插件
5)编辑CMakeLists.txt和package.xml,用于导出插件
6)为控制器编写配置信息(yaml)
7)使用控制器管理器加载控制器

高级知识:插件
ROS系统提供了pluginlib插件框架,该框架可以动态的加载或者卸载插件
ROS中插件的建立有完整的流程,详细可见《精通ROS机器人编程(原书第2版)》7.1
ROS小节点(nodelet),特殊的ROS节点,一个进程中可以多个线程,每个线程运行一个小节点。两个小节点之间传输没有复制开销,适合大数据量,广泛用于高性能应用程序
对于小节点有小节点管理器,在roscore开始的情况下开启
Gazebo插件:world插件,模型插件,传感器插件,系统插件,可视插件
可以自己为RVIZ建立可视化插件,可以使用QT编程,然后结合ROS插件的定义

对于开发板使用ros
要为开发板建立ros通讯环境(开发板没有ros环境) 像Arduino开发板,要配置传输数据转换ros的接口

3D图像处理库:ros_bridge 3D传感器(激光雷达,摄像机):PCL
opencv和ros连接的库:
cv_bridge:提供opencv下图像转换为ROS图像的API。发送图像就可以进行转化
3D视觉传感器可以模拟激光雷达
利用一系列包,可以把点云数据变成激光雷达数据(2d)
点云数据类型: sensor_msgs/PointCloud2
点云数据保存在pcd文件中
高级功能:MovtIt! 用于路径规划,自带避障功能和碰撞检查
如何将MovtIt!加入到机械臂中去实现导航功能
matlab+ROS,在matlab中建立ROS节点
Ros和matlab的通信:机器人系统工具箱

工业级机器人软件包:ROS-Industrial
ROS开发IDE:RobWare Studio IDE
ROS调试工具:roswtf

ROS编程
1.通信机制编程(话题/服务)
2.launch文件编写

可视化工具的使用:
1.QT工具箱
2.RVIZ
3.Gazebo

catkin根据package.xml进行程序包配置、基于CMakeLists.txt进行编译配置
package.xml必选标签:name、version、description、maintainer(程序包维护者)、license
package.xml可选标签:url、author、build_depend(编译依赖)、conflict、replace、build_export_depend、exec_depend(执行依赖)、test_depend、doc_depend、export、buildtool_depend(编译工具依赖)

ROS开发整体步骤:
1.创造工作空间、创造功能包
2.编写中具体的cpp文件
3.修改程序包中的CMakeLists.txt
4.catkin_make
5.节点运行启动程序

创建功能包
cd ~/catkin_ws/src
catkin_create_pkg 程序包名 依赖(roscpp/rospy)

节点运行
rosrun 程序包名 节点名

资源配置:
msg、srv、action、param、launch文件、yaml文件

编写launch文件
1)node标签
属性
(1)name 节点名称(必选)
(2)pkg 包名称(必选)
(3)type 节点类型(必选) 与节点生成可执行文件(name)同名
(4)args 节点启动参数(可选)
(5)respawn 是否复位,中止是是否重启(可选)
(6)respawn_delay 节点终止后延迟重启的时间(可选)
(7)mechine 节点所在设备名(可选)、
(8)require 是否为关键节点(可选),关键节点终止后所有节点结束
(9)clear_params 是否再启动前清楚节点私有空间中的全部参数(可选)
(10)output 日志输出的位置(可选)
(11)launch-prefix 启动前缀,可启动gdb, valgrind等工具
示例:
2)mechine 标签
本地节点不需要该参数,跨设备用ssh启动节点,要该标签
属性
(1)name 设备主机名(必选)
(2)address 设备网络地址,主机名(必选)
(3)env-loader 远程设备上的环境变量文件(必选)
实例:

3)include标签
用于导入其他文件
4)group标签
在同一个命名空间下启动一组节点



5)替代变量
(1)替代环境变量:env
(2)替代文件路径:find
(3)替代节点名称:anon
(4)替代参数值:arg

加载参数使用YAML文件
YAML文件格式:
param_name: param_data
通过rosparam标签加载yaml

<rosparam file=”$(find example_1)/config/test.yaml”/>

每个节点都会有自己的坐标系

声音方面应用:
语音识别、语音合成、声源定位

cv_bridge程序包是ros和opencv之间的桥梁

URDF控制机器人模型的生成
生成URDF的三种方式:
1.直接写URDF文件(最复杂)
2.写Xarco然后转URDF
3.用软件可视化生成(如Solidworks)

学ROS的几大重点:
了解编程步骤:话题、消息(古月居ROS二十一讲部分)
熟记各个命令的功能
ROS中各个qt工具包的使用
rviz的使用方法
gazebo中创建模型(环境,物体)、导入模型(环境,物体)

rosbag
rostime

ros中导航软件包的实现思路:
1.通过SLAM先构建地图(gmapping)
2.利用amcl确定自身在地图中的初始位姿
3.设置起点,终点
4.全局规划器(global planner)进行全局路径规划,局部规划器(local planner)进行局部路径规划
5.局部路径规划器驱动小车底盘进行移动

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值