RoboWare官网:http://www.roboware.me/#/home (但好像进不去)
Roboware安装包下载:https://download.csdn.net/download/discoverhfub/11253865
若安装后会提示git不是最新版本,依次执行下面的命令可更新至最新版:
git --version
sudo add-apt-repository ppa:git-core/ppa
sudo apt-get update
sudo apt-get install git
git --version
两个可选插件:
1、为了支持Python调试功能,需要安装pylint:
$ sudo apt-get install python-pip
$ sudo python -m pip install pylint
2、为了获得更好的代码阅读体验,自动格式化整理代码,需要安装clang-format:
$ sudo apt-get install clang-format-3.8
——————————开始使用————————————
1、新建工作区,命名为catkin_ws(或者选择打开已有工作区)
2、右键src–>新建ros包,包的名字输入test std_msgs roscpp,第一个是package的名字,后面两个是依赖项。
3、对着test右键–>Add C++ Ros Node,增加C++Ros节点:test。test下多了两个文件test_pub.cpp和test_sub.cpp. 是模板。不用可删。或者新建.cpp文件。输入cpp文件名回车后选择executable
4.编译:点击左上角小锤子右边,选择debuge。以debuge模式编译。
5.点击小锤子–>运行。或者ctrl+shift+B,右下方就会出现如下: node->test
6.调试:启动master节点。点击菜单栏ROS–>open ~/.bashrc.这样可以打开.bashrc文件。(添加 source /home/“你自己的”/catkin_ws/devel/setup.bash)
7.启动roscore:ROS–>Run roscore
8.点击NODE,选择一个节点,这里选择test_sub。然后选择debug this file.此时就可以愉快的debug了。
——————————————小乌龟案例————————————
新建一个talker.cpp
#include "ros/ros.h"
#include "std_msgs/String.h"
#include "geometry_msgs/Twist.h"
#include <sstream>
int main(int argc, char **argv)
{
ros::init(argc, argv, "talker");
ros::NodeHandle n;
ros::Publisher chatter_pub = n.advertise<geometry_msgs::Twist>("/turtle1/cmd_vel", 1000);
ros::Rate loop_rate(10);
int count = 0;
while (ros::ok())
{
geometry_msgs::Twist msg; //定义一个twist类的消息对象
msg.linear.x=1; // 设置线速度为1m/s,正为前进,负为后退
msg.angular.z=1; // 设置角速度为1rad/s,正为左转,负为右转
chatter_pub.publish(msg);
ros::spinOnce();
loop_rate.sleep();
++count;
}
return 0;
}
写好后,点击锤子,编译
接下来,启动虚拟小乌龟:turtle
roscore
rosrun turtlesim turtlesim_node
就会出现一只小乌龟
再运行刚编写的cpp
乌龟就动起来了
改变速度参数
就可得到不同的小乌龟运动轨迹
接下来编写listen_node.cpp,订阅了turtle1/Pose话题上的消息
#include <ros/ros.h>
#include <turtlesim/Pose.h>
#include <iomanip>
void poseMessageReceived(const turtlesim::Pose& msg)
{
ROS_INFO_STREAM(std::setprecision(2) << std::fixed << "position=("<< msg.x <<","<< msg.y <<")" <<" *direction="<<msg.theta);
}
int main(int argv,char** argc)
{
ros::init(argv,argc,"listener_pose");
ros::NodeHandle node_Handle;
ros::Subscriber sub = node_Handle.subscribe("turtle1/pose",1000,&poseMessageReceived);
//订阅turtle1/pose
ros::spin();
return 0;
}
运行node
实时获取小乌龟的位姿: