ROS入门与实践--3(工作空间和功能包的创建及HelloWorld简单实现)

这篇具有很好参考价值的文章主要介绍了ROS入门与实践--3(工作空间和功能包的创建及HelloWorld简单实现)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1 工作空间和功能包

通过上节的学习,我们在ROS文件系统的结构图中了解到了工作空间和功能包,下面我们将详细介绍工作空间的定义,工作空间及功能包的创建流程

1.1 工作空间定义

简单来说,工作空间就是用来存放开发者的工程开发相关文件的一个文件夹。官方文档给出了两种编译系统,即Catkinrosbuild,在Hydro版本后,很少使用rosbuild系统来进行功能包的创建和编译了,感兴趣的同学可以通过文章末尾的官网链接进行了解,这里不做赘述。
一个基本的Catkin编译系统创建的工作空间结构如下所示:

workspace_folder/        -- WORKSPACE
  src/                   -- SOURCE SPACE -- 开发过程中最常用文件夹,用来储存所有ROS功能包的源码文件
    CMakeLists.txt       -- 'Toplevel' CMake file, provided by catkin
    package_1/
      CMakeLists.txt     -- CMakeLists.txt file for package_1
      package.xml        -- Package manifest for package_1
    ...
    package_n/
      CMakeLists.txt     -- CMakeLists.txt file for package_n
      package.xml        -- Package manifest for package_n
  build/                   -- BUILD SPACE -- 用来储存工作空间编译过程中产生的缓存信息和中间文件
  devel/                   -- DEVELOPMENT SPACE -- 用来放置编译生成的可执行文件

一个基本的Catkin编译系统创建的工作空间实际界面如下图所示:
ros创建功能包,ROS入门学习,机器人,自动驾驶,github
工作空间中还有一个不常用的“install:安装空间(INSTALL SPACE),不过这个空间不是很常用,基本看不到,这里不做赘述。

1.2 工作空间的创建

在终端输入下面的命令并按下回车键,我们将创建并编译一个catkin工作空间:

mkdir -p ~/catkin_ws/src	创建一个子目录src,上一级目录是工作空间名称'catkin_ws'
cd ~/catkin_ws/				进入创建的工作空间目录
catkin_make					对创建的工作空间进行编译

下面我们进行实操演示:
ros创建功能包,ROS入门学习,机器人,自动驾驶,github
工作空间编译完成界面:
ros创建功能包,ROS入门学习,机器人,自动驾驶,github
通过鼠标进入主目录,可以看到我们创建的工作空间,双击打开工作空间,可以看到build、devel、src三个文件夹,工作空间即为创建并编译成功。
ros创建功能包,ROS入门学习,机器人,自动驾驶,github
工作空间编译完成后,在devel子目录下创建了一个与你通常在/opt/ros/$ROSDISTRO_NAME下看到的目录结构类似的结构。
要将这个工作空间添加到ROS环境中,你需要source一下生成的配置文件,通常有两种方式可以进行source操作。
方式一:打开一个新的终端,在终端下输入:echo "source ~/你要source的工作空间名字/devel/setup.bash" >> ~/.bashrc
方式一:在主目录下,按快捷键Ctrl+H显示出隐藏的文件夹,找到.bashrc 文件,通过gedit编辑器打开,在文档末尾加入:source ~/你要source的工作空间名字/devel/setup.bash,保存退出即可。
下面进行实操演示:
ros创建功能包,ROS入门学习,机器人,自动驾驶,github
ros创建功能包,ROS入门学习,机器人,自动驾驶,github

1.3 功能包的创建

通过如下命令可以在你创建的catkin工作空间中创建一个新的功能包:

cd ~/catkin_ws/src								重新打开终端,可以使用此命令进入src目录
cd src											已经位于工作空间目录,可以使用此命令进入src目录
catkin_create_pkg test01 std_msgs rospy roscpp	创建一个名为test01的新功能包,这个功能包依赖于std_msgs、roscpp和rospy

功能包依赖roscpp表示可以使用C++实现功能的库、rospy表示可以使用Python实现功能的库、std_msgs则是标准消息库,在创建一个新的功能包时,功能的实现一般都依赖这三个库实现。
下面进行实操演示:
ros创建功能包,ROS入门学习,机器人,自动驾驶,github
通过cd指令进入我们创建的功能包,通过ls指令查看功能包下的文件及文件夹,上图即为正常的功能包结构。

