博文

目前显示的是 九月, 2017的博文

【ROS学习-12】记录和播放备份数据

1. 先执行如下命令(分别在三个 Terminal 运行):   roscore   rosrun turtlesim turtlesim_node   rosrun turtlesim turtle_teleop_key    执行完后,在第三个命令的 Terminal 里按几次方向键。 2. 接下来执行如下命令将当前所有 Topic 都记录到 bag 里:   mkdir ~/ros/bagfiles   cd ~/ros/bagfiles/   rosbag record -a    执行完后,按 CTRL+c 中断。 3. 执行如下命令查看保存的 .bag 文件的信息:   rosbag info 2017-06-18-20-48-49.bag    执行后有如下内容打印输出:   path: 2017-06-18-20-48-49.bag   version: 2.0   duration: 26.9s   start: Jun 18 2017 20:48:49.72 (1497790129.72)   end: Jun 18 2017 20:49:16.59 (1497790156.59)   size: 242.0 KB   messages: 3358   compression: none [1/1 chunks]   types: geometry_msgs/Twist [9f195f881246fdfa2798d1d3eebca84a]   rosgraph_msgs/Log [acffd30cd6b6de30f120938c17c593fb]   turtlesim/Color [353891e354491c51aabe32df673fb446]   turtlesim/Pose [863b248d5016ca62ea2e895ae5265cf9]   topics:

【ROS学习-11】用C++编写一个简单的服务端和客户端

1. 首先执行 roscd beginner_tutorials 命令,然后创建 src/add_two_ints_server.cpp 服务端源码,内容如下:   #include "ros/ros.h"   #include "beginner_tutorials/AddTwoInts.h"   bool add(beginner_tutorials::AddTwoInts::Request &req,       beginner_tutorials::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;   } 2. 接下来创建 src/add_two_ints_client.cpp 客户端程序,源码如下:   #include "ros/ro

【ROS学习-10】用C++编写一个简单的Publisher和Subscriber

1. 创建 Publisher Node   roscd beginner_tutorials    创建 src/talker.cpp 文件,内容如下(可从 https://raw.github.com/ros/ros_tutorials/kinetic-devel/roscpp_tutorials/talker/talker.cpp 获取源码):   #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 world " << count;       msg.data = ss.str();         ROS_INFO("%s", msg.data.c_str());         chatter_pub.publish(msg);         ros::spinOnce();    

【ROS学习-9】创建ROS msg和srv

1. 关于 msg 和 srv     msg : msg files are simple text files that describe the fields of a ROS message. They are used to generate source code for messages in different languages.     srv : an srv file describes a service. It is composed of two parts: a request and a response.    msg files are stored in the  msg  directory of a package, and srv files are stored in the  srv  directory.    msgs are just simple text files with a field type and field name per line. The field types you can use are: int8, int16, int32, int64 (plus uint*) float32, float64 string time, duration other msg files variable-length array[] and fixed-length array[C]    There is also a special type in ROS:  Header , the header contains a timestamp and coordinate frame information that are commonly used in ROS. You will frequently see the first line in a msg file have  Header header .    Here is an example of a msg that uses a Header, a string primitive, and two other msgs :

【ROS学习-8】使用rqt_console和roslaunch

图片
1. 使用 rqt_console 和 rqt_logger_level   rosrun rqt_console rqt_console    执行完该命令后有如下界面:    继续执行如下命令:   rosrun rqt_logger_level rqt_logger_level    此时有如下新界面:    接下来继续运行如下命令:   rosrun turtlesim turtlesim_node    上面第一个截图更新为如下:    接下来执行如下命令发布一个 Topic :   rostopic pub /turtle1/cmd_vel geometry_msgs/Twist -r 1 -- '{linear: {x: 2.0, y: 0.0, z: 0.0}, angular: {x: 0.0, y: 0.0, z: 0.0}}'    第一个截图界面会不停的刷新 LOG 信息,如下截图: 2. 使用 roslaunch   roscd beginner_tutorials    执行访命令后有如下提示:   roscd: No such package/stack 'beginner_tutorials'    表示环境变量没设置,即在创建 Package 后的那个步骤,我们可以如下执行:   cd ~/ros/catkin_ws/   source devel/setup.sh    执行完上面两命令后,再执行上面的命令就没错误了,当前路径能切到相应的目录。    进入相应的包目录后(如 ~/ros/catkin_ws/src/beginner_tutorials ),接下来执行如下命令创建相应目录:   mkdir launch   cd launch/    接下来创建 turtlemimic.launch ,文件内容如下:   <launch>   <group ns="turtlesim1">   <node pkg="turtlesim" name="sim" type

【ROS学习-7】了解ROS Services和Parameters

图片
1. 使用 rosservice 命令通过 service 轻松 attach 到 ROS 的客户端服务器框架中, Services 是另一种 node 之间通信的方法,允许 node 发请求和接收响应。    执行 rosservice 命令,可以看到如下信息:   Commands:     rosservice args print service arguments     rosservice call call the service with the provided args     rosservice find find services by service type     rosservice info print information about service     rosservice list list active services     rosservice type print service type     rosservice uri print service ROSRPC uri   Type rosservice <command> -h for more detailed usage, e.g. 'rosservice call -h' 2. 执行 rosservice list 命令可以查看到对应结点提供的服务情况,如果没有运行 turtulesim_node 的话,会返回如下信息:   /rosout/get_loggers   /rosout/set_logger_level    如果运行了则返回如下信息:   /clear   /kill   /reset   /rosout/get_loggers   /rosout/set_logger_level   /spawn   /turtle1/set_pen   /turtle1/teleport_absolute   /turtle1/teleport_relative   /turtlesim/get_loggers   /turtlesim/set_l