• RoboWare Studio 安装


    RoboWare Studio是一个ROS集成开发环境。它使 ROS开发更加直观、简单、并且易于操作。可进行ROS工作区及包的管理、代码编辑、构建及调试。

    下载链接:https://pan.baidu.com/s/1D169dFyf2OD3SFBZVZy3pQ   密码:3iuk

    准备

    安装前,请查看系统环境并确认:
    (1)操作系统 为 Ubuntu。
    (2)已完成ROS的安装配置。ROS安装步骤可参照官方网站:
             http://wiki.ros.org/kinetic/Installation/Ubuntu
    (3)可使用 catkin_make 构建ROS包。若无法构建,可能需要运行:

    $ sudo apt-get install build-essential
    (4)为支持 Python 相关功能,需要安装 pylint。

    $ sudo python -m pip install pylint
    $ sudo apt-get install python-pip
    (5)为支持 clang-format 相关功能,需要安装 clang-format-3.8 或更高版本。

    $ sudo apt-get install clang-format-3.8
    安装

    下载Roboware Studio最新版,在下载的文档下,鼠标右键调出终端输入:

    $ sudo dpkg -i roboware-studio_<version>_<architecture>.deb
    i386为32位版本,amd64为64位版本

    输入安装包的名字时,可以tab键自动补全~!

    安装过程会弹出 用户协议 可以按 ESC 选择确认!

    安装过程会弹出 用户协议 可以按 ESC 选择确认!

    安装过程会弹出 用户协议 可以按 ESC 选择确认!(坑了好多人,重要的事说三遍~!)

    启动

        图标就是这个

    点击图标打开软件:

    新建工作区,选择用户目录下 ,名称 :catkin_ws


    进来后就是这个样子:


    选择Release , 然后在上面菜单栏ROS点击构建:

    构建之后:

    测试ros是否正常运行,运行roscore :

    测试正常~! ctrl + c 取消


    新建一个包:

    更改 package.xml 信息(随便按键盘字母就能输入了):

    左上角 文件--保存

    编辑依赖的ROS包列表

    CMakeLists.txt 自动更新依赖关系:

    ctrl + ` 调出roboware studio终端
    在工作空间编译一下lee_package:

    创建ROS消息和ROS服务
    右键包名,新建Msg文件夹:

    保存。


    CMakeLists.txt 自动加入一些运行依赖(如果不用这个IDE必须手动添加):

    这个软件的强大开始体现~!


    测试下msg:

    OK~!


    创建一个Srv空文件夹:
    srv文件分为请求和响应两部分,由'---'分隔。下面是srv的一个样例:
    int64 A
    int64 B
    ---
    int64 Sum
    其中 A 和 B 是请求, 而Sum 是响应。

    同样的CMakeLists.txt 自动添加:

    下面通过rossrv show命令,检查ROS是否能够识该服务

    重新编译我们的package:

    编译完成!
    所有在msg路径下的.msg文件都将转换为ROS所支持语言的源代码。
    生成的C++头文件将会放置在:
    ~/catkin_ws/devel/include/lee_package/
    Python脚本语言会在:
    ~/catkin_ws/devel/lib/python2.7/distpackages/lee_package/msg 目录下创建。
    lisp文件会出现在:
    ~/catkin_ws/devel/share/commonlisp/ros/lee_package/msg/ 路径下.

    创建消息发布器 talker 和订阅器 listener :

    #include "ros/ros.h"
    #include "std_msgs/String.h"
    #include "sstream"

    int main(int argc, char **argv)
    {
    ros::init(argc, argv, "talker");
    ros::NodeHandle n;
    ros::Publisher chatter_pub = n.advertise<std_msgs::String>("chatter", 1000);
    ros::Rate loop_rate(10);
    int count=0;
    while (ros::ok())
    {
    std_msgs::String msg;
    std::stringstream ss;
    ss << "hello ros~!" << count;
    msg.data = ss.str();
    ROS_INFO("%s",msg.data.c_str());
    chatter_pub.publish(msg);
    ros::spinOnce();
    loop_rate.sleep();
    ++count;
    }
    return 0;
    }


    #include "ros/ros.h"
    #include "std_msgs/String.h"
    void chatterCallback(const std_msgs::String::ConstPtr& msg)
    {
    ROS_INFO("I heard: [%s]", msg->data.c_str());
    }
    int main(int argc, char **argv)
    {
    ros::init(argc, argv, "listener");
    ros::NodeHandle n;
    ros::Subscriber sub = n.subscribe("chatter", 1000,chatterCallback);
    ros::spin();
    return 0;
    }
    现在运行 catkin_make:

    成功编译~!


    编写发布器和订阅器:
    启动发布器
    确保roscore可用,并运行:

    新终端中:
    $ rosrun lee_package talker
    启动订阅器
    上面我们编写了一个名为"listener"的订阅器节点。现在新终端中运行它:
    $ rosrun lee_package listener


    编写简单的服务器和客户端:


    #include "ros/ros.h"
    #include "lee_package/AddTwoInts.h"
    bool add(lee_package::AddTwoInts::Request &req,lee_package::AddTwoInts::Response &res)
    {
    res.sum = req.a + req.b;
    ROS_INFO("request: x=%ld, y=%ld", (long int)req.a, (long int)req.b);
    ROS_INFO("sending back response: [%ld]", (long int)res.sum);
    return true;
    }
    int main(int argc, char **argv)
    {
    ros::init(argc, argv, "add_two_ints_server");
    ros::NodeHandle n;
    ros::ServiceServer service = n.advertiseService("add_two_ints",add);
    ROS_INFO("Ready to add two ints.");
    ros::spin();
    return 0;
    }

    #include "ros/ros.h"
    #include "lee_package/AddTwoInts.h"
    #include <cstdlib>
    int main(int argc, char **argv)
    {
    ros::init(argc, argv, "add_two_ints_client");
    if (argc != 3)
    {
    ROS_INFO("usage: add_two_ints_client X Y");
    return 1;
    }
    ros::NodeHandle n;
    ros::ServiceClient client = n.serviceClient<lee_package::AddTwoInts>("add_two_ints");
    lee_package::AddTwoInts srv;
    srv.request.a = atoll(argv[1]);
    srv.request.b = atoll(argv[2]);
    if (client.call(srv))
    {
    ROS_INFO("Sum: %ld", (long int)srv.response.sum);
    }
    else
    {
    ROS_ERROR("Failed to call service add_two_ints");
    return 1;
    }
    return 0;
    }
    现在运行catkin_make命令:


    分别在两个终端中运行下面指令:
    $ rosrun lee_package add_two_ints_server
    $ rosrun lee_package add_two_ints_client 3 5

    参考资料:

    ROS官方wiki:http://www.ros.org

    roboware官网:http://www.roboware.me

    ----------------------------------------------------------------


    欢迎大家转载我的文章。
    ---------------------
    作者:宇智波罩
    来源:CSDN
    原文:https://blog.csdn.net/qq_41450811/article/details/80305846
    版权声明:本文为博主原创文章,转载请附上博文链接!

  • 相关阅读:
    有关数据恢复的几个概念的理解
    cmsr 1.0.6
    Cmsr 1.0.5
    Cmsr 1.0.4
    vue中的v-model 与 .sync
    es6中clss做了些什么 怎么继承
    Cmsr 1.0.2
    Cmsr 1.0.1
    Cmsr 1.0.0
    VUE3.0新特性
  • 原文地址:https://www.cnblogs.com/dayspring/p/9889618.html
Copyright © 2020-2023  润新知