ROS入门的基本操作

  • 一、ROS命令行工具的使用
  • 二、创建工作空间与功能包
    • 创建工作空间的流程
    • 创建功能包的流程
  • 三、发布者Publisher的编程实现
    • 如何实现一个发布者
    • 如何配置CMakeLIsts.txt中的编译规则
    • 编译并运行发布者(要进入到根目录进行编译)
  • 四、订阅者Subscriber的编程实现
    • 如何实现一个订阅者
  • 四、话题消息的定义和使用
    • 如何自定义话题消息
  • 五、客户端Client的编程实现
  • 六、服务端Server的编程实现
  • 七、服务数据的定义与使用
  • 八、参数的使用与编程方法
  • 九、ROS中的坐标系管理系统
  • 十、tf坐标系广播与监听的编程实现
  • 十一、launch启动文件的使用方法
  • 十二、常用可视化工具的使用

一、ROS命令行工具的使用

常用命令:
rostopic
rosservice
rosnode
rosparam
rosmsg
rossrv

二、创建工作空间与功能包

工作空间是一个存放工程开发相关文件的文件夹
src:代码空间
build:编译空间
devel:开发空间
install:安装空间

创建工作空间的流程

1.创建空间:
$mkdir -p ~/catkin_ws/src
$cd ~/catkin_ws/src
$catkin_init_workspace

2.编译空间
$cd ~/catkin_ws/
$catkion_make

3.设置环境变量
$source devel/setup.bash

4.检查环境变量
$echo $ROS_PACKAGE_PATH

创建功能包的流程

1.创建功能包
$cd ~/catkin_ws/src
$catkin_create_pkg test_pkg std_msgs rospy roscpp

2.编译功能包
$cd ~/catkin_ws
$catkin_make
$source ~/catkin_ws/devel/setup.bash

三、发布者Publisher的编程实现

如何实现一个发布者

1.初始化ROS节点
2.向ROS Master注册节点信息,包括发布的话题名和话题中的消息类型
3.创建消息数据
4.按照一定频率循环发布消息

如何配置CMakeLIsts.txt中的编译规则

1.设置需要编译的代码和生成的可执行文件
2.设置链接库
  add_executable(velocity_publisher src/velocity_publisher.cpp)
  target_link_libraries(velocity_publisher ${catkin_LIBRARIES})

编译并运行发布者(要进入到根目录进行编译)

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

四、订阅者Subscriber的编程实现

如何实现一个订阅者

1.初始化ROS节点
2.订阅需要的话题
3.循环等待话题消息,接收到消息后进入回调函数
4.在回调函数中完成消息处理

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

如何自定义话题消息

1.定义msg文件;
2.在package.xml中添加功能包依赖
  <build_depend>message_generation</build_depend>
  <exec_depend>message_runtime</exec_depend>
3.在CMakeLists.txt添加编译选项
  find_package(… message_generation)
  add_message_files(FILES Person.msg)
  generate_messages(DEPENDENCIES std_msgs)
  catkin_package(… message_runtime)
4.编译生成语言相关文件

五、客户端Client的编程实现


1.创建功能包
$cd ~/catkin_ws/src
$catkin_create_pkg learning_service roscpp rospy std_msgs geometry_msgs turtlesim

2.创建客户端代码
如何实现一个客户端
(1)初始化ROS节点
(2)创建一个Client实例
(3)发布服务请求数据
(4)等待Server处理之后的应答结果

3.配置客户端代码编译规则
如何配置CMakeList.txt中的编译规则
(1)设置需要编译的代码和生成的可执行文件;
(2)设置链接库
  add_executable(turtle_spawn src/turtle_spawn.cpp)
  target_link_libraries(turtle_spawn ${catkin_LIBRARIES})

4.编译并运行客户端
$cd ~/catkin_ws
$catkin_make
$source devel/setup.bash
$roscore
$rosrun turtlesim turtlesim_node
$rosrun learning_service turtle_spawn

六、服务端Server的编程实现


1.创建服务器代码
如何实现一个服务器
(1)初始化ROS节点
(2)创建Server实例
(3)循环等待服务请求,进入回调函数
(4)在回调函数中完成服务功能的处理,并反馈应答数据

2.如何配置CMakeLists.txt中的编译规则
(1)设置需要编译的代码和生成的可执行文件
(2)设置链接库
  add_executable(turtle_command_server src/turtle_command_server.cpp)
  target_link_libraries(turtle_command_server ${catkin_LIBRARIES})

3.编译并运行服务器
$cd ~/catkin_ws
$catkin_make
$source devel/setup.bash
$roscore
$rosrun turtlesim turtlesim_node
$rosrun learning_service turtle_command_server
$rosservice call /turtle_command “{}”

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


1.自定义服务数据
如何自定义服务数据
(1)定义srv文件
(2)在package.xml中添加功能包依赖
  <build_depend>message_generation</build_depend>
  <exec_depend>message_runtime</exec_depend>
