ROS学习(1)节点程序

step 1:创建工作空间:

参见官网 http://wiki.ros.org/catkin/Tutorials/create_a_workspace

点击打开链接

$ mkdir -p  ~/dev/catkin_ws/src             
$ cd  ~/dev/catkin_ws/src
$ catkin_init_workspace                      
$ cd  ~/dev/catkin_ws                             
$ catkin_make                                     
$ source devel/setup.bash                 

step 2:创建ROS功能包:

$ cd ~/dev/catkin_ws/src
$ catkin_create_pkg chapter2_tutorials std_msgs roscpp

编译:

$ cd  ~/dev/catkin_ws
$ catkin_make       

step 3:创建节点:

此步需要使用 vim 如果未安装 需自行安装

$ sudo apt-install vim

创建节点

$ roscd chapter2_tutorials/src
$ vim example1_a.cpp

利用 vim 编写 example1_a.cpp 文件 内容如下:

#include "ros/ros.h"
#include "std_msgs/String.h"//  
#include <sstream>///包含要使用的文件类型
int main(int argc, char **argv)
{
  ros::init(argc, argv, "example1_a");//启动该节点并设置其名称,名称必须唯一  
  ros::NodeHandle n;//设置节点进程的句柄  
  ros::Publisher pub = n.advertise<std_msgs::String>("message", 1000);//将节点设置成发布者,并将所发布>主题道类型和名称告知节点管理器。第一个参数是消息的名称:message,第二个是缓冲区道大小。如果主题发布数据速度较快
                                                                       ,那么将缓冲区设置为1000个消息。  
  ros::Rate loop_rate(10);//设置发送数据道频率为10Hz  
  while (ros::ok())//当收到Ctrl+C的按键消息或ROS停止当前节点运行时,ros::ok()库会执行停止节点运行道命令  
  {
//创建一个消息变量,变量类型必须符合发送数据的要求  
    std_msgs::String msg;
    std::stringstream ss;
    ss << " I am the example1_a node ";
    msg.data = ss.str();
    //ROS_INFO("%s", msg.data.c_str());  
    pub.publish(msg);//消息被发布  
    ros::spinOnce();//如果一个订阅者出现,ROS就会更新和读取所有主题  
    loop_rate.sleep();//按照10Hz的频率将程序挂起  
  }
  return 0;
}

再同样编写example1_b.cpp

$ vim example1_b.cpp
#include "ros/ros.h"
#include "std_msgs/String.h"

void messageCallback(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, "example1_b");
   ros::NodeHandle n;
    /创建一个订阅者,并从主题获取以message为名称的消息数据。设置缓冲区为1000个消息,处理消息句柄的回调函数>为messageCallback  
   ros::Subscriber sub = n.subscribe("message", 1000, messageCallback);
      ros::spin()库是节点读取数据道消息响应循环,当消息到达的时候,回调函数就会被调用。当按下Ctrl+C时,节点会退出消息循环,于是循环结束。  
   ros::spin();
   return 0;
}  

vim 的 基础操作可参见:vim操作

step 4:编译节点:

$ rosed chapter2_tutorials CMakeList.txt  //如果你这步没有出现错误,恭喜你,但是我在执行这步时出现问题:不能找见chapter2_tutorials这个包

解决方法如下:

点击打开链接

之后再运行上一个命令,在CMakeLists.txt后面添加

include_directories(
include
  ${catkin_INCLUDE_DIRS}
)

add_executable(example1_a src/example1_a.cpp)
add_executable(example1_b src/example1_b.cpp)

add_dependencies(example1_a
chapter2_tutorials_generate_messages_cpp)
add_dependencies(example1_b
chapter2_tutorials_generate_messages_cpp)

target_link_libraries(example1_a ${catkin_LIBRARIES})
target_link_libraries(example1_b ${catkin_LIBRARIES})

step 5: 运行:

$ cd ~/dev/catkin_ws
$ catkin_make --pkg chapter2_tutorials 
$ roscore

再打开一个shell

 $ rosrun chapter2_tutorials example1_a 

再打开一个shell

 $ rosrun chapter2_tutorials example1_b

如果运行成功会得到:

参考资料:

Mastering ROS for Robotics Programming(PACKT,2015)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值