ros学习--第3篇:ros基础---创建工作空间和软件包

loongembedded loongembedded     2023-03-09     162

关键词:

1.创建工作空间 catkin_ws

创建src文件,放置功能包源码:

mkdir -p ~/catkin_ws/src
进入src文件夹:

cd ~/catkin_ws/src
初始化文件夹:

catkin_init_workspace
这样就在src文件中创建了一个 CMakeLists.txt 的文件,目的是告诉系统,这个是ROS的工作空间。

2.编译工作空间 catkin_make

所有编译工作都要在catkin_ws文件夹下编译:

cd ~/catkin_ws/
编译,编译完成后,会发现catkin_ws中多了两个文件 build 和 devel

catkin_make

3.设置环境变量

在第1篇中,我们介绍了设置环境变量,那个是将整个ros系统的环境变量设置到bash脚本中,现在我们需要把我们工作空间的环境变量设置到bash中。

echo “source ~/catkin_ws/devel/setup.bash” >> ~/.bashrc
让上面的配置在当前的终端生效:

source ~/.bashrc
我们用 vi 编辑器打开 ~/.bashrc 文件,就可以看到最后两行,第一行是我们第1篇添加的ros系统的环境变量,第2行是我们创建的catkin_ws工作空间的环境变量:

如果想要查看环境变量:

echo $ROS_PACKAGE_PATH
终端会输出:

/home/wdd/catkin_ws/src : /opt/ros/kinetic/share 第一个是我们刚才创建的catkin_ws的,第二个是ros系统的。

4.创建功能包

在src中创建:

cd ~/catkin_ws/src/
功能包格式:

catkin_create_pkg package_name depend1 depend2 depend2
package_name:功能表名称

depend1、2、3:依赖项

创建功能包:

catkin_create_pkg learning_communication std_msgs roscpp rospy
std_msgs:包含常见消息类型

roscpp:使用C++实现ROS各种功能

rospy:使用python实现ROS各种功能

5. catkin工作空间中的软件包

开发catkin软件包的推荐方法是使用catkin工作空间,但是你也可以单独开发catkin软件包。一个简单的工作空间如下所示:

workspace_folder/ – WORKSPACE:工作空间
src/ – SOURCE SPACE:代码空间
CMakeLists.txt – ‘Toplevel’ CMake file, provided by catkin:最顶层CMake文件,由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

6. 软件包依赖关系

6.1 一级依赖

使用catkin_create_pkg命令时提供了几个软件包作为依赖关系,现在可以使用rospack命令工具查看这些一级依赖包。

rospack depends1 beginner_tutorials
返回的结果:
std_msgs
rospy
roscpp

rospack列出了在运行catkin_create_package命令时作为参数的依赖包,这些依赖包存储在package.xml文件中。

6.2 间接依赖

在很多种情况下,一个依赖包还会有它自己的依赖关系,比如,rospy就有其他依赖包关系

kandi@ubuntu:~/catkin_ws/src/study$ rospack depends rospy
catkin
genmsg
genpy
cpp_common
rostime
roscpp_traits
roscpp_serialization
message_runtime
gencpp
geneus
gennodejs
genlisp
message_generation
rosbuild
rosconsole
std_msgs
rosgraph_msgs
xmlrpcpp
roscpp
rosgraph
ros_environment
rospack
roslib
kandi@u

7.编译功能包

cd ~/catkin_ws
catkin_make
这行这边后,工作空间构建完成,在devel子目录下创建一个与你通常在/opt/ros/$ROSDISTRO_NAME下看到的目录结构类似的结构,比如我们下载的是noetic版本,其目录结构如下:

工作空间目录说明如下:

要将这个工作空间添加到ROS环境中,你需要source 一下生成的配置文件:

$ . ~/catkin_ws/devel/setup.bash

显示如下说明编译成功:


[ 0%] Built target nav_msgs_generate_messages_eus
[ 0%] Built target nodelet_generate_messages_lisp
[ 33%] Built target slam_gmapping_nodelet
[ 44%] Linking CXX executable /home/kandi/catkin_ws/devel/lib/gmapping/slam_gmapping_replay
[ 55%] Linking CXX executable /home/kandi/catkin_ws/devel/lib/gmapping/slam_gmapping
[ 77%] Built target slam_gmapping
[100%] Built target slam_gmapping_replay

