第二篇:ROS开发步骤【重点】

系列文章目录

提示:这里可以添加系列文章的所有文章的目录,目录需要自己手动添加
TODO:写完再整理


前言

认知有限,望大家多多包涵,有什么问题也希望能够与大家多交流,共同成长!

开发管理相关博客专栏:
https://blog.csdn.net/qq_35635374/article/details/138258301

开发经验及方法博客专栏:
https://blog.csdn.net/qq_35635374/article/details/138256324

嵌入式系统平台硬软件底层开发相关博客专栏:
https://blog.csdn.net/qq_35635374/article/details/138229695

机器人导航系统架构及业务模块组合策略的相关博客专栏:
https://blog.csdn.net/qq_35635374/article/details/138202210

运动学与动力学基础知识相关博客专栏:
https://blog.csdn.net/qq_35635374/article/details/138201806

机器人传感器及感知相关教程及博客请关注专栏:
https://blog.csdn.net/qq_35635374/article/details/138507260

机器人定位相关教程及博客请关注专栏:
https://blog.csdn.net/qq_35635374/article/details/138199360

机器人地图建立相关教程及博客请关注专栏:
https://blog.csdn.net/qq_35635374/article/details/138199063

机器人动作策略规划相关教程及博客请关注专栏:
https://blog.csdn.net/qq_35635374/article/details/138175048

机器人全局路径规划相关教程及博客请关注专栏:
https://blog.csdn.net/qq_35635374/article/details/138174918

机器人局部轨迹规划相关教程及博客请关注专栏:
https://blog.csdn.net/qq_35635374/article/details/138174730

机器人轨迹跟踪控制相关教程及博客请关注专栏:
https://blog.csdn.net/qq_35635374/article/details/138168913

本文先对ROS开发步骤做个简单的介绍,具体内容后续再更,其他模块可以参考去我其他文章


提示:以下是本篇文章正文内容

一、步骤一:编辑平台选择

方法一:使用VScode+ROS插件

方法二:使用VScode编辑器+终端ROS的命令行

.
.
.

二、步骤二:工程根目录管理【工作空间介绍】

(用于存放工程开发的相关的文件夹)
工作空间catkin_ws: 整个ROS系统的,相当于一个项目的工程

1.src源文件空间

【存放C++、python源码的空间,只用管这个,其他几乎不用管,里面存放的是大大小小的功能包】
放置各个功能包、文件夹和编译配置文件CmakeLists.txt
(1)功能包空间package_1【防盗标记--盒子君hzj】
(2)功能包空间package_2
(3)功能包空间package_3
......

功能包是ROS中软件组织的基本形式,一个功能包具有用于创建ROS程序的最小结构和内容,包含ROS运行的进程(节点)、配置文件等待
(1)CmakeList.txt文件时功能包的编译配置文件
(2)package.xml时功能包的清单文件,标记功能包的相关信息如包的名称、依赖关系等等【防盗标记--盒子君hzj】

.

2.build编译空间

这个文件夹空间开发人员是不用接触的,用于计算机编译时传声的缓存、中间文件

.

3.devel开发空间

放置编译好的可执行文件,这些编译好的可执行文件不需要安装就可以直接运行,可以直接导出与其他开发人员分享

.

4.install安装空间

~
.

5.include空间

存放通用库lib文件或功能包【防盗标记--盒子君hzj】
存放.h文件【包括对应C++的.h和通用实现功能的uilite.h】

.

6.config空间

存放参数文件,如.csv/.yaml/.config
还有机器人模型文件

.

7.launch空间

存放调试和部署的大大小小的launch文件【防盗标记--盒子君hzj】
存放rviz相关的文件
存放gazebo相关的文件 

.

8.doc/.md空间

存放说明文档

.
.
.

三、步骤三:创建工作空间步骤(一次就行)

1、(在hom目录下)创建一个文件夹,在该文件夹夹下创建一个src文件夹

2、终端进入src这个文件夹后,生成 ROS工作空间【catkin_init_workspace,这样在src文件夹里面有一个cmakelist.txt文件】

3、退出到根目录进行编译【catkin_make】

.
.
.

四、步骤四:设置环境变量(每次都要进行source一次)

【设置环境变量目的是为了linux找到ros具体功能包的位置,设置路径】
【防盗标记--盒子君hzj】

方法 一、命令source devel/setup.bash【该命令只能在当前终端生效,换一个终端要重新设置】

方法二、在bashtc文件中添加自己的环境变量【一劳永逸】

选择一:用vi编辑器在bash文件里面加入
选择二:指令加入【echo "source ~/catkin_ws/devel/setup.bash" >> ~/.bashrc】+【source ~/.bashrc】

.
.
.

五、步骤五:创建(自定义/ros提供的)数据消息类型

用什么方式进行定义.h,还是.msg.action.srv,还是谷歌的protobug都行
具体有什么数据类型看我另外的博客介绍~
【防盗标记–盒子君hzj】
.
.

六、步骤六:创建(自定义/移植)别人功能包

注意:功能包是一个最小的目录单位,功能包之间不能相互嵌套

1.自定义ROS子功能包

方法如下:

1、指令:
$catkin_create_pkg<package name>[depend1][depend2][depend3]

2、注意:
在每一个功能包目录下不允许有其它的功能包,也就是不允许功能包嵌套,
必须包括一个package.xml文件,一个CMakeLists.txt文件

