ROS功能包设计

如果没有工作空间,首先需要创建一个工作空间mkdir -p ~/catkin_ws/src # 创建了第二层级的文件夹src,这是放ROS软件包的地方 cd ~/catkin_ws/src # 进入工作空间,catkin_make必须在工...

如果没有工作空间,首先需要创建一个工作空间

mkdir -p ~/catkin_ws/src  # 创建了第二层级的文件夹src,这是放ROS软件包的地方
cd ~/catkin_ws/src        # 进入工作空间,catkin_make必须在工作空间这个路径上执行
catkin_init_workspace     # 初始化src目录,生成的CMakeLists.txt为功能包编译配置

编译工作空间

cd ~/catkin_ws   # 回到工作空间,catkin_make必须在工作空间下执行;
catkin_make     # 开始编译,调用系统自动完成编译和链接过程,构建生成目标文件
# catkin编译之前需要回到工作空间目录,catkin_make在其他路径下编译不会成功
# 对于Python3用户,在一个空的 catkin 工作空间中第一次运行catkin_make的命令应为
catkin_make -DPYTHON_EXECUTABLE=/usr/bin/python3
# 这将会配置 catkin_make 使用Python3 可以在随后的构建中只使用catkin_make

设置环境变量

# 查看当前目录应该能看到 'build' 和 'devel' 这两个文件夹
# 在 'devel' 文件夹里面可以看到几个setup.*sh 文件
# source 这些文件中的任何一个都可以将当前工作空间设置在ROS工作环境的最顶层
source devel/setup.bash   # 刷新坏境

要保证工作空间已配置正确,需确保ROS_PACKAGE_PATH环境变量包含当前的工作空间目录,采用以下命令查看:

echo $ROS_PACKAGE_PATH
# 出现 /home/<youruser>/catkin_ws/src:/opt/ros/kinetic/share

1. 创建功能包

# 同一个工作空间下,不允许存在同名功能包
# 创建功能包,和依赖项
catkin_create_pkg <package_name>[depend1]  [depend2] [depend3]
# 例如 catkin_create_pkg hello_world

创建成功后会生成一个文件夹,里面有CMakeLists.txt和package.xml两个文件

2. 编写功能包的源代码

进入刚刚新建的功能包目录内,创建src目录

在新建的src目录下新建一个代码文件

例如 新建一个my_hello_world.cpp

写入代码

//包含头文件ros/ros.h,ROS提供的C++客户端库,在后面的编译配置中要添加相应的依赖库roscpp
#include "ros/ros.h"    

int main(int argc,char **argv) 
{
		ros::init(argc,argv,"hello_node"); //初始化ros节点;并指明节点的名称为 hello_node
  	ros::NodeHandle n;                //声明一个ros节点的句柄;
  	//调用了roscpp库提供的方法ROS_INFO_STREAM来打印信息。这里打印字符串"hello world!"。    
  	ROS_INFO_STREAM("hello world!");
}

3.功能包编译配置

3.1 在package.xml中添加功能包依赖

添加roscpp依赖库

# 找到<buildtool_depend>catkin</buildtool_depend>
# 在这句话的下面添加以下内容:
<build_depend>roscpp</build_depend>
<build_export_depend>roscpp</build_export_depend>
<exec_depend>roscpp</exec_depend>
# 注意对齐

3.2 在CMakeList.txt添加编译选项

声明依赖库:对于hello_world.cpp来说包含了ros/ros.h这个库,需要添加名为roscpp的依赖库:

# 在CMakeLists.txt文件,在find_package(catkin REQUIRED ...)字段中添加roscpp,添加后的字段:
find_package(catkin REQUIRED COMPONENTS roscpp)

attachments-2022-08-Z7PWbhAB630eb90f14bb5.png

# 在CMakeLists.txt中找到include_directories(...)字段,去掉${catkin_INCLUDE_DIRS}前面的注释
include_directories( include ${catkin_INCLUDE_DIRS}

attachments-2022-08-tTyiWsqr630eb90325fdd.png

3.3 声明可执行文件

# 在CMakeLists.txt中添加两句,来声明需要创建的可执行文件;一般在文件最后一行添加
add_executable(my_hello_world_node src/my_hello_world_node.cpp)
target_link_libraries(my_hello_world_node ${catkin_LIBRARIES})

attachments-2022-08-d7mcUx34630eb8f92e536.png

4.编译功能

编译有两种:编译工作空间内所有功能包、编译工作空间内指定的功能包

4.1 编译工作空间内所有功能包

cd ~/catkin_ws          # 回到工作空间,catkin_make必须在工作空间下执行;
catkin_make             # 开始编译,调用系统自动完成编译和链接过程,构建生成目标文件
source ~/catkin_ws/devel/setup.bash   # 刷新环境

编译完成后,如果有新的目标文件产生,那么一般紧跟着要source刷新环境,使得系统能够找到刚才编译生成的ROS可执行文件

4.2 编译工作空间内的指定功能包

# 其实就是加入参数 -DCATKIN_WHITELIST_PACKAGES=” ”,在双引号中填入需要编译的功能包名字,用空格分割
cd ~/catkin_ws
catkin_make -DCATKIN_WHITELIST_PACKAGES="hello_world"
source ~/catkin_ws/devel/setup.bash    # 激活catkin_ws工作空间 

5.启用功能包

首先打开一个终端启动ros节点管理器,ros节点管理器是所有节点运行的基础

roscore

第二步,再打开一个命令行终端,输入以下命令:

# 用rosrun <package_name> <node_name>启动功能包中的节点
source ~/catkin_ws/devel/setup.bash    # 激活catkin_ws工作空间  
rosrun hello_world my_hello_world   # 启动功能包中的节点
attachments-2022-08-StDgAlbM630eb8eceed56.png

参考链接

https://blog.csdn.net/lvmengzou/article/details/110836849



0 条评论

请先 登录 后评论
旺仔牛奶opo
旺仔牛奶opo

14 篇文章

作家榜 »

  1. Panda-admin 37 文章
  2. 解弘艺 17 文章
  3. 高曾谊 16 文章
  4. 胡中天 14 文章
  5. 旺仔牛奶opo 14 文章
  6. LH 14 文章
  7. 罗柏荣 13 文章
  8. 林晨 12 文章