• ROS学习记录2018.7.10


    ROS学习记录2018.7.10

    1.ROS基础了解

    开源机器人操作系统ROS(robot operation system)

    分级:

    1.计算图集(一种网络结构)
    	1.节点:执行运算的进程(做基础处理的单元)
    	2.消息:有严格数据结构的通讯
    	3.主题:发布者/订阅者之间的媒介(类似报纸、凤凰新闻这类)
    	4.服务:一个请求/一个回应的唯一的ROS控制器(类似常说的服务器)
    
    • 1
    • 2
    • 3
    • 4
    2.文件系统集(ROS代码组织架构)
    	1.包package:软件各种文件的组织
    	2.堆stack:包的集合
    	注:manifest为提供元数据、许可信息、文件间依赖关系、编译参数。
    
    • 1
    • 2
    • 3
    3.社区集(代码库联合系统)

    构造函数:

    与类同名的函数,在调用类的时候会启动构造函数对类进行操作。

    析构函数:

    与类同名但名前多了~符号的函数,在释放类的时候会启动析构函数对类进行内部释放操作。

    ros::NodeHandle成员介绍:

    1.NodeHandle::advertise

    回调函数:void connectCallback(const ros::SingleSubscriberPublisher& pub);
    例:ros::Publisher pub = handle.advertise(“name”, 1, (ros::SubscriberStatusCallback) connectCallback);

    2.NodeHandle::subscribe

    回调函数:void Foo::Callback(const std_msg::String::ConstPtr& message);
    例:ros::Subscriber sub = handle.subscribe (“name”, 1, &Foo::Callback);

    3.NodeHandle::serviceClient

    例:ros::ServiceClient client = handle.serviceClien(“name”);

    4.NodeHandle::serviceServer

    例:ros::ServiceServer service = handle.advertiseService (“name”,Callback);

    2.ROS使用

    1.基础操作

    $ rospack find ‘nameofstack’:查找安装过的功能包集
    $ rosls ‘nameofstack’:显示功能包集下的文件列表
    $ roscd ‘nameofstack’:进入功能包文件夹

    2.创建ROS功能包:

    $ roscreate-pkg [name] [depend1] [depend2] [depend3]

    3.继续对ROS的了解学习(理论):

    了解ROS操作命令,ROS基本工具,OpenCV,SLAM等,但无法进行实际操作。
    继续ROS了解学习(SLAM与导航部分)

    4.研究学习

    经过自己研究学习,通过了ROS环境变量和工作空间的创建,并使用了virgo_test包进行了编译,并通过。

    5.开始操作ROS

    利用系统命令rospack find、roscreat-pkg、rosmake、rosnode等完成相应的动作。
    创建了新的功能包,并编译。
    使用了turtlesim功能包,打开海龟节点窗口;
    打开turtle_teleop_key控制海龟移动;
    使用命令你个查看主题、查看消息、字段;
    使用rostopic pub命令操作海龟曲线运动(圆圈)。
    但使用的是-1参数,即仅运行一次,而去掉该参数时,节点持续运行未退出,但是海龟仍是仅执行了一次运动;利用rostopic echo 查看消息信息,发现消息也仅发出一次;未能做到控制海龟持续运动。
    使用rostopic pub命令时,若要使海龟持续运动,需使用-r 10参数。
    使用服务(rosservice工具)可新建服务,新建一只海龟。

    6.使用参数服务器,查看所有共享数据及相关信息。

    在之前新建的功能包内,创建新节点,并使用VIM工具编写2个.cpp文件,用于例程练习用。
    编译创建并编写的节点,运行节点。

    7.使用srv文件:

    编写服务节点,通过srv文件提供3 ints求和运算;
    编写客户节点,通过srv文件计算3个ints数的和,并显示。
    也可使用如下语句调用srv服务:
    $ rosservice call add_3_inits 1 2 3

    8.使用msg文件:

    编写发布节点,发布msg文件中定义的类型消息;
    编写订阅节点,接收msg文件中定义的类型消息,并显示。

    9.根据:

    《ROS培训文档.ppt》 、《ROS学习文档.doc》进行学习。
    把代码拷贝到虚拟机内进行catkin_make编译,编译通过。
    期间出现过2个重要问题:
    权限问题,解决:
    $ sudo chmod 777 –R *
    单包运行问题,解决:
    $ source ./devel/setup.bash

    10.看/virgo_frame/virgo_motion代码

    但代码比较散乱复杂,并且注释较少。
    考虑直接在ros里运行,直接通过终端看节点主题以及消息类型,可更直观的看出该节点的属性。
    全体catkin_make通过,但单包运行异常。
    后发现是需要
    $ source ./devel/setup.bash
    (注:每次启动项目都要source。)

    查看关系图:
    $ rqt_graph
    在这里插入图片描述

    有两个主题,并且使用如下语句也可以看到:
    $ rostopic list

    可查看该主题类型:
    $ rostopic type /motion/odom
    可查看消息类型:
    $ rosmsg show std_msgs/String
    可看到打印的消息数据:
    $ rostopic echo /motion/odom

    之后我想使用话题发布消息,需要自己编写节点,于是找了小乌龟节点试。
    启动乌龟界面:
    $ rosrun turtlesim turtlesim_node
    再启动按键控制乌龟的节点:
    $ rosrun turtlesim turtle_teleop_key

    查看过消息类型后,知道了自己应该发送的消息是什么了。
    开始自己创建功能包:
    $ catkin_creat_pkg turtle_ctrl std_msgs roscpp rospy
    编译一下:
    $ catkin_make –pkg turtle_ctrl
    新建.cpp文件并编入代码。
    编译:
    $ catkin_make –pkg turtle_ctrl
    但有很多错误。
    CMakeList.txt和package.xml需要修改,依赖项和源文件,修改过后通过编译。
    程序设计的是:前进一次、后退一次、左转一次。
    在这里插入图片描述

    查看关系图:$ rqt_graph

    11.

    附:点

  • 相关阅读:
    LeetCode(力扣)1005. K 次取反后最大化的数组和Python
    51单片机学习:ADC模数转换实验--光敏电阻AD采集
    排序算法-插入排序法(InsertSort)
    EasyCVR获取大华客流量数据时有一个设备未上传该如何解决?
    调用线程的run()和start()方法有什么不同呢?
    Maven安装详解
    模型训练遇到的问题
    Mysql事务
    【Java】微服务——微服务介绍和Eureka注册中心
    python数据处理—pandas相关函数的使用(持续更新)
  • 原文地址:https://blog.csdn.net/Tosonw/article/details/134066296