3、步骤:
(1)、进入到工程根目录的src文件夹里
(2)、创建一个功能包
	依赖一:std_msgs(基础数据结构)
	依赖二:rospy(Python数据结构)
	依赖三:roscpp(c++的数据基本结构)
	后期想加入更多功能包能在对应的package.xml文件添加,如果我们在使用catkin_create_pkg命令创建功能包的时候,没有制定我们创建的功能包依赖于哪些功能包,可以手动在这里添加依赖的功能包
(3)、要删除原有功能包仅需要删除src里面对应功能包的文件夹即可【防盗标记--盒子君hzj】
(4)、$rospack depends可以查看功能包的依赖项

建立一个新的功能包必须要用指令,这样才能生成cmakelist、packagexml,运行launch文件的时候才能索引得到

.

2.移植别人功能包

别人的功能包已经写好的,一般是开源的,复制过来配好环境就行

(1)功能包是多个文件夹的东西一起写的,不分先后顺序,同时进行debug

(2)不同的功能包可以定义相同名字的变量和函数,因为功能包名字不一样,【防盗标记–盒子君hzj】所以不同的功能包可以定义相同名字的变量和函数,这样可以使得功能包更加连贯起来,同时功能又相互独立

.
.
.

七、步骤七:编写cmakelist、package.xml,回到工作空间根目录,进行编译【catkin_make】

cmakelist、package.xml文件填写参数【cmake编译器相关】

1.cmakelist文件

(1)【C++标准编译选项】compile

(2)【声明是否包含其他依赖功能包】find_package
也包括TF和数据类型

(3)【声明ROS三种通讯的数据类型--不一定有】话题msg、服务srv、动作action

(4)【声明ROS的动态参数配置--不一定有】dynamic_reconfigure_parm

(5)【声明catkin的特殊功能包】catkin_package

(6)【声明编译路径和文件及对应依赖库】build
			1)【源文件目录--不一定有】include_directories()
			2)【依赖的目录--不一定有】link_directories()
			3)【要编译的源文件及编译所需要的依赖库】
			add_executable()
			target_link_libraries

2.package.xml文件

(1)【编译依赖】build_depend /  build_export_depend

(2)【运行依赖】run_depend

(3)add_dependen

(4)add_executable

例子

add_executable(hello src/hello.cpp)

add_dependencies(hello ${${PROJECT_NAME}_EXPORTED_TARGETS} ${catkin_EXPORTED_TARGETS})

target_link_libraries(hello
  ${catkin_LIBRARIES}
)

.
.
.

八、步骤八:运行节点debug

创建节点可以使用C++和python的工具库,运行节点用rosrun命令

编写一个ROS消息发布器节点

编写一个ROS消息订阅器节点

测试消息发布器和订阅器
【防盗标记--盒子君hzj】

九、步骤九:ROS工程架构规范

1、ROS工程目录架构规范

(1)launch启动文件

Launch文件最好放在一个功能包里面,用命令行容易寻找得到,同时编程的时候工程也不用这么乱。总的launch文件搞一个robot_launch功能包,子功能包内放一个launch文件夹来存放【防盗标记–盒子君hzj】

(2)工程架构

--src

--一级文件目录【按层次分】
(一级功能包......)

--二级文件目录【按功能分】
--(二级功能包)

2、ROS功能包架构规范

(0)cmakelist、package.xml文件填写参数【cmake编译器相关】【防盗标记–盒子君hzj】

(1)src文件夹
存放C++、python源码的空间

(2)include文件夹
存放通用库lib文件或功能包


(3)config文件夹
存放参数文件,如.csv/.yaml/.config


(4)launch文件夹
存放调试和部署的大大小小的launch文件
存放rviz相关的文件
存放gazebo相关的文件 

(5)doc/.md文件夹
存放说明文档
...

注意
(1)功能包是多个文件夹的东西一起写的,不分先后顺序,同时进行debug【防盗标记–盒子君hzj】

(2)不同的功能包可以定义相同名字的变量和函数,因为功能包名字不一样,所以不同的功能包可以定义相同名字的变量和函数,这样可以使得功能包更加连贯起来,同时功能又相互独立

3、ROS源文件节点(.cpp/,h)架构规范

(1)#include<功能包名/.h文件名>

(2).cpp构造函数编写最好是有顺序规范的
【构造函数最好带有句柄,.h文件的class也是对应这个顺序】

0)句柄
1)param变量加载
2)创建订阅器
3)创建发布器
4)创建定时器
5)创建boost线程
6)服务通讯
7)动作通讯
8)运行仅仅运行一次的初始化函数

(3).h的类:对应写声明,分门别类

注意
没有写完main()函数就会报错,因为编译找不到起点,要写完main()函数,类和构造函数逗得先写完【防盗标记–盒子君hzj】

4、ROS的msgs数据类型规范

待补充~

5、ROS的话题名、变量名命名规范

(1)在节点node中设置订阅和发布topic名字的技巧

(1)作用
可以在launch文件中更改话题的名字,修改话题名字比较方便,同时在终端debug的时候比较方便
【先使用launch文件的话题名,没有在launch文件中定义的时候使用默认的话题名】

(2)方法
	1)在launch文件夹中用<param>标签定义一个话题名变量
	
	2)在CPP源文件的构造函数中用nh.param获取该话题名变量,然后在订阅器和发布器上填入该话题名变量即可【一开始的时候,最好默认的话题名和launch的话题名一致】

(2)话题名规范,话题名前面都加上“/”,作为话题的识别【当然不加也可以】【防盗标记–盒子君hzj】

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

盒子君~

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值