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的编程实现

rosjava 对接ros ros如何使用_编程实现

如何实现一个发布者

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的编程实现

rosjava 对接ros ros如何使用_数据_02


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的编程实现

rosjava 对接ros ros如何使用_rosjava 对接ros_03


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 “{}”

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

rosjava 对接ros ros如何使用_客户端_04


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

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

rosjava 对接ros ros如何使用_rosjava 对接ros_05

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讲