博客参考:https://blog.csdn.net/qq_41450811/article/details/80305846python
RoboWare Studio是一个ROS集成开发环境。它使 ROS开发更加直观、简单、而且易于操做。可进行ROS工做区及包的管理、代码编辑、构建及调试。bash
下载连接:https://pan.baidu.com/s/1D169dFyf2OD3SFBZVZy3pQ 密码:3iuk服务器
准备oop
安装前,请查看系统环境并确认:
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 或更高版本ui
sudo apt-get install clang-format-3.8
安装spa
下载Roboware Studio最新版,在下载的文档下,鼠标右键调出终端输入:操作系统
sudo dpkg -i roboware-studio_<version>_<architecture>.deb
i386为32位版本,amd64为64位版本. 安装过程会弹出 用户协议 能够按 ESC 选择确认!.net
启动
软件界面以下
新建工做区,选择用户目录下,名称 : 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; }
从新编译,运行
1. 首先设置断点
2. 选择生成的二进制文件
3. 选择启动调试
CMakeLists.txt须要将构建工程类型设置以下
SET(CMAKE_BUILD_TYPE Debug) SET(CMAKE_CXX_FLAGS "-g")