zoukankan      html  css  js  c++  java
  • Roboware Ubuntu 16.04 安装和使用

    博客参考:https://blog.csdn.net/qq_41450811/article/details/80305846

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

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

    准备

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

    sudo apt-get install build-essential
    

    4. 为支持 Python 相关功能,需要安装 pylint

    sudo apt-get install python-pip
    sudo python -m pip install pylint

    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位版本. 安装过程会弹出 用户协议 可以按 ESC 选择确认!

    启动

    软件界面如下

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

    创建工作空间之后的窗口如下

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

     

     Ctrl+`调出Terminal, catkin_make构建之后:

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

    测试正常, Ctrl+c结束即可

    创建一个包

    编辑依赖的ROS包列表

    输入依赖的ROS包, 对应的CMakeLists.txt将生成相应的指令

    创建ROS消息和ROS服务

    1. 右键包名,新建Msg文件夹

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

     

    编译之后,先运行roscore再测试下msg:

    如果已经将当前工作空间写到了 ~/.bashrc,可以直接在工程编译完后运行,否则还是要先初始化运行环境 

    source devel/setup.bash
    

    创建一个Srv空文件夹

    srv文件分为请求和响应两部分,由'---'分隔。下面是srv的一个样例:

    int64 A
    int64 B
    ---
    int64 Sum

    其中 A 和 B 是请求, 而Sum 是响应。

     

    同样的CMakeLists.txt 自动添加:

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

     

    重新编译之后,生成的内容在文件夹下分布如下

    所有在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 

    //listener.cpp
    
    #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;
    }
    
    //talker.cpp
    
    #include "sstream"
    #include "ros/ros.h"
    #include "std_msgs/String.h"
    
    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;
    }
    

    重新编译,运行

    //terminal 1
    rosrun ke_package talker
    
    //terminal 2
    rosrun ke_package listener
    

    显示效果如下

     

    Listener Node

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

    源代码如下

    //clients
    
    #include "ros/ros.h"
    #include <cstdlib>
    #include "ke_package/AddTwoInts.h"
    
    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<ke_package::AddTwoInts>("add_two_ints");
        ke_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;
    }
    
    //server
    
    #include "ros/ros.h"
    #include "ke_package/AddTwoInts.h"
    
    bool add(ke_package::AddTwoInts::Request &req,ke_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;
    }
    

    重新编译,运行

    debug调试

    1. 首先设置断点

    2. 选择生成的二进制文件

    3. 选择启动调试

     CMakeLists.txt需要将构建工程类型设置如下

    SET(CMAKE_BUILD_TYPE Debug)
    SET(CMAKE_CXX_FLAGS "-g")
    

      

  • 相关阅读:
    我理解的SNS(一)
    获取某命名规则下一系列表的总条数
    lock后日志干净了
    设计模式学习系列之UML图(创建型模式)
    CLR实用特征异常
    arcgis api for flex 高级主题(一) esri tilemap 四叉树索引研究<转>
    arcgis api for flex 开发入门(三)地图浏览控件的使用<转>
    深入浅出 Javascript API(三)地图配置<转>
    深入浅出 Javascript API(四)绘制 Graphics<转>
    arcgis api for flex 开发入门(二)map 的创建<转>
  • 原文地址:https://www.cnblogs.com/flyinggod/p/11444353.html
Copyright © 2011-2022 走看看