最近刚刚开始学习ROS,对于整个ROS的框架和功能正在一点点的了解,跟着B站古月居的《ROS入门21讲》课程,在安装好linux和ROS后,正式开始ROS的学习,动手实践敲代码,在这里先记录一下开始ROS项目的第一步,同时我安装的ROS版本为Noetic。
此次功能的实现是在ROS经典教程小乌龟运动上进行的。

创建工作空间和功能包

工作空间(worksspace)是一个存放工程开发相关文件的文件夹,咱们创建主文件夹catkin_ws,其中创建以下四个子文件夹:

  • src:代码空间(Source Space)
  • build:编译空间(Build Space)
  • devel:开发空间(Develpment Space)
  • install:安装空间(Install Space)

下面为实际操作:

1.创建工作空间

先在主目录里面创建catkin_ws文件夹,在主目录中打开终端。

$  mkdir catkin_ws

也可以是别的目录,后面要设置一个环境变量,会用到已创建的工作空间里面的一个文件,如果不用主目录,在写文件路径的时候会比较麻烦。同时这个文件夹的文件不一定必须要命名为catkin_ws。但是上面所说的工作空间里面的四个文件夹,文件命名不能修改!

进入catkin_ws文件,创建src文件夹,这个文件夹是咱们一开始创建的,跟普通文件夹性质一样。

$  cd catkin_ws
$  mkdir src

进入src文件夹。

$  cd src

把当前的文件夹初始化,把他从一个普通的文件夹变成ROS的一个工作空间。

$  catkin_init_workspace

退回到catkin_ws文件夹。

$  cd ..

下面是编译命令;这个是catkin工具提供的编译器的指令,编译src功能包里面的源码,然后结果放到devel和build文件夹里面。

$  catkin_make

创建install文件夹,这个文件不会在工作空间初始化后自己生成,需要自己编译创建。

$  catkin_make install

目前在catkin_ws里面有四个文件夹,各自的功能如下:

  • src::放置功能包的源码,后面Publisher发布的话题内容文件夹就放置在这个文件夹里面。
  • install:放置最终编译生成的可执行文件,这个文件可没有。
  • devel:开发空间,用于存放编译生成的目标文件,包括头文件、动态&静态链接库、可执行文件,作用和install类似。
  • build:编译空间,放置编译的中间文件,二进制文件,存放CMake和catkin的缓存信息、配置信息和其他中间文件。

2.创建功能包

进入src文件夹。

$  cd ~/catkin_ws/src

创建功能包,名字为learning_topic,后面五个是依赖的五个工具包,可以用C++或者Python语言来写话题内容。

$  catkin_create_pkg learning_topic roscpp rospy std_msgs geometry_msgs turtlesim

3.创建发布者代码

然后在catkin_ws/src/learning_topic/src里面创建velocity_publisher.cpp文件,可以使用下面的命令:

$  touch velocity_publisher.cpp

然后使用vim命令,打开这个文件夹。

$  vim  velocity_publisher.cpp

把下面的代码复制粘贴上去,如果复制粘贴不上去,请看一下回头看一下linux命令,文件管理和编辑。或者直接右键:用文本编辑器打开。
下面的代码这次就不详细讲解了,只说一下大致的功能。大部分都有注释,代码在《古月ROS21讲》视频配套的文件里有,去古月居公众号找一下。另外这是C++语言的,因为在创建功能包的时候,咱们不光加入了C++的依赖也加入了Python的依赖,所以也可以使用Python编写,Python编写的整体风格要比C++简约的多。
在下面的代码中,实现了几个效果:

  • 初始化ROS节点;
  • 向ROS Master 注册节点信息,包括发布的话题名和话题中的消息类型;
  • 创建消息数据;
  • 按照一定频率循环发布消息。
/*** 该例程将发布turtle1/cmd_vel话题,消息类型geometry_msgs::Twist*/#include <ros/ros.h>
#include <geometry_msgs/Twist.h>int main(int argc, char **argv)
{// ROS节点初始化ros::init(argc, argv, "velocity_publisher");// 创建节点句柄ros::NodeHandle n;// 创建一个Publisher,发布名为/turtle1/cmd_vel的topic,消息类型为geometry_msgs::Twist,队列长度10ros::Publisher turtle_vel_pub = n.advertise<geometry_msgs::Twist>("/turtle1/cmd_vel", 10);// 设置循环的频率ros::Rate loop_rate(10);int count = 0;while (ros::ok()){// 初始化geometry_msgs::Twist类型的消息geometry_msgs::Twist vel_msg;vel_msg.linear.x = 0.5;vel_msg.angular.z = 0.2;// 发布消息turtle_vel_pub.publish(vel_msg);ROS_INFO("Publsh turtle velocity command[%0.2f m/s, %0.2f rad/s]", vel_msg.linear.x, vel_msg.angular.z);// 按照循环频率延时loop_rate.sleep();}return 0;
}

4.配置发布者代码编译规则

在catkin_ws/src/learning_topic/CMakeLists.txt中加入以下代码,位置是在CMakeLists.txt中的install标题上面。

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

add_executable这个函数是把velocity_publisher.cpp文件编译成可执行文件velocity_publisher。
target_link_libraries函数把上面生成的可执行文件velocity_publisher和ROS相关的库作链接,像是C++、Python库

5.编译并运行发布者

咱们再回到catkin_ws文件夹:

$  cd ~/catkin_ws

进行编译:

$  catkin_make

随后需要设置环境变量:

$  source devel/setup.bash

如果不想每次执行这个文件,配置环境变量 ,在主目录下按快捷键Ctrl+H,显示出隐藏的文件,在.bashrc文件里面的最后加上

echo "source /home/yzxie/catkin_ws/devel/setup.bash">> ~/.bashrc或者source /home/yzxie/catkin_ws/devel/setup.bash

这里注意第二行代码中,/home意思是在主目录里面,如果你一开始catkin_ws文件不是创建在主目录下,这里就要盖面路径,/yzxie/是你linux系统的用户名。

随后重新打开终端,输入一下命令;

$  roscore

不要关闭,Ctri+Atl+T再重新打开一个终端,输入以下命令:

$  rosrun turtlesim turtlesim_node

运行之后就会看到小乌龟的界面,小海龟的皮肤每次都是随机,每次都像开盲盒。然后Ctri+Atl+T再重新打开一个终端,输入以下命令:

$  rosrun learning_topic velocity_publisher


然后小乌龟就按照咱们C++程序中设定的,以一定的角速度旋转,咱们的整个功能也就实现了。

ROS中工作空间和功能包的创建以及发布者Publisher的实现相关推荐

  1. 【机器人操作系统】ROS工作空间及功能包的创建

    ROS工作空间及功能包的创建 摘要: 总结ROS工作空间及功能包的创建的具体步骤及命令: 工作空间/功能包的创建的步骤大同小异: step1.创建工作空间/功能包: step2.编译工作空间/功能包: ...

  2. 手把手教会:ROS——机器人操作系统工作空间和功能包的创建02(笔记02)

    在上一篇文章中,我已经把ROS的工作空间的创建步骤进行了介绍.接下来,我们就来看一下ROS的功能包是如何创建的. 一.功能包的组成 对于功能包我们可以理解为是一个存放在ROS工作空间中的"s ...

  3. ROS系统 创建工作空间与功能包

    ROS 学习目标: 学习内容: 使用环境 操作步骤: 基本命令 二.使用步骤 创建工作空间 编译工作空间 创建功能包 使用C++执行程序 编写源文件 编辑功能包下的 Cmakelist.txt文件 修 ...

  4. (三)工作空间与功能包、Publisher、Subscriber

    目录 一.创建工作空间与功能包 1.工作空间 2.创建功能包 3.编译新的功能包 4. 环境变量 5.功能包中的两个重要文件 二.发布者Publisher的编程实现 (一)C++版本 (二)Pytho ...

  5. ROS入门-7.创建工作空间与功能包

    一.工作空间 概述:是一个存放工程开发相关文件的文件夹 包括四个主要文件夹 src(代码空间):用来放置功能包,功能包的代码,配置文件,launch文件等 build(编译空间):放置编译过程当中产生 ...

  6. ROS(四)——创建工作空间与功能包 Catkin编译系统

    catkin编译系统 ROS 的 Catkin 编译系统的一个特点是将程序做成 package (称为 catkin package 或者 ROS package) 的形式,可以理解成模块化. 典型的 ...

  7. ROS学习笔记(一):创建工作空间和功能包

    所有的ROS程序,包括我们自己开发的程序,都被组织成功能包,而ROS的功能包被存放在称之为工作空间的目录下.因此,在我们写程序之前,第一步是创建一个工作空间以容纳我们的功能包.其实ROS工作空间就是l ...

  8. ROS机器人操作系统——创建工作空间与功能包(四)

    ROS机器人操作系统 文章目录 ROS机器人操作系统 前言 一.工作空间 1.创建工作空间 2.编译工作空间 3.设置环境变量 4.检查环境变量 二.功能包 1.创建功能包 2.编译功能包 总结 前言 ...

  9. ROS Noetic入门笔记(二)ROS Noetic创建工作空间和功能包

    ROS Noetic入门笔记(一)在ubuntu20.04中安装ROS Noetic并简单测试 ROS Noetic入门笔记(二)ROS Noetic创建工作空间和功能包 ROS Noetic入门笔记 ...

最新文章

  1. 迁移学习:如何使用TensorFlow对图像进行分类
  2. 中国移动发布基于开源技术的大云系统
  3. ASP.NET 2.0 的 Event Validation
  4. Burp Suite入门笔记
  5. graphcut 用于最优缝合先寻找_Image Stitching
  6. 收藏的2个正则html标签剔除方法
  7. html2Escape js 转义
  8. 《Sibelius 脚本程序设计》连载(四十二) - 4.12 Selection
  9. 【转】牛人杰作 管饭哥登场
  10. 【前端干货】CSS 的空格处理
  11. 过程 sp_addlinkedsrvlogin,第 91 行解密过程中出错的解决办法
  12. 用这个玩吃鸡:宏按键加一键恢复加自由移动视角,你想要的功能它都有
  13. 大哉昆仑的 双英雄的无敌bug存档
  14. 计算机第三课细心小编辑教案,教案-第6课小小编辑师
  15. php收付同分账,php微信分账功能 —— app支付
  16. jQuery高亮显示
  17. php redis 唯一id,PHP + Redis 实现一个简单的twitter
  18. 洛谷 P2790 ccj与zrz之积木问题
  19. 小觅双目相机如何使用_小觅双目摄像头标准版(S版)常见问题
  20. springbbot运行无法编译成功,找不到jar包报错:Error:(3, 46) java: 程序包org.springframework.context.annotation不存在

热门文章

  1. 图像和base64的转换 uniapp开发
  2. 【实例】用PHP制作一个简单的日历
  3. 高中数学;三角函数图像平移变换最难题型解题技巧(全新思维)
  4. stm32实现波形发生器
  5. 服务器 ssd虚拟内存,有一说一:虚拟内存对比固态硬盘
  6. 2920集五福_2019支付宝集五福字新玩法,高概率出敬业福攻略。
  7. 前端技术之:使用npx创建一个Nuxt.js项目
  8. 致力于量子计算商业化,量旋科技欲在超导量子领域取得突破
  9. Facebook广告投放:什么是Cloak,Cloak的原理以及主流Cloak程序介绍
  10. PNAS:控制缺乏情感的肢体语言的大脑回路