(3)在CMakeLists.txt添加编译
  find_package(… message_generation)
  add_service_files(FILES Person.srv)
  generate_messages(DEPENDENCIES std_msgs)
  catkin_package(… message_runtime)
(4)编译生成语言相关文件

2.如何实现一个服务器
(1)初始化ROS节点
(2)创建Server实例
(3)循环等待服务请求,进入回调函数
(4)在回调函数中完成服务功能的处理,并反馈应答数据

3.创建客户端代码
如何实现一个客户端
(1)初始化ROS节点
(2)创建一个Client实例
(3)发布服务请求数据
(4)等待Server处理之后的应答结果

4.如何配置CMakeLists.txt中的编译规则
(1)设置需要编译的代码和生成的可执行文件
(2)设置链接库
(3)添加依赖项

5.编译并运行客户端和服务器
$cd ~/catkin_ws
$catkin_make
$source devel/setup.bash
$roscore
$rosrun learning_service person_server
$rosrun learning_service person_client

八、参数的使用与编程方法

1.创建功能包
$cd ~/catkin_ws/src
$catkin_create_pkg learning_parameter roscpp rospy std_srvs

2.参数命令行使用
rosparam

(1)列出当前多个参数:$rosparam list
(2)显示某个参数值:$rosparam get param_key
(3)设置某个参数值:$rosparam set param_key param_value
(4)保存参数到文件:$rosparam dump file_name
(5)从文件读取参数:$rosparam load file_name
(6)删除参数:$rosparam delete param_key

3.YAML参数文件
background_b:255
background_g:86
background_r:69
rosdistro: ‘melodic’
roslaunch:
uris:{host_hhj_vpc__43763:’http://hhj-vpc:43763/’}
rosversion: ‘1.14.3’
run_id: 077058de-a38b-11e9-818b-000c29d22e4d

4.如何获取/设置参数
(1)初始化ROS节点
(2)get函数获取参数
(3)set函数设置参数

5.配置代码编译规则
如何配置CMakeList.txt中的编译规则
(1)设置需要编译的代码和生成的可执行文件
(2)设置链接库
  add_executable(parameter_config src/parameter_config.cpp)
  target_link_libraries(parameter_config ${catkin_LIBRARIES})

九、ROS中的坐标系管理系统

1.机器人的坐标变换
TF功能包
(1)默认记录十秒钟内机器人所有坐标系之间的位置关系
(2)机器人夹取的物体相对于机器人中心坐标系的位置
(3)机器人中心坐标系相对于全局坐标系的位置

TF坐标变换如何实现?
(1)广播TF变换
(2)监听TF变换

十、tf坐标系广播与监听的编程实现

1.创建功能包
$cd ~/catkin_ws/src
$catkin_create_pkg learning_tf roscpp rospy tf turtlesim

2.创建tf广播器代码
如何实现一个tf广播器
(1)定义TF广播器
(2)创建坐标变换值
(3)发布坐标变换

3.创建tf监听器代码
如何实现一个TF监听器
(1)定义TF监听器(TransformListener
(2)查找坐标变换(waitForTransform、lookupTransform)

4.配置tf广播器与监听器代码编译规则
如何配置CMakeList.txt中的编译规则
(1)设置需要编译的代码和生成的可执行文件
(2)设置链接库

5.编译并运行
$cd ~/catkin_ws
$catkin_make
$source devel/setup.bash
$roscore
$rosrun learning_tf turtle_tf_broadcaster __name:=turtle1_tf_broadcaster /turtle1
$rosrun learning_tf turtle_tf_broadcaster __name:=turtle2_tf_broadcaster /turtle2
$rosrun learning_tf turtle_tf_listener
$rosrun turtlesim turtle_teleop_key

十一、launch启动文件的使用方法

1.Launch文件:通过XML文件实现多节点的配置和启动(可自动启动ROS Master)

<launch>   launch文件中的根元素采用<launch>标签定义
<node>        启动节点
<node pkg = “package-name” type=”executable-name” name=”node-name” />

(1)pkg:节点所在的功能包名称
(2)type:节点的可执行文件名称
(3)name:节点运行时的名称
(4)output、respawn、required、ns、args

<param>/   设置ROS系统运行中的参数,存储在参数服务器中。
<rosparam>    <param name=”output_frame” value=”odom”/>

(1)name:参数名
(2)value:参数值

加载参数文件中的多个参数:

<rosparam file=”params.yaml” command=”load” ns=”params” />
<arg>     launch文件内部的局部变量,仅限于launch文件使用
<arg name=”arg-name” default=”arg-value” />

(1)name:参数名
(2)value:参数值

调用:

<param name=”foo” value=”$(arg-name)” />
<node name=”node” pkg=”package” type=”type” args=”$(arg arg-name)” />
重映射<remap>    重映射ROS计算图资源的命名。
<remap from=”/turtlebot/cmd_vel” to=”/cmd_vel” />

(1)from:原命名
(2)to:映射之后的命名

嵌套<include>    包含其他lauch文件,类似C语言中的头文件包含。
<include file=”$(dirname)/other.launch” />

(1)file:包含的其他launch文件路径

十二、常用可视化工具的使用

1.Qt工具箱
(1)日志输出工具–rqt_console
(2)计算图可视化工具–rqt_graph
(3)数据绘图工具–rqt_plot
(4)图像渲染工具–rqt_image_view

2.Rviz
机器人开发过程中的数据可视化界面

3.Gazebo
三维物理仿真平台

参考资料:
古月-ROS入门21讲

ROS入门的基本操作相关推荐

  1. ROS入门跟着我就够了(二)上 ROS通信机制

    由于这一章东西比较多,我分了上下两篇,下部分可以在< ROS 入门跟着我就够了>专辑中查看 ROS 中的基本通信机制主要有如下三种实现策略: 话题通信(发布订阅模式)服务通信(请求响应模式 ...

  2. python使用教程pandas-Python 数据处理库 pandas 入门教程基本操作

    pandas是一个Python语言的软件包,在我们使用Python语言进行机器学习编程的时候,这是一个非常常用的基础编程库.本文是对它的一个入门教程. pandas提供了快速,灵活和富有表现力的数据结 ...

  3. SLAM+语音机器人DIY系列:(二)ROS入门——2.ROS系统整体架构

    摘要 ROS机器人操作系统在机器人应用领域很流行,依托代码开源和模块间协作等特性,给机器人开发者带来了很大的方便.我们的机器人"miiboo"中的大部分程序也采用ROS进行开发,所 ...

  4. ROS入门笔记(十三):分布式通信

    ROS入门笔记(十三):分布式通信 文章目录 01 如何实现分布式多机通信 1.1 设置IP地址,确保底层链路的连通 1.2 在从机端设置ROS_MASTER_URI,让从机找到ROS Master ...

  5. ROS入门笔记(十二):动作编程 (C++)

    ROS入门笔记(十二):动作编程 (C++) 文章目录 01 导读 02 功能包的创建 03 在功能包中创建action(动作) 3.1 自定义action 3.2 在package.xml中添加功能 ...

  6. ROS入门笔记(十一):编写与测试简单的Service和Client (Python)

    ROS入门笔记(十一):编写与测试简单的Service和Client (Python) 文章目录 01 导读 02 功能包的创建 03 在功能包中创建自定义服务类型 3.1 定义srv文件 3.2 在 ...

  7. ROS入门笔记(十):编写与测试简单的消息发布器和订阅器(C++)

    ROS入门笔记(十):编写与测试简单的消息发布器和订阅器(C++) 文章目录 01 导读 02 功能包的创建 03 功能包的源代码编写 3.1 编写发布器节点(talker.cpp) 3.2 编写订阅 ...

  8. ROS入门笔记(九):编写ROS的第一个程序hello world(重点)

    ROS入门笔记(九):编写ROS的第一个程序hello world(重点) 文章目录 1 Catkin工作空间 1.1 创建catkin工作空间 1.2 编译工作空间 1.3 设置环境变量 1.4 检 ...

  9. ROS入门笔记(七):详解ROS文件系统

    ROS入门笔记(七):详解ROS文件系统 文章目录 01 Catkin编译系统 1.1 Catkin特点 1.2 Catkin工作原理 1.3 使用`catkin_make`进行编译 02 Catki ...

最新文章

  1. CSS布局——横向两列布局
  2. python json库函数_python基础之JSON标准库
  3. 2019牛客暑期多校训练营(第二场)
  4. MyBatis二级缓存的配置
  5. 用户登陆注册功能(PHP)
  6. Struts2 s:iterator 用法
  7. static_cast与dynamic_cast类型转换
  8. qt调用SSDP协议
  9. linux查看内存和硬盘,Linux 查看内存,CPU及硬盘大小的步骤
  10. 如何注册一个免费的网站空间和域名
  11. 360 路由器设置 虚拟服务器,360安全路由器的设置方法
  12. 企业微信获取客户群里用户的unionid;企业微信获取客户详情
  13. 黄页宝贝工具栏软件发布了
  14. 基于深度学习的多任务人脸属性分析(基于飞桨PaddlePaddle)
  15. vimdiff比较两个文件
  16. 【NLP】keras Transformer 唐诗生成器
  17. LVGL V8之border styles
  18. 华为硬件工程师手册_华为是怎样开发硬件的 之一——概述
  19. R语言-一个寻找R函数功能源码的好方法
  20. {}怎样进行邮件推广

热门文章

  1. activiti6执行Python脚本
  2. 安卓-使用腾讯TBS浏览服务(X5WebView) - 打开打开PDF,WORD,EXCLE等文件
  3. JAVA测试类注解以及Mock测试
  4. 传统PCNN算法python实现
  5. 【Go编程语言】 Go语言基础语法
  6. 关于如何选择一家正规的PMP培训机构?
  7. CNN学习MNIST实现手写数字识别
  8. dll放在unity哪个文件夹下_Unity中调用DLL库
  9. 图片放大不失真?图片无损放大的方法
  10. zigbee之Zstack协议栈使用