Ubuntu 16.04 RobotWare 开发环境配置

  [TOC]

RoboWare Studio简介

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 选择确认!

启动界面如下

功能测试

新建工作区

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

工作空间

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

工程类型

选择Release/Debug

构建工程

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

roscore

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

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

创建一个包

编辑依赖的ROS包列表

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

创建ROS消息和ROS服务

ROS消息

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

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

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

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

source devel/setup.bash

ROS服务

创建一个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/ke_package/

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

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

lisp文件会出现在如下路径

~/catkin_ws/devel/share/commonlisp/ros/ke_package/msg/ 

源代码如下
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

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

显示效果如下

Debug调试

  1. 首先设置断点
  1. 选择生成的二进制文件
  1. 选择启动调试

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安装之后,却不能正常使用

解决方法,/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实用功能
posted @ 2020-10-18 17:28  采男孩的小蘑菇  阅读(853)  评论(0编辑  收藏  举报