ROS[一]

ROS命令行工具

  •  catkin_make 命令

  • rosbag 命令

  • rosmsg 命令

  •  rosnode 命令

  • rosparam 命令

  • rosservice 命令

  • rossrv 命令

  • rostopic 命令

 

ROS基础概念

话题

一、话题模型


二、发布者

1、创建发布者代码(C++)

初始化ROS节点
向ROS Master注册节点信息,包括发布的话题名和话题中的消息类型
创建消息数据
按照一定频率循环发布消息
2、配置发布者代码编译规则

设置需要编译的代码和生成的可执行文件
设置链接库
在CMakeLists.txt中加入以下两句话

add_executable(velocity_publisher src/velocity_publisher.cpp)#把src/velocity_publisher.cpp编译成可执行文件velocity_publisher
target_link_libraries(velocity_publisher ${catkin_LIBRARIES})#帮助可执行文件和库之间做链接


3、编译并运行发布者

cd ~/catkin_ws
catkin_make
source devel/setup.bash
roscore
roscore turtlesim turtlesim_node
rosrun learning_topic velocity_publisher


三、订阅者

1、创建订阅者代码(C++)

初始化ROS节点
订阅需要的话题
循环等待话题消息,接收到消息后进入回调函数
在回调函数中完成消息处理
2、配置订阅者代码编译规则

设置需要编译的代码和生成的可执行文件
设置链接库
在CMakeList.txt中加入以下两句话

add_executable(pose_subscriber src/pose_subscriber.cpp)
target_link_libraries(pose_subscriber ${catkin_LIBRARIES})


3、编译并运行订阅者

cd ~/catkin_ws
catkin_make
source devel/setup.bash
roscore
roscore turtlesim turtlesim_node
rosrun learning_topic velocity_publisher


输出效果:终端中实时显示海龟的位置信息

四、话题消息的定义与使用

1、自定义话题消息定义msg文件
在功能包中新建.msg文件,这里以建立有关人信息的文件为例,先进入功能包右键从终端打开
然后输入touch Person.msg创建Person.msg文件,再进入到文件中编辑文件信息保存

string name
uint8 sex
uint8 age

uint8 unknown = 0
uint8 male = 1
uint8 female = 2

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

<build_depend>message_generation</build_depend>
<exec_depend>message_runtime</exec_depend>

在CMakeLists.txt中添加编译选项

find_package(...message_generation)
add_message_files(FILES Person.msg)
generate_messages(DEPENDENCIES std_msgs)
catkin_package(...message_runtime)

编译生成语言相关文件catkin_make
2、在功能包中创建发布者和订阅者代码(和前面一样)
3、配置代码编译规则

设置需要编译的代码和生成的可执行文件
设置链接库
添加依赖项

add_executable(person_publisher src/person_publisher.cpp)
target_link_libraries(person_publisher ${catkin_LIBRARIES})
add_dependencies(person_publisher ${PROJECT_NAME}_generate_messages_cpp)#和自定义文件链接必须要添加这么一句话
add_executable(person_subscriber src/person_subscriber.cpp)
target_link_libraries(person_subscriber ${catkin_LIBRARIES})
add_dependencies(person_subscriber ${PROJECT_NAME}_generate_messages_cpp)


4、编译并运行发布者和订阅者

cd ~/catkin_ws
catkin_make
source devel/setup.bash
roscore
rosrun learning_topic person_subscriber
rosrun learning_topic velocity_publisher


输出效果:一个终端做为发布者发布消息,另一个终端做为接收者实时接收消息。如果这时候关闭rosmaster(roscore),发布者和沟通者仍保持联系,但如果这时候切断发布者再开启,接收者将不能接收到消息,这是因为rosmaster起到了沟通发布者与接收者的作用。

服务模型

一、服务模型

二、发布者

1、创建一个功能包
2、如何实现一个服务器

初始化ROS节点
创建Server实例
循环等待服务请求,进入回调函数
在回调函数中完成服务功能的处理,并反馈应答数据
3、配置服务器代码编译规则

