ROS放弃指南3:ROS创建功能包以及 hello world

参考链接:中国大学MOOC中的机器人操作系统入门 https://www.icourse163.org/course/ISCAS-1002580008
古月居博客 www.guyuehome.com/
陈瓜瓜_ARPG的简书:https://www.jianshu.com/u/143c9c8061ec
运行环境:Ubuntu18.04+ROS melodic

创建一个功能包

我们在ROS放弃指南2里面讲过,如何创建一个ROS工作空间,如果你不记得了,没关系,接下来跟着我一起动手就行了。

mkdir -p ros_test1/src
cd ros_test1
catkin_make
source devel/setup.bash

好了,你敲完这三行代码,就已经完成了准备工作。也完成了我们上节课所讲的大部分内容。
现在想一想,我应该是一个话痨晚期了,就这四行代码,我竟然在第二节里讲了这么久。
在这里插入图片描述
刚刚所讲的这么多,都是我们上一节所说的,ROS创建工作空间,不知道大家还记得这一张图片不
在这里插入图片描述这张图,就是ROS中的整个工程系统的结构,我们刚刚所构建的,就是一个catkin_workspace,而且我们新建文件夹的时候,也建立了 src 文件夹,通过catkin_make命令,我们又生成了 build 和 devel 文件夹,接下来,我们就要新建一个 package 了。
在ROS中,package是catkin的编译的基本单位,是ROS软件的基本组织形式。一个package中包含多个可执行文件,最精简的结构要包含:CMakelist.txt和package.xml文件。也可以放自定义通信格式:消息(msg),服务(srv),动作(action)。
CMakelist.txt:规定catkin的编译规则。例如:源文件,依赖项,目标文件。
pack.xml 定义pack的属性:包含,版本号,作者,依赖等
代码文件:python,c++,shell。通常在package下新建:scripts文件夹(放*.py,.sh),include(.h),src(.cpp),srv(,srv)。launch以及配置文件 launch文件,config(配置文件,*.yaml)
讲了这么多,我们来动手操作一下,首先所以下ROS创建功能包的命令

catkin——create_pkg   <pkg_name>   [depend1][depend2][depend3]

其中 <pkg_name> 代笔的是功能包的姓名,可以根据自己的需求来命名,但是要注意的是:ROS的同一工作空间下,不允许存在同名功能包,不同工作空间下,允许存在同名功能包。
而 [depend1] 代表的则是这个功能包需要的依赖项,我们可以在开始指ROS需要包含的软件包,当然也可以事后添加。
但是!但是!但是!
ROS虽然支持C++编程,ROS里面的数据类型可和C++的不太一样,虽然有很多数据类型用法相似,但是支持的头文件等等就不一样了。像常用的Iint flaot,bool等,都在std_msgs这个标准消息头文件里面。而且ROS并不是默认就能使用python和c++的,所以你需要添加roscpp表示你需要ROS能识别使用并编译c++文件。
在这里插入图片描述
这个老四步是我刚刚提过的那老四步,现在想一想,我还真是话痨,提过的事情,还要再提一遍。接下来,我们就要进入我们创建好的 src 文件了,在 src 文件里面执行创建功能包的命令,
在这里插入图片描述接着 我们在 src 文件夹中使用 tree 命令
在这里插入图片描述发现,我们的 src 文件夹里多了一个名叫 ros_hello 的文件夹,这个文件夹里的CMakeList.txt和package.xml就是我们刚刚说过的那两个文件。大家有没有发现,ros_hello又多了一个 src 而这个 src 就是我们最后写代码的地方。
接下来,我们进入ros_hello 下面的 src ,选择新建一个新文件 ros_hello.cpp,然后使用notepadqq打开ros_helle.cpp。当然,你也可以使用 gedit或vim 打开ros_hello.cpp
在这里插入图片描述

ROS中的 hello world

在这里插入图片描述

