首页 > 代码库 > 第四课4、ROS客户端

第四课4、ROS客户端

ROS客户端提供一些列库文件用于用户开发。

技术分享

ROSCPP客户端(c++客户端)

首先新建一个包

技术分享

然后catkin_make一下

技术分享

在新建的包目录下,建立一个消息文件msg

技术分享

技术分享

然后需要生成消息foo.h以便以后我们可以调用,我们进入package.xml里面去修改,

技术分享

然后再回到CMakeLists.txt中

技术分享

技术分享

技术分享

下面编译一下,

技术分享

下面来写一下代码:

我们以前已经写过了make文件,查看一下

技术分享

有了这个文件,我们就可以在eclipse中打开这个工程,先执行一下这个文件:

下面打开eclipse

然后file->import,

技术分享

下面要在src中写一个源文件,叫做move_publisher.cpp

技术分享

再写一个move_subscriber.cpp

技术分享

首先要控制turtlesim,他的话题topic是/turtle1/cmd_vel消息类型为geometry_msgs/Twist

下面编写发布程序

 

/*  * move_publisher.cpp  *

 *  Created on: Jan 16, 2017

 *      Author: gary  */

#include<ros/ros.h> //消息的头文件

#include<geometry_msgs/Twist.h>

//一定要加命令行参数,argc指参数个数

//argv为具体的参数

int main(int argc,char **argv)

{  

//初始化,move_publisher为节点名称

 ros::init(argc,argv,"move_publisher");  

//定义一个句柄  

ros::NodeHandle n;  

//定义一个发布者对象pub,指定需要的类型为geometry_msgs::Twist

 //发布的主题为turtle1/cmd_vel,缓冲区大小为1000  ros::Publisher pub=n.advertise<geometry_msgs::Twist>("turtle1/cmd_vel",1000);  

//实例化一个消息对象  

geometry_msgs::Twist tw;  

//并对它进行赋值,分别是角速度赋值

 tw.angular.z=2;  

tw.angular.x=0;  

tw.angular.y=0;  

//线速度赋值  

tw.linear.x=2;

 tw.linear.y=0;  

tw.linear.z=0;

 //上面消息结构已经定义了,下面发布这个消息  

//指定发布频率,允许循环频率当前是10HZ,

 ros::Rate rate(10);  //ros::ok()如果按下ctrl+c则它会返回一个false值  

while(ros::ok())  

{   //指定要发布的消息   

pub.publish(tw);   

//spin()是指在此处固定等待消息,进入循环

  //spin_once()循环一次执行回调函数  

 ros::spin(); //要改成ros::spinOnce()才能正确运行

 }

 rate.sleep();

}

下面修改一下CMakeLists.txt,

添加一行

add_executable(move_publisher src/move_publisher.cpp)

以及

target_link_libraries(move_publisher
   ${catkin_LIBRARIES}
 )

保存一下,下面来编译,

catkin_make,编译正确后,运行一下

rosrun turtle_move move_publisher

 下面再写一个订阅者:

把刚刚的消息加到订阅者里面来,也把发布者和接收者写到一起,

技术分享

技术分享

然后修改CMakeLists.txt

加入以下:

add_executable(move_subscriber src/move_subscriber.cpp)

target_link_libraries(move_publisher
   ${catkin_LIBRARIES}
 )

再进行编译

catkin_make,没有问题,之后运行之,正确。

下面再写一个计时器:

类似于创建一个主题订阅

技术分享

技术分享

然后在CMakeLists.txt里面再修改,

添加上

add_executable(timer src/timer.cpp)

target_link_libraries(timer
   ${catkin_LIBRARIES}
 )

然后编译正确,然后运行,结果也是正确的。

 

第四课4、ROS客户端