博客參考: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")