在工作空间根目录下(比如/home/kandi/catkin_ws)编译生成可执行文件slam_gmapping和slam_gmapping_replay位于/home/kandi/catkin_ws/devel/lib/gmapping/目录下。

8.执行可执行文件

命令行终端先运行roscore启动master阶段,再在另一个终端执行可执行文件。

kandi@ubuntu:~/catkin_ws$ cd /home/kandi/catkin_ws/devel/lib/gmapping/
kandi@ubuntu:~/catkin_ws/devel/lib/gmapping$ ./slam_gmapping

标准的做法:

$ rosrun [package_name] [node_name]

这里的包名package_name通过软件包文件catkin_ws\\src\\slam_gmapping\\gmapping\\package.xml

gmapping
中name知道package_name为gmapping.

节点名node_name通过

add_executable(slam_gmapping src/slam_gmapping.cpp src/main.cpp)
target_link_libraries(slam_gmapping $Boost_LIBRARIES $catkin_LIBRARIES)
if(catkin_EXPORTED_TARGETS)
add_dependencies(slam_gmapping $catkin_EXPORTED_TARGETS)
endif()

set(LOCAL_DEPENDENCIES gmapping-rtest $PROJECT_NAME_basic_localization_stage_indexed.bag
$PROJECT_NAME_test_replay_crash.bag
$PROJECT_NAME_test_turtlebot.bag
$PROJECT_NAME_test_upside_down.bag
$PROJECT_NAME_hallway_slow_2011-03-04-21-41-33.bag
$PROJECT_NAME_basic_localization_stage_groundtruth.pgm
slam_gmapping
slam_gmapping_replay
)

通过

add_executable(slam_gmapping src/slam_gmapping.cpp src/main.cpp)

add_executable()使用指定的源文件来生成目标可执行文件slam_gmapping,slam_gmapping也就是上面的节点名node_name。

catkin_create_pkg命令生成的CMakeLists.txt文件也非常重要,详见wiki的链接:
添加链接描述

ros2学习笔记11--工作空间的创建(代码片段)

