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