这个,就是我刚刚写的ROS中的 hello world 的代码,代码很简单。
<ros/ros.h> 是ROS的头文件,既然我们是要写ROS的代码,这个就是必不可少的。
ros::init(argc,argv,“talker”) 这是初始化节点的命令,其中,“talker”代表ROS的节点名,这个节点名也可以自己起。 当我们执行 一个ROS程序的时候,这个程序会被加载到内存当中,成为了一个进程。在ROS中叫做节点
ROS_INFO(“hello world”) 这个功能就和C语言里面的 printf 很像,用来执行打印的工作。
在平常的写代码过程中,我们只要写好代码编译一下就可以运行了,但是ROS中却和这个大不一样。 我们还需要去修改 package中的 CMakeList.txt 和 package.xml 文件,以实现链接库和配置依赖的功能。
接下来 我们就打开我们的 CMakeList.txt 文件,加上下面两句。
在这里插入图片描述

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

然后,我们在返回我们的工作空间,执行 catkin_make命令。在这里插入图片描述
当出现绿色的100%之后,就代表这,你已经完成了所有的前期准备工作。离大功告成,只差一步。看来,要想生活过得去,还是需要绿色啊。
在这里插入图片描述
然后,我们在终端输入 roscore 命令,接着开一个新终端,执行
在这里插入图片描述
当当当,成功打印。
注意
在修改CMakeLists文件时,需要把下面两行文件加在最后面,如果加在前面的位置,就会出现代码整体可以catkin_make成功,但是rosrun ros_hello 的时候,找不到功能包后面的执行文件。

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

生成install文件

catkin_make install , 产生install安装空间。

  • 0
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
ROS Melodic中,创建工作空间和编译功能的具体步骤如下: 1. 创建工作空间(workspace):在ROS中,工作空间是一个文件夹,用于存放ROS功能(packages)。可以使用以下命令创建一个名为“catkin_ws”的工作空间: ``` mkdir -p ~/catkin_ws/src cd ~/catkin_ws/ catkin_make ``` 其中,“~/catkin_ws/src”是存放ROS功能的文件夹,“catkin_make”是编译ROS功能的命令,它会在工作空间中创建一个“build”文件夹和一个“devel”文件夹。 2. 创建ROS功能(packages):在工作空间的“src”文件夹中,可以使用以下命令创建一个名为“my_package”的ROS功能: ``` cd ~/catkin_ws/src catkin_create_pkg my_package rospy std_msgs ``` 其中,“my_package”是功能的名称,“rospy”和“std_msgs”是该功能所依赖的ROS软件。 3. 编写ROS节点(nodes):在功能创建一个python文件,并编写ROS节点的代码。例如,可以在“my_package/src”文件夹中创建一个名为“my_node.py”的python文件,并编写如下代码: ```python #!/usr/bin/env python import rospy from std_msgs.msg import String def my_node(): rospy.init_node('my_node') pub = rospy.Publisher('my_topic', String, queue_size=10) rate = rospy.Rate(10) # 10hz while not rospy.is_shutdown(): hello_str = "hello world %s" % rospy.get_time() rospy.loginfo(hello_str) pub.publish(hello_str) rate.sleep() if __name__ == '__main__': try: my_node() except rospy.ROSInterruptException: pass ``` 该节点会发布一个名为“my_topic”的话题,每秒钟发布10条消息。 4. 编译ROS功能:使用以下命令编译ROS功能: ``` cd ~/catkin_ws/ catkin_make ``` 该命令会在“build”文件夹中生成一个“my_package”文件夹,其中含编译后的ROS节点。 5. 运行ROS节点:使用以下命令运行ROS节点: ``` rosrun my_package my_node.py ``` 该命令会启动ROS节点,并开始发布消息到“my_topic”话题。可以使用以下命令查看消息: ``` rostopic echo my_topic ``` 以上就是在ROS Melodic中创建工作空间和编译ROS功能的基本步骤。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值