RoboWare Studio是一個ROS集成開發環境。它使 ROS開發更加直觀、簡單、並且易於操作。可進行ROS工作區及包的管理、代碼編輯、構建及調試。
下載鏈接:https://pan.baidu.com/s/1D169dFyf2OD3SFBZVZy3pQ 密碼:3iuk
准備
安裝前,請查看系統環境並確認:
(1)操作系統 為 Ubuntu。
(2)已完成ROS的安裝配置。ROS安裝步驟可參照官方網站:
http://wiki.ros.org/kinetic/Installation/Ubuntu
(3)可使用 catkin_make 構建ROS包。若無法構建,可能需要運行:
$ sudo apt-get install build-essential
(4)為支持 Python 相關功能,需要安裝 pylint。
$ sudo python -m pip install pylint
$ sudo apt-get install python-pip
(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位版本
輸入安裝包的名字時,可以tab鍵自動補全~!
安裝過程會彈出 用戶協議 可以按 ESC 選擇確認!
安裝過程會彈出 用戶協議 可以按 ESC 選擇確認!
安裝過程會彈出 用戶協議 可以按 ESC 選擇確認!(坑了好多人,重要的事說三遍~!)
啟動
圖標就是這個
點擊圖標打開軟件:
新建工作區,選擇用戶目錄下 ,名稱 :catkin_ws
進來后就是這個樣子:
選擇Release , 然后在上面菜單欄ROS點擊構建:
構建之后:
測試ros是否正常運行,運行roscore :
測試正常~! ctrl + c 取消
新建一個包:
更改 package.xml 信息(隨便按鍵盤字母就能輸入了):
左上角 文件--保存
編輯依賴的ROS包列表
CMakeLists.txt 自動更新依賴關系:
ctrl + ` 調出roboware studio終端
在工作空間編譯一下lee_package:
創建ROS消息和ROS服務
右鍵包名,新建Msg文件夾:
保存。
CMakeLists.txt 自動加入一些運行依賴(如果不用這個IDE必須手動添加):
這個軟件的強大開始體現~!
測試下msg:
OK~!
創建一個Srv空文件夾:
srv文件分為請求和響應兩部分,由'---'分隔。下面是srv的一個樣例:
int64 A
int64 B
---
int64 Sum
其中 A 和 B 是請求, 而Sum 是響應。
同樣的CMakeLists.txt 自動添加:
下面通過rossrv show命令,檢查ROS是否能夠識該服務
重新編譯我們的package:
編譯完成!
所有在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 :
#include "ros/ros.h"
#include "std_msgs/String.h"
#include "sstream"
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;
}
#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;
}
現在運行 catkin_make:
成功編譯~!
編寫發布器和訂閱器:
啟動發布器
確保roscore可用,並運行:
新終端中:
$ rosrun lee_package talker
啟動訂閱器
上面我們編寫了一個名為"listener"的訂閱器節點。現在新終端中運行它:
$ rosrun lee_package listener
編寫簡單的服務器和客戶端:
#include "ros/ros.h"
#include "lee_package/AddTwoInts.h"
bool add(lee_package::AddTwoInts::Request &req,lee_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;
}
#include "ros/ros.h"
#include "lee_package/AddTwoInts.h"
#include <cstdlib>
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<lee_package::AddTwoInts>("add_two_ints");
lee_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;
}
現在運行catkin_make命令:
分別在兩個終端中運行下面指令:
$ rosrun lee_package add_two_ints_server
$ rosrun lee_package add_two_ints_client 3 5
參考資料:
ROS官方wiki:http://www.ros.org
roboware官網:http://www.roboware.me
----------------------------------------------------------------
歡迎大家轉載我的文章。
---------------------
作者:宇智波罩
來源:CSDN
原文:https://blog.csdn.net/qq_41450811/article/details/80305846
版權聲明:本文為博主原創文章,轉載請附上博文鏈接!