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

Robotware下载地址: 百度网盘 密码:3iuk

安装环境准备

  1. 安装环境 Ubuntu 16.04 X86_64
  2. 已完成ROS的安装配置。ROS安装步骤可参照ROS官方网站
  3. 可使用 catkin_make 构建ROS包。若无法构建,可能需要运行:
sudo apt-get install build-essential
  1. 为支持 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 选择确认!

启动界面如下

Ubuntu 16.04 RobotWare 开发环境配置

功能测试

新建工作区

选择用户目录下,名称 : catkin_ws

Ubuntu 16.04 RobotWare 开发环境配置

工作空间

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

Ubuntu 16.04 RobotWare 开发环境配置

工程类型

选择Release/Debug

Ubuntu 16.04 RobotWare 开发环境配置

构建工程

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

Ubuntu 16.04 RobotWare 开发环境配置

roscore

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

Ubuntu 16.04 RobotWare 开发环境配置
Ubuntu 16.04 RobotWare 开发环境配置

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

创建一个包

Ubuntu 16.04 RobotWare 开发环境配置

编辑依赖的ROS包列表

Ubuntu 16.04 RobotWare 开发环境配置

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

Ubuntu 16.04 RobotWare 开发环境配置

创建ROS消息和ROS服务

ROS消息

  1. 右键包名,新建Msg文件夹
Ubuntu 16.04 RobotWare 开发环境配置

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

Ubuntu 16.04 RobotWare 开发环境配置
Ubuntu 16.04 RobotWare 开发环境配置
Ubuntu 16.04 RobotWare 开发环境配置
Ubuntu 16.04 RobotWare 开发环境配置

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

Ubuntu 16.04 RobotWare 开发环境配置

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

source devel/setup.bash

ROS服务

创建一个Srv空文件夹

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

int64 A
int64 B
---
int64 Sum

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

Ubuntu 16.04 RobotWare 开发环境配置

同样的CMakeLists.txt 自动添加:

Ubuntu 16.04 RobotWare 开发环境配置

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

Ubuntu 16.04 RobotWare 开发环境配置

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

所有在msg路径下的.msg文件都将转换为ROS所支持语言的源代码。

生成的C++头文件将会放置在如下位置

~/catkin_ws/devel/include/ke_package/

Python脚本语言会在如下目录下创建

~/catkin_ws/devel/lib/python2.7/distpackages/ke_package/msg 

lisp文件会出现在如下路径

~/catkin_ws/devel/share/commonlisp/ros/ke_package/msg/ 
Ubuntu 16.04 RobotWare 开发环境配置

源代码如下
client.cpp

#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.cpp

#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;
}

编译,运行

//terminal 1
rosrun ke_package client
 
//terminal 2
rosrun ke_package server
Ubuntu 16.04 RobotWare 开发环境配置
Ubuntu 16.04 RobotWare 开发环境配置

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

显示效果如下

Ubuntu 16.04 RobotWare 开发环境配置
Ubuntu 16.04 RobotWare 开发环境配置

Debug调试

  1. 首先设置断点
Ubuntu 16.04 RobotWare 开发环境配置
  1. 选择生成的二进制文件
Ubuntu 16.04 RobotWare 开发环境配置
  1. 选择启动调试
Ubuntu 16.04 RobotWare 开发环境配置

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

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

快捷操作

构建中错误定位

完成构建选项选择后, 点击配置列表左侧的构建按钮,或选择“ROS” -“构建”即可构建对应版本的 ROS 包。 构建完成后, 资源管理器窗口下方的“ROS 节点”子窗口会显示当前工作区下所有的 ROS 包及节点列表。选择“查看 - 输出”可打开“输出” 窗口,显示构建输出结果。若构建过程中出现错误,按住“CTRL”键并点击错误提示,即可跳转到源代码对应位置

构建工作区下的一个或多个包

默认情况下,点击“构建” 按钮会构建当前工作区下的所有包。 如果只想构建其中的一个或多个包, 可右键点击包名, 将其设置为活动状态。 可同时将一个或多个包设置为活动状态。此时, 不被编译的包即称为“非活动包”,在目录列表中将会以删除线标记出来。 点击“构建” 按钮, RoboWare Studio 只会对处于活动状态的包进行构建。

常见问题

clang-formate

clang-formate-3.8安装之后,却不能正常使用

Ubuntu 16.04 RobotWare 开发环境配置

解决方法,/usr/bin目录下创建快捷方式

whereis clang-format-3  
clang-format-3: /usr/bin/clang-format-3.8  
sudo ln -s /usr/bin/clang-format-3.8 /usr/bin/clang-format  

参考

  1. Roboware Studio教程
  2. roboware实用功能

相关文章: