Ubuntu 16.04 RobotWare 開發環境配置


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實用功能


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM