• 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

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

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

    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.局部路径规划器驱动小车底盘进行移动

  • 相关阅读:
    NLTK(自然语言工具包)
    python+nodejs+Vue宠物用品商城系统django源码介绍
    23062C++&QTday5
    【UE】在游戏运行时,通过选择uasset来生成静态网格体
    7.Excel vba开发-突出显示范围内的最大值
    C++ map和hashmap用法
    JVM(9)之JVM对象创建与内存分配深度剖析
    Android - 无序广播动态注册广播
    再不跳槽,就晚了....
    【老生谈算法】matlab实现自适应对消器的LMS算法——LMS算法
  • 原文地址:https://blog.csdn.net/gls_nuaa/article/details/127969049