2 通过指令及编辑器实现HelloWorld

在ROS中,工程开发使用的编程语言主要为C++和Python,所以在后续的教程中,我将会针对每部分的内容同时通过这两种语言来进行演示,同时大家根据自己的基础来选择适合自己的学习方案。
虽然编程语言有所不同,但功能实现的流程基本相似,分为以下几步:

  1. 首先创建一个新的工作空间;
  2. 然后创建一个新的功能包;
  3. 编辑程序源文件;
  4. 编辑配置文件;
  5. 编译工作空间并执行程序。

下面我们将围绕这个步骤来进行初步的学习。

2.1 HelloWorld实现(C++版本)

2.1.1 功能包下新建并编辑cpp源文件

根据之前学习过的知识,src目录下存放的是功能包的源码文件,所以我们需要在src目录下功能包的src目录下新建我们的源码程序。新建一个源文件的方法有两种:
方式一:在src目录下鼠标右键新建一个文档,将文件名字修改为helloworld.cpp
注:如果右键没有新建文档选项,可以找到主目录下的模板文件夹,右键在终端中打开,输入sudo gedit命令,输入密码,这时会弹出一个空白文档,保存即可,这时候再右键即可看到新建文档选项。
ros创建功能包,ROS入门学习,机器人,自动驾驶,github
空白文档弹出
ros创建功能包,ROS入门学习,机器人,自动驾驶,github
右键新建文档出现
ros创建功能包,ROS入门学习,机器人,自动驾驶,github

方式二:通过touch指令在src目录下新建源文件
ros创建功能包,ROS入门学习,机器人,自动驾驶,github
新建完成的源文件,我们可以通过gedit指令在终端打开并编辑,也可以直接在目录下双击打开编辑
ros创建功能包,ROS入门学习,机器人,自动驾驶,github

在文档中输入以下代码,然后保存退出

#include "ros/ros.h"

int main(int argc, char *argv[])
{
    //初始化 ROS 节点
    ros::init(argc,argv,"hello");
    //创建节点句柄
    ros::NodeHandle n;
    //控制台输出 hello world!
    ROS_INFO("hello world cpp!");

    return 0;
}

2.1.2 配置CMakeLists.txt文件

源文件代码已经完成,接下来我们进行文件配置,进入test01功能包目录,找到CMakeLists.txt文件,双击打开
ros创建功能包,ROS入门学习,机器人,自动驾驶,github
找到下面的两部分内容,第一部分从133行开始,第二部分从148行开始,将两部分的配置内容取消注释,添加上与源文件相关的内容,文中我们将相关内容修改成了和我们新建的cpp源文件的名称一致的内容。然后保存退出。

## Declare a C++ executable	声明一个C++可执行文件
## With catkin_make all packages are built within a single CMake context
## The recommended prefix ensures that target names across packages don't collide
# add_executable(${PROJECT_NAME}_node src/test01_node.cpp)
add_executable(cpp源文件的名称 src/cpp源文件的名称.cpp)
add_executable(helloworld src/helloworld.cpp)
=========================================================================================
## Specify libraries to link a library or executable target against	指定库来链接库或可执行目标
# target_link_libraries(${PROJECT_NAME}_node
#   ${catkin_LIBRARIES}
# )
 target_link_libraries(cpp源文件的名称
   ${catkin_LIBRARIES}
 )
 target_link_libraries(helloworld
   ${catkin_LIBRARIES}
 )

2.1.3 catkin_make重新编译工作空间

接下来新打开一个终端,通过 cd catkin_ws命令进入工作空间目录下,输入catkin_make命令重新编译工作空间
ros创建功能包,ROS入门学习,机器人,自动驾驶,github
上图即为编译成功的界面。

2.1.4 rosrun执行程序

当工作空间重新编译成功后,我们就可以来执行这个程序。
1.重新打开一个命令行,输入roscore启动ROS核心
2.再打开一个命令行,通过下列指令来执行程序

cd 工作空间名字
source ./devel/setup.bash	若之前在.bashrc文件中设置过可以免去这步,后续在新的工作空间下运行需要执行这步
rosrun 功能包包名 cpp源文件名字

ros创建功能包,ROS入门学习,机器人,自动驾驶,github

由上图我们可以看出,命令行成功输出hello world cpp!内容,说明我们的程序运行成功。