概要:这篇主要介绍工作空间的创建环境:ubuntu20.04,ros2-foxy,vscode最后如果没有陈述实操过程中碰到问题的话,则表示该章节都可被本人正常复现.2.2.1创建工作空间(原文:https://docs.ros.org/en/foxy/Tutorials/Wor... 查看详情

探索之路机器人篇-ros系统并创建工作空间和项目

  在ROS官网,已经给出了详细的教程。下面我就般一下砖,把相应的操作写到这里。官方网址:http://wiki.ros.org/cn/安装ROS系统  indigo在ubuntu上的安装教程。官网:http://wiki.ros.org/cn/indigo/Installation/Ubuntu  1.添加sources.list  配... 查看详情

ros系列_学习一

  刚入门ROS,不,没入门,还在门口,这是今天的总结: (一)创建一个工作空间   1、创建一个初始工作空间:      mkdir-p~/catkin_ws/src      cd~/catkin_ws/src      catkin_init_workspace   2、尝试编译... 查看详情

ros入门文件结构篇

...。其实就是一个项目的根目录地址。例如,我们在/home里创建一个工作空间叫作workspace的。注意,ros的所有运行的程序文件都要写在叫作src的文件。 之后我们可以先尝试在terminal中进入workspace中,使用cd~/workspac 查看详情

[ros基础]---创建工作空间(代码片段)

0引言我们在windows下使用集成IDE创建工程的时候,是不需要自己手写cmake/makefile去管理工程的,但是在linux下新建c/cpp项目的时候,在创建文件夹的时候,就需要想好文件的层级结构,以及手动编写cmake/makefile管... 查看详情

ros的初步学习--创建一个工作空间和一个程序包(代码片段)

快速开始创建工作区(workspace)工作区可以作为一个独立的项目进行编译,存放ROS程序的源文件、编译文件和执行文件。建立工作区的方法如下:mkdir-p~/catkin_ws/src#创建文件夹cd~/catkin_ws/src#定位到srccatkin_init_workspace#对工作空间进... 查看详情

理解ros话题---ros学习第5篇

...rostopicecho2.4使用rostopiclist3.ROS消息3.1使用rostopictype4.继续学习rostopic4.1使用rostopicpub4.2使用rostopichz5.使用rqt_plot1.通过键盘控制turtle(1)打开一个终端运行roscore(2)再打开一个新的终端来打开turtlesim_node节点kandi@ubuntu:~$rosrunturtlesimturtl... 查看详情

理解ros服务和参数---ros学习第6篇

文章目录1.ROS服务2.使用rosservice2.1rosservicelist2.2rosservicetype2.3rosservicecall3.使用rosparam3.1rosparamlist3.2rosparamset和rosparamget3.3rosparamdump和rosparamload1.ROS服务服务时节点之间通讯的另一种方式。服务允许节点发送一个请求(request)并获得一个... 查看详情

理解ros服务和参数---ros学习第6篇

文章目录1.ROS服务2.使用rosservice2.1rosservicelist2.2rosservicetype2.3rosservicecall3.使用rosparam3.1rosparamlist3.2rosparamset和rosparamget3.3rosparamdump和rosparamload1.ROS服务服务时节点之间通讯的另一种方式。服务允许节点发送一个请求(request)并获得一个... 查看详情

第3章编写ros程序

1、创建工作区和功能包在我们写任何程序之前,第一步是创建一个容纳我们的功能包的工作区,然后再创建功能包本身。创建工作区 使用标准的mkdir命令行去创建一个目录,我们将把这个新的目录称作工作区目录。创建工作... 查看详情

linux学习opencv+ros实现人脸识别(ubantu16.04)(代码片段)

...行 2.人脸识别效果五、报错解决六、总结前言本文主要学习 ROS机器人操作系统 ,在ROS系统里调用OpenCV库 实现人脸识别任务一、环境配置   查看详情

理解ros节点---ros学习第4篇

文章目录1.图概念速览2.节点3.客户端库4.roscore5.使用rosnode6.使用rosrun1.图概念速览计算图(ComputationGraph)是一个由ROS进程组成的点对点网络,它们能够共同处理数据。ROS的基本计算图概念有节点(Nodes)、主节点(Master)、参数服务器... 查看详情

理解ros节点---ros学习第4篇

文章目录1.图概念速览2.节点3.客户端库4.roscore5.使用rosnode6.使用rosrun1.图概念速览计算图(ComputationGraph)是一个由ROS进程组成的点对点网络,它们能够共同处理数据。ROS的基本计算图概念有节点(Nodes)、主节点(Master)、参数服务器... 查看详情

创建一个ros工作空间(rosworkspace)

...ironment1.mkdir-p~/catkin_ws/src解析:在/home/你的用户名目录/下创建一个ROS工作空间,即文件夹catkin_ws,然后在工作空间catkin_ws下创建一个文件夹src你也可以将工作空间catkin_ws起成其他名字,例如: 查看详情

编写ros程序--helloros

《机器人操作系统浅析》ch3学习记录AGentleIntroductiontoROS 3.1创建工作区(工作空间)和功能包  创建工作空间~/ros我们称之为工作区目录  在工作区目录下创建一个src的子目录,用于存放功能包的源码  创建功能包在src目... 查看详情

在ros下建立编译链接pcl模块

文章目录一、Ubuntu上安装ROS二、管理ROS环境变量三、创建ROS工作空间(一)参考教程(二)ROS工作空间种类(三)创建catkin工作空间(四)测试ROS环境1、启动ROS核心服务2、启动海龟节点3、通过键盘远程控制海龟(五)简单说明... 查看详情

可以在 catkin 工作空间之外创建 ROS 节点吗?

】可以在catkin工作空间之外创建ROS节点吗?【英文标题】:CanaROSnodebecreatedoutsideacatkinworkspace?【发布时间】:2018-05-1406:38:47【问题描述】:我想在catkin工作区之外创建一个ROS发布者节点。可以创建吗?【问题讨论】:【参考方案1... 查看详情

理解ros话题---ros学习第4篇

文章目录1.通过键盘控制turtle2.ROS话题2.1使用rqt_graph1.通过键盘控制turtle(1)打开一个终端运行roscore(2)再打开一个新的终端来打开turtlesim_node节点kandi@ubuntu:~$rosrunturtlesimturtlesim_node弹出一个乌龟的界面(3)再打开一个新的终端,... 查看详情