任务1–
对ROS工作空间的目录结构的理解
1.build 目录是构建空间的默认位置,同时cmake和make也是在这里被调用来配置和构建你的软件包
2.devel 目录是开发空间的默认位置, 在安装软件包之前,这里可以存放可执行文件和库
3.src 目录是存放代码的位置,在编写完代码之后,要将代码放入src文件夹
launch文件启动一个节点的语句语法和注意事项
1.对launch的解释:
开头的“<launch 声明表明了这是一个launch文件
从“<group ns=" "到“</group是创建了一个分组,并以namespace 来区分,这样就做到了可以同时启动两个相同名字的节点且不会产生冲突
从“<node pkg="" name="" type="“到”</node 是启动节点并对话题的输入和输出分别重命名
"/launch这一行使得launch文件的XML标签闭合
launch文件的语法
pkg=“节点所在功能包的名称”
type=“节点的可执行文件的名称”
name=“节点运行时的名称”
output="screen"意为将输出放在终端屏幕上
respawn=”true”启动完所有请求启动的节点之后,roslaunch 监测每一个节点,让它们保持正常的运行状态。对于每一个节点,当它终止时,我们可以要求 roslaunch 重新启动它.
required=”true”
当一个必需的节点终止时,roslaunch会做出响应,终止其他所有的节点并退出它自己。
注意: required 和 respawn 不可以同时在单一节点中同时存在
"<param/ <rosparam可设置系统运行中的参数,存储在参数服务器中
param name=“output_frame” value=“odom”/>
• name:参数名
• value:参数值
<remap
重映射ROS计算图资源的命名。
include标签
<include
包含其他launch文件,类似C语言中的头文件包含。
<include file="$(dirname)/other.launch" /
• file:包含的其他launch文件路径
lunch 示例
- catkin_create_pkg learning_launch
创建一个launch文件夹,无需依赖 - 写入.launch文件
- catkin_make
- roslaunch **.launch
CmakeList.txt 文件的基本指令的写法和注意事项
- 创建可执行性文件:
add——executable(obj_name src/cpp_name.cpp)
- 为可执行目标添加依赖项到消息生成目标
`add_dependencies(obj_name package_name_cpp)`
- 使用以下变量来依赖所有必需的目标:
target_link_libraries(obj_name ${catkin_LIBRARIES})
- 若有自定义类型的msg文件
- 打开package.xml, 确保它包含以下两行且没有被注释。如果没有,添加进去:
<build_depend>message_generation</build_depend>
<exec_depend>message_runtime</exec_depend>
注意,在构建时,其实只需要message_generation,而在运行时,我们只需要message_runtime。
- 在CMakeLists.txt文件中,为已经存在里面的find_package调用添加message_generation依赖项,这样就能生成消息了。
find_package(catkin REQUIRED COMPONENTS
roscpp
rospy
std_msgs
message_generation
)
- 确保导出消息的运行时依赖关系:
catkin_package(
...
CATKIN_DEPENDS message_runtime ...
...)
- 找到如下代码块:
/#FILES
/#Message1.msg
/#Message2.msg
)
将/#Message1.msg修改为自己的msg文件
- 取消下面几行的注释:
/# generate_messages(
/# DEPENDENCIES
/# std_msgs
/# )
- 若有自定义类型srv文件
- 先打开package.xml,确保它包含以下两行且没有被注释。如果没有,添加进去:
<build_depend>message_generation</build_depend>
<exec_depend>message_runtime</exec_depend>
- 在CmakeList.txt中,将message_generation添加到COMPONENTS列表中
find_package(catkin REQUIRED COMPONENTS
roscpp
rospy
std_msgs
message_generation
)
(别被名字迷惑,message_generation对msg和srv都适用)
- 修改服务字段
/# add_service_files(
/# FILES
/# Service1.srv
/# Service2.srv
/# )
- 确保导出消息的运行时依赖关系:
catkin_package(
...
CATKIN_DEPENDS message_runtime ...
...)
- 取消下面几行的注释:
/# generate_messages(
/# DEPENDENCIES
/# std_msgs
/# )
几种机制的内容和基本语法
- 话题(topic):
由一个或者多个节点向话题发布消息,由另外的一个或多个节点从话题接收消息
其中/publisher为向外发布消息的节点,/person_info为话题,/student和/subscriber为从话题获取消息的节点
上图为运行的效果
- 服务
客户端向“服务”发出request并接收response,服务端向“服务”接收request并发出response
- 参数服务器
为什么要用参数服务器:
1.使用参数服务器配置系统的参数,是全局可见的,方便我们检索和更改系统的配置状态。
2. 参数服务器为ROS节点之间提供了另一种信息交互方式
用cpp实现参数的设置
实现截图
- 动作(action)
动作是一种问答通信系统,且带有反馈机制,可以使动作在任务过程终止
动作系统的接口:
- goal : 发布目标任务
- cancel : 请求取消任务
- status : 通知客户端当前状态
- feedback : 周期反馈任务运行的监控数据
- result : 向客户端发送任务的执行结果,只发布一次
服务端是/fibonacci 客户端是/test_fibonacci