2.2 HelloWorld实现(Python版本)

Python版本中实现helloworld输出到终端的步骤和C++版本基本类似,不同之处在于需要先新建一个scripts目录来存放Python文件,并为Python文件添加执行权限,程序才能正常被编译运行,下面我们来详细介绍操作流程。

2.2.1 Python文件的编写及配置

1.创建scripts目录
通过下面的指令我们在功能包的src目录下新建一个scripts目录来存放Python文件。

cd catkin_ws/src/test01/
mkdir scripts
ls

ros创建功能包,ROS入门学习,机器人,自动驾驶,github

2.创建Python文件并编辑
创建python文件方式同创建cpp源文件方式相同,这里我通过指令创建
ros创建功能包,ROS入门学习,机器人,自动驾驶,github
通过下面的指令打开python文件并写入代码

gedit helloworld.py
#! /usr/bin/env python	#Python 解释器路径

import rospy

if __name__ == "__main__":
    rospy.init_node("Hello")
    rospy.loginfo("Hello World Python!")

3.为python文件添加可执行权限
通过下列指令可以为python文件添加可执行权限

cd scripts		进入到scripts目录下
chmod +X *.py	添加可执行权限
ll				查看可执行权限文件目录

下图即为执行权限添加成功
ros创建功能包,ROS入门学习,机器人,自动驾驶,github

2.2.2 配置CMakeLists.txt文件

Python文件能否执行同样需要配置CMakeLists.txt文件,他和cpp配置的CMakeLists.txt文件为同一个文件,打开CMakeLists.txt文件,找到168行,把my_python_script修改为python文件名,效果同下,然后保存退出。

## Mark executable scripts (Python etc.) for installation
## in contrast to setup.py, you can choose the destination
# catkin_install_python(PROGRAMS
#   scripts/my_python_script
#   DESTINATION ${CATKIN_PACKAGE_BIN_DESTINATION}
# )
 catkin_install_python(PROGRAMS
   scripts/python文件名.py
   DESTINATION ${CATKIN_PACKAGE_BIN_DESTINATION}
 )
 catkin_install_python(PROGRAMS
   scripts/helloworld.py
   DESTINATION ${CATKIN_PACKAGE_BIN_DESTINATION}
 )

2.2.3 catkin_make重新编译工作空间

终端下输入 cd catkin_ws命令进入工作空间目录下,输入catkin_make命令重新编译工作空间
ros创建功能包,ROS入门学习,机器人,自动驾驶,github
上图即为编译成功的界面。

2.2.4 rosrun执行程序

由于在上一节运行cpp程序时,我们已经启动了roscore,所以我们在这里直接执行python文件
打开一个命令行,通过下列指令来执行程序

cd 工作空间名字
source ./devel/setup.bash	若之前在.bashrc文件中设置过可以免去这步,后续在新的工作空间下运行需要执行这步
rosrun 功能包包名 python源文件名.py

ros创建功能包,ROS入门学习,机器人,自动驾驶,github
由上图我们可以看出,命令行成功输出hello world Python!内容,说明我们的程序运行成功。


至此,机器人操作系统(ROS)入门与实践–3的内容全部更新完,下一节我们将进行ROS开发环境搭建及程序运行的教学,同时会安装一些小工具辅助我们后续的工程开发,希望大家支持,本人是自学ROS的研究生小白,主要是根据赵虚左老师的课程、官方的文档以及按照自己的实际操作来写的教程,其中部分内容借鉴了赵虚左老师的方法,在这里给出教程的网址,希望大家一起学习,谢谢大家!!!

参考资料:
http://www.autolabor.com.cn/book/ROSTutorials/
http://wiki.ros.org/ROS/Concepts
http://wiki.ros.org/cn/catkin/Tutorials/create_a_workspace
http://wiki.ros.org/cn/catkin/Tutorials
文章来源地址https://www.toymoban.com/news/detail-753261.html

到了这里,关于ROS入门与实践--3(工作空间和功能包的创建及HelloWorld简单实现)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 第 4 课 创建工作空间与功能包

      消息和服务的创建、发布器和订阅器的编写、服务端和客户端的编写都是基于Ros功能包进行操作的,因此在进行上述操作前,需要先创建工作空间及功能包。 打开命令行终端。 输入指令“mkdir -p ~/catkin_ws/src”,并按下回车,在指定目录下创建一个名为catkin_ws的工作空间

    2024年02月02日
    浏览(41)
  • ROS2 工作空间 包

    source /opt/ros/humble/setup.bash colcon  sudo apt install python3-colcon-common-extensions 创建工作空间  mkdir -p ~/ros2_ws/src 编译 ros2_ws目录下 colcon build 创建包 ros2 pkg create --build-type ament_python --node-name my_node  test_kiki 编译失败 解决 参考 ROS2 delete package_ros删除package-CSDN博客 SetuptoolsDeprecationWarnin

    2024年02月05日
    浏览(44)
  • 关于ros工作空间devel下setup.bash的理解

    在创建了ros的工作空间之后 在工作空间的devel文件夹中存在几个 setup.*sh 形式的环境变量设置脚本 使用 source 命令运行这些脚本文件,则工作空间的环境变量设置可以生效(如可以找到该工作空间内的项目)。 source devel/setup.bash  设置环境变量是为了(source devel/setup.bash)系统能

    2024年02月11日
    浏览(37)
  • Postman创建及删除workspace工作空间

    打开Postman 点击 Workspaces → Create Workspaces 如图所示操作 工作空间创建完成 点击 Workspaces → 选择要删除的工作空间 点击 Workspaces Settings 点击 Delete Workspaces 点击 Delete Workspaces 删除成功

    2024年01月19日
    浏览(39)
  • ROS新建工作区(workspace)与包(package)编译的实践(C++示例)

    ROS工作区是用来存放ROS工作包的目录,这些工作包,包含了ROS程序的各种文件,包括源代码、配置文件、消息文件等。所以工作区的本质是一个文件夹,用来存放接下来将要介绍的包以及构建这些包所需的文件。ROS工作区可以新建很多,它们之间都是相互独立的,在各自的工

    2024年02月10日
    浏览(37)
  • 【ROS2指南-11】创建ROS2功能包

    目标: 使用 CMake 或 Python 创建一个新包,并运行其可执行文件。 教程级别: 初学者 时间: 15分钟 内容 背景 1 什么是 ROS 2 包? 2 什么构成了 ROS 2 包? 3 工作区中的包 先决条件 任务 1 创建一个包 2 构建一个包 3 获取安装文件 4 使用包 5 检查包装内容 6 自定义 package.xml 概括

    2024年02月04日
    浏览(41)
  • 创建双臂协同机器人Baxter工作站(ROS-noetic)

    进入终端依次执行以下命令 : 创建工作空间 编译 把工作空间地址加入环境变量 或者添加到~/.bashrc文件,下次打开终端就不用执行手动执行这条命令了 下载Baxter的SDK软件包 BaxterSDK软件包连接 选择Baxter的noetic版本下载,然后解压复制到工作空间的src下(~/ros_ws/src) 使用rosde

    2024年02月02日
    浏览(49)
  • ROS2入门与实践--1(ROS2的安装与环境测试)

    对于VMware虚拟机的安装教程请看这篇文章:VMware虚拟机安装 对于20.04版本的Ubuntu操作系统安装教程请看这篇文章:Ubuntu-20.04系统安装 对于22.04版本的Ubuntu操作系统安装教程请看这篇文章:Ubuntu-22.04系统安装 1.在ROS2官方的文档中,安装ROS2之前需要首先检查操作系统语言环境 官

    2024年02月15日
    浏览(47)
  • ROS EKF 机器人位姿估计功能包:robot_pose_ekf | 仿真环境实践

    仿真环境为 一个无人机,具备3D POSE里程计数据,和imu数据。 将 robot_pose_ekf.launch 文件进行如下更改 即关掉2D轮速里程计 打开imu和vo里程计 并将话题重映射 vo重映射为/firefly/odometry_sensor1/odometry imu_data重映射为/firefly/imu 启动 robot_pose_ekf 节点 出现如下报错 [ERROR] [1686016442.63011

    2024年02月09日
    浏览(39)
  • “深入探究SpringMVC的工作原理与入门实践“

    SpringMVC是一个流行的Java Web开发框架,它提供了一种优雅的方式来构建灵活、可扩展的Web应用程序。本文将介绍SpringMVC的基本概念,深入探讨其工作流程和核心组件,并提供一个入门程序来帮助读者快速上手。 SpringMVC是基于Java的MVC(Model-View-Controller)设计模式的Web框架。它通

    2024年02月10日
    浏览(40)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包