ROS通信编程--------小乌龟走正方形

ROS话题编程是嵌入式开发学习的一项重要内容,只有学会ros的话题与服务编程,我们才能够继续往更深入的地方学习嵌入式的系统开发,本次博客,林君将带大家学习怎么控制乌龟走正方形,并通过订阅服务实时在终端打印位置信息

一、进入我们的工程包,创建小乌龟画圆发送程序

1、新建一个终端,命名为终端1,然后进入我们的工程文件包

cd ~/ros/src/comm/src

这里ros是林君自己的ros工作空间、comm是林君自己定义的工程包!

2、新建画圆程序名为fang.cpp

touch fang.cpp

3、打开文件将如下代码写入fang.cpp中:

1)、打开文件如下命令

gedit fang.cpp

2)、写入文件中的代码如下命令:

#include <ros/ros.h>
#include <geometry_msgs/Twist.h>
#define PI 3.14159265358979323846int main(int argc, char **argv){ros::init(argc, argv, "draw_rectangle");   //"draw_rectangle"必须是nodenamestd::string topic = "/turtle1/cmd_vel"; //topic nameros::NodeHandle n;ros::Publisher cmdVelPub = n.advertise<geometry_msgs::Twist>(topic, 1);//第一个参数也可以写成"/turtle1/cmd_vel"这样的topic name//第二个参数是发布的缓冲区大小,<geometry_msgs::Twist>是消息类型ros::Rate loopRate(2);//与Rate::sleep();配合指定自循环频率ROS_INFO("draw_retangle start...");//输出显示信息geometry_msgs::Twist speed; // 控制信号载体 Twist message
//声明一个geometry_msgs::Twist 类型的对象speed,并将速度的值赋值到这个对象里面int count = 0;while (ros::ok()){speed.linear.x = 1; // 设置线速度为1m/s,正为前进,负为后退speed.linear.y = 0;speed.linear.z = 0;speed.angular.x = 0;speed.angular.y = 0;speed.angular.z = 0; count++;while(count == 5){count=0;speed.angular.z = PI; //转90°}cmdVelPub.publish(speed); // 将刚才设置的指令发送给机器人ros::spinOnce();//调用此函数给其他回调函数得以执行loopRate.sleep();//按loopRate(2)设置的2HZ将程序挂起}return 0;
}

4、关闭文件

到这里,我们的让小乌龟画圆的程序就编写好了,如下所示:

二、修改CMakeLists.txt文件内容

1、进入工程包comm文件夹

cd ~/ros/src/comm

2、打开CMakeLists.txt文件

gedit CMakeLists.txt

3、在CMakeLists.txt文件末尾添加如下代码:

add_executable(fang src/fang.cpp)
target_link_libraries(fang ${catkin_LIBRARIES})

如下图所示:

然后关闭CMakeLists.txt文件

三、编译程序

1、进入工作空间ros

cd ~/ros

2、编译我们创建好的程序

catkin_make

如下图所示即为成功:

你们的可能会长一点,但只要出现100%即为成功,我的只是之前编译过,所以比较快、少!

五、运行程序

1、程序注册

1)、回到我们的工作空间

cd ~/ros

2)、程序注册

source ./devel/setup.bash

2、新建一个终端,运行ros,我们命名为终端2

roscore

3、再新建一个终端,启动我们的小海龟,海龟的窗口我们命名为窗口3

rosrun turtlesim turtlesim_node

4、在终端1运行我们的小海龟走方形程序,也就是我们最开始的终端!

记住,我们新建的终端一个都不要关闭
1)、终端1运行画圆程序

rosrun comm fang

在该命令执行后,上面的窗口3都会发生变化,如下图所示:

小乌龟开始走方形,出现该结果,表示程序运行成功,本次实验成功!
2)、在终端1Ctrl+C关闭程序运行,如下所示:

以上就是本次博客的全部内容啦,欢迎收看林君本次博客的讲解,遇到问题的小伙伴欢迎评论区留言哦!写作不易,记得点赞、评论、关注哦!
陈一月的又一天编程岁月*_*!

ROS学习【3】-----ROS通信编程:小乌龟走正方形相关推荐

  1. ROS学习-理解ROS Services 和 Parameters

    假设上一篇博客:ROS学习-理解ROS话题中所启动的小乌龟turtlesim节点仍然还在运行. Services服务是节点之间进行相互联系的另外一种方式,允许节点之间进行发送请求和接收响应. 使用 r ...

  2. ROS学习-8 自定义动作编程的大坑

    想要实现如下功能:(假装实现,主要是为了练习action编程) 客户端发给服务器一个坐标 服务器控制机器人前往坐标 相关信息打印出来(这个比较随便) action文件 #goal uint32 x # ...

  3. ROS学习----依据ROS入门教程,整理的ROS命令

    文章目录 ROS命令学习 文件系统介绍 ROS文件系统工具命令:rospack,rosstack roscd,rosls 创建ROS程序包命令:roscreate,catkin程序包结构,catkin ...

  4. ROS学习笔记-ROS订阅和发布节点

    一个简单的ROS包,一个发布者,一个订阅者 刚开始学习ROS,参考网上的资料完成了测试节点的编写,记录一下. 个人习惯在home/Develop目录中做开发,于是在Develop目录下面创建了一个RO ...

  5. ROS学习笔记-ROS语音识别与语音输出[2]

    说明:代码部分是基于古月居前辈的例程,在此对胡老师表示感谢!! 语音识别与输出功能框图: main()函数: int main(int argc, char* argv[]) {// 初始化ROSro ...

  6. ROS学习笔记-ROS语音识别与语音输出[1]

    说明:代码部分是基于古月居前辈的例程,在此对胡老师表示感谢!! 语音识别功能框图: 调用过程: roscore rosrun robot_voice iat_publish rostopic pub ...

  7. 【ROS学习】ROS分布式通信

    我们都知道,把ROS系统运行在嵌入式平台上(比如树莓派)是可以运行的,但是性能远远没有强大的主机好,因此,如何将运算量大的内容在主机上计算,而嵌入式平台只需进行简单的运行通信呢?这就是本篇文章所要介绍 ...

  8. 机器人操作系统ROS学习实战篇之------让小乌龟画矩形

    继续研究ROS,今天的主题是编写节点让小乌龟画简单的几何图形. 主要参考这位老兄的博客https://blog.csdn.net/IMBA_09/article/details/84950696. 1 ...

  9. ROS学习笔记publisher的编程实现c++详解

    前言 基于B站ROS公开课:[古月居]古月·ROS入门21讲 基于Ubuntu 20.04.1.Noetic版本 提示:以下是本篇文章正文内容,下面案例可供参考 一.ros publisher C++ ...

  10. ROS学习-3 (C++编程实现创建发布者+发布数据控制海龟运动)

    古月居21讲第10个视频 此处是创建的发布者, 下图中的topic 和/turtle1/cmd_vel 是ROS 自带的 发布者要往这个话题中发布数据. #include <ros/ros.h& ...

最新文章

  1. Android 个人学习笔记- 导入android项目,无法自动生成R文件的解决方法
  2. 代码:android崩溃日志收集和处理
  3. Career Essentials Postgraduate Study: exploring your options 读完本科后干啥?
  4. 无法识别的属性“targetframework”。请注意属性名称区分大小写。_神奇!你思考过计算机是怎么识别玻璃和透明物体的吗?...
  5. C语言不调用库函数画一个三角形
  6. 建行计算机招聘考试考什么,银行招聘考试考什么
  7. as 插件GsonFormat用法(json字符串快速生成javabean)
  8. Boostrap Table学习笔记
  9. 几个比较好的app开发框架
  10. 小米手机下载二维码APP
  11. android源码分析辅助工具
  12. Ubuntu安装过程之磁盘分区图文教程
  13. Qnap威联通NAS数据丢失恢复方法
  14. labview中DAQ采集多个数据通道(温度传感器)(TTL信号的曲轴位置传感器)总结
  15. Homebrew进阶使用教程(二)-用一个命令行天气客户端构建自己的仓库
  16. 解决 `Failed to connect to github.com port 443: Connection refused`
  17. HDR视频色调映射算法(之二:Adaptive temporal TMO)
  18. C++Primer阅读笔记
  19. 【c++】如何获取int类型最大值以及float类型最大值
  20. 商业贷款和公积金贷款差多少?一组数据告诉你!

热门文章

  1. 【游戏开发实战】使用Unity制作水果消消乐游戏教程(一):生成冰块阵列
  2. 手游服务器开发技术详解
  3. 龙之谷手游服务器修改,龙之谷手游互通区一览 5月12日部分服务器数据互通公告...
  4. Orientation模块管理设备的方向信息,包括alpha、beta、gamma三个方向信息,通过plus.orientation可获取设备方向管理对象
  5. calibre的使用技巧
  6. 音视频5.1——MediaCodec 同步方式完成AAC硬解成PCM
  7. 一起学爬虫(Python) — 22 自动化详解
  8. matlab 逐日 变逐月,一个逐日系统程序 用SWITCH咋也跳不出循环 求大神指教
  9. SCAU程序设计在线实训平台_实验_高级语言程序设计_教材习题_第七章
  10. Received status code 409 from server: Conflict