add_executable(turtle_command_server src/turtle_command_server.cpp)
target_link_libraries(turtle_command_server ${catkin_LIBRARIES})

4、编译并运行服务器

cd ~/catkin_ws
catkin_make
source devel/setup.bash
roscore
rosrun turtlesim turtlesim_node
rosrun learning_service turtle_command_server
rosservice call/turtle_command "{}"

 三、订阅者

2、配置订阅者代码编译规则

设置需要编译的代码和生成的可执行文件
设置链接库
在CMakeList.txt中加入以下两句话

add_executable(pose_subscriber src/pose_subscriber.cpp)
target_link_libraries(pose_subscriber ${catkin_LIBRARIES})


3、编译并运行订阅者

cd ~/catkin_ws
catkin_make
source devel/setup.bash
roscore
roscore turtlesim turtlesim_node
rosrun learning_topic velocity_publisher

输出效果:终端中实时显示海龟的位置信息

三、服务数据的定义与使用

1、自定义服务数据定义srv文件

string name
unit8 age
unit8 sex
unit8 unknown = 0
unit8 male = 1
unit8 female = 2
---#以---横线做为区分,其上为requst数据,其下为response文件
string result


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

<build_depend>message_generation</build_depend>
<exec_depend>message_runtime</exec_depend>


在CMakeLists.txt添加编译选项

find_package(...message_generation)
add_service_files(FILES Person.srv)
generate_messages(DEPENDENCIES std_msgs)
catkin_package(...message_runtime)


编译生成语言相关文件
2、创建服务器代码

初始化ROS节点
创建Server实例
循环等待服务请求,进入回调函数
在回调函数中完成服务功能的处理,并反馈应答数据
3、创建客户端代码

初始化ROS节点
创建一个Client实例
发布服务请求数据
等待Server处理之后的应答结果
4、配置服务器/客户端代码编译规则设置需要编译的代码和生成的可执行文件
设置链接库
添加依赖项

add_executable(person_server src/person_server.cpp)
target_link_libraries(person_server ${catkin_LIBRARIES})
add_dependencies(person_server ${PROJECT_NAME}_gencpp)
add_executable(person_client src/person_client.cpp)
target_link_libraries(person_client ${catkin_LIBRARIES})
add_dependencies(person_client ${PROJECT_NAME}_gencpp)


5、编译运行发布者和订阅者

cd ~/catkin_ws
catkin_make
source devel/setup.bash
roscore
rosrun learning_service person_server
rosrun learning_service person_client

参数

1、参数模型

2、创建功能包

cd ~/catkin_ws/src
catkin_create_pkg learning_parameter roscpp rospy std_srvs


3、参数命令行使用
YAML参数文件

background_b: 255
background_g: 86
background_r: 69
rosdistro: 'kinetic'
roslaunch:
  uris: {host_luanlongsheng:39627: 'http://luanlongsheng:39627/'}
rosversion: '1.12.14'
run_id: 28508c8e-7a6a-11ea-b91f-f894c211277c


列出当前所有参数        rosparam list
显示某个参数值            rosparam get param_key
设置某个参数值            rosparam set param_key param_value
保存参数到文件            rosparam dump file_name
从文件读取参数            rosparam load file_name
删除参数                       rosparam delete param_key

4、编程方法
如何获取/设置参数

1.初始化ROS节点
2.get函数获取参数
3.set函数设置参数


5、配置代码编译规则
如何配置CMakeLists.txt中的编译规则

1.设置需要编译的代码和生成的可执行文件
2.设置链接库

add_executable(parameter_config src/parameter_config.cpp)
target_link_libraries(parameter_config ${catkin_LIBRARIES})


6、编译并运行发布者

cd ~/catkin_ws
catkin_make
source devel/setup.bash
roscore
rosrun turtlesim turtlesim_node
rosrun learning_parameter parameter_config

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值