ROS学习【3】-----ROS通信编程:小乌龟走正方形
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通信编程:小乌龟走正方形相关推荐
- ROS学习-理解ROS Services 和 Parameters
假设上一篇博客:ROS学习-理解ROS话题中所启动的小乌龟turtlesim节点仍然还在运行. Services服务是节点之间进行相互联系的另外一种方式,允许节点之间进行发送请求和接收响应. 使用 r ...
- ROS学习-8 自定义动作编程的大坑
想要实现如下功能:(假装实现,主要是为了练习action编程) 客户端发给服务器一个坐标 服务器控制机器人前往坐标 相关信息打印出来(这个比较随便) action文件 #goal uint32 x # ...
- ROS学习----依据ROS入门教程,整理的ROS命令
文章目录 ROS命令学习 文件系统介绍 ROS文件系统工具命令:rospack,rosstack roscd,rosls 创建ROS程序包命令:roscreate,catkin程序包结构,catkin ...
- ROS学习笔记-ROS订阅和发布节点
一个简单的ROS包,一个发布者,一个订阅者 刚开始学习ROS,参考网上的资料完成了测试节点的编写,记录一下. 个人习惯在home/Develop目录中做开发,于是在Develop目录下面创建了一个RO ...
- ROS学习笔记-ROS语音识别与语音输出[2]
说明:代码部分是基于古月居前辈的例程,在此对胡老师表示感谢!! 语音识别与输出功能框图: main()函数: int main(int argc, char* argv[]) {// 初始化ROSro ...
- ROS学习笔记-ROS语音识别与语音输出[1]
说明:代码部分是基于古月居前辈的例程,在此对胡老师表示感谢!! 语音识别功能框图: 调用过程: roscore rosrun robot_voice iat_publish rostopic pub ...
- 【ROS学习】ROS分布式通信
我们都知道,把ROS系统运行在嵌入式平台上(比如树莓派)是可以运行的,但是性能远远没有强大的主机好,因此,如何将运算量大的内容在主机上计算,而嵌入式平台只需进行简单的运行通信呢?这就是本篇文章所要介绍 ...
- 机器人操作系统ROS学习实战篇之------让小乌龟画矩形
继续研究ROS,今天的主题是编写节点让小乌龟画简单的几何图形. 主要参考这位老兄的博客https://blog.csdn.net/IMBA_09/article/details/84950696. 1 ...
- ROS学习笔记publisher的编程实现c++详解
前言 基于B站ROS公开课:[古月居]古月·ROS入门21讲 基于Ubuntu 20.04.1.Noetic版本 提示:以下是本篇文章正文内容,下面案例可供参考 一.ros publisher C++ ...
- ROS学习-3 (C++编程实现创建发布者+发布数据控制海龟运动)
古月居21讲第10个视频 此处是创建的发布者, 下图中的topic 和/turtle1/cmd_vel 是ROS 自带的 发布者要往这个话题中发布数据. #include <ros/ros.h& ...
最新文章
- Android 个人学习笔记- 导入android项目,无法自动生成R文件的解决方法
- 代码:android崩溃日志收集和处理
- Career Essentials Postgraduate Study: exploring your options 读完本科后干啥?
- 无法识别的属性“targetframework”。请注意属性名称区分大小写。_神奇!你思考过计算机是怎么识别玻璃和透明物体的吗?...
- C语言不调用库函数画一个三角形
- 建行计算机招聘考试考什么,银行招聘考试考什么
- as 插件GsonFormat用法(json字符串快速生成javabean)
- Boostrap Table学习笔记
- 几个比较好的app开发框架
- 小米手机下载二维码APP
- android源码分析辅助工具
- Ubuntu安装过程之磁盘分区图文教程
- Qnap威联通NAS数据丢失恢复方法
- labview中DAQ采集多个数据通道(温度传感器)(TTL信号的曲轴位置传感器)总结
- Homebrew进阶使用教程(二)-用一个命令行天气客户端构建自己的仓库
- 解决 `Failed to connect to github.com port 443: Connection refused`
- HDR视频色调映射算法(之二:Adaptive temporal TMO)
- C++Primer阅读笔记
- 【c++】如何获取int类型最大值以及float类型最大值
- 商业贷款和公积金贷款差多少?一组数据告诉你!
热门文章
- 【游戏开发实战】使用Unity制作水果消消乐游戏教程(一):生成冰块阵列
- 手游服务器开发技术详解
- 龙之谷手游服务器修改,龙之谷手游互通区一览 5月12日部分服务器数据互通公告...
- Orientation模块管理设备的方向信息,包括alpha、beta、gamma三个方向信息,通过plus.orientation可获取设备方向管理对象
- calibre的使用技巧
- 音视频5.1——MediaCodec 同步方式完成AAC硬解成PCM
- 一起学爬虫(Python) — 22 自动化详解
- matlab 逐日 变逐月,一个逐日系统程序 用SWITCH咋也跳不出循环 求大神指教
- SCAU程序设计在线实训平台_实验_高级语言程序设计_教材习题_第七章
- Received status code 409 from server: Conflict