ros 发布信息频率_ROS入门笔记二基础
1.创建工作空间
1.什么是工作空间
工作空间(workspace)是一个存放工作开发相关文件的文件夹
- src:代码空间(Source Space)
- build:编译空间(Build Space)
- devel:开发空间(Development Space)
- install:安装空间(Install Space)
2.创建工作空间
mkdir -p ~/catkin_ws/srccd ~/catkin_ws/srccatkin_init_workspace
创建ROS 工作空间时出现:
程序“catkin_init_workspace”尚未安装,程序“catkin_make”尚未安装。
解决方法:
source /opt/ros/kinetic/setup.bash
3.编译工作空间
cd ~/catkin_ws/catkin_make
4.设置环境变量
source devel/setup.bash
5.检查环境变量
echo $ROS_PACKAGE_PATH
6.创建功能包
cd ~/catkin_ws/srccatkin_create_pkg learning_communication std_msgs rospy roscpp
7.编译功能包
cd ~/catkin_wscatkin_makesource ~/catkin_ws/devel/setup.bash
注意:同一个工作空间下,不允许存在同名功能包;不同工作空间下,允许存在同名功能包。
ROS工作空间的Overlaying机制,即工作空间的覆盖
env | grep ros 查看ROS相关的环境变量
- 1).工作空间的路径依次在ROS_PACKAGE_PATH环境变量中记录
- 2).新设置的路径在ROS_PACKAGE_PATH中会自动放置在最前端
- 3).运行时,ROS会优先查找最前端的工作空间中是否存在指定的功能包
- 4).如果不存在,就顺序向后查找其他工作空间
~#rospack find roscpp_tutorials
系统路径下的功能包
catkin_ws# rospack find roscpp_tutorials
工作空间下的功能包
2.ROS通信编程
1.话题编程
话题编程流程
- 创建发布者
- 创建订阅者
- 添加编译选项
- 运行可执行程序
ROS通信编程---话题编程
1. 如何实现一个发布者
- 初始化ROS节点
- 向ROS Master注册节点信息,包括发布的话题名和话题中的现象类型
- 按照一定频率循环发布信息
2.如何实现一个订阅者
- 初始化ROS节点
- 订阅需要的话题
- 循环等待话题消息,接收到消息后进入回调函数
- 在回调函数中完成消息处理
3.如何编译代码
- 设置需要编译的代码和生成的可执行文件
- 设置链接库
- 设置依赖
CMakeLists.txt
add_executable(talker src/talker.cpp)target_link_libraries(talker ${catkin_LIBRARIES})#add_dependencies(talker ${PROJECT_NAME}_generate_messages_cpp)add_executable(listener src/listener.cpp)target_link_libraries(listener ${catkin_LIBRARIES})#add_dependencies(talker ${PROJECT_NAME}_generate_messages_cpp)
4.运行可执行文件
rosrun learning_communication talkerrosrun learning_communication listener
如何定义话题
1).定义msg文件
Person.msgstring nameuint8 sex uint8 ageuint8 unknown=0uint8 male = 1uint8 female=2
2).在package.xml中添加功能包依赖
<build_depend>message_generation</build_depend><exec_depend>message_runtime</exec_depend>
3).在CMakeLists.txt添加编译选项
a.find_package(...... message_generation)b.catkin_package(CATKIN_DEPENDS geometry_msgs roscpp rospy std_msgs message_runtime)c.add_message_file(FILES Person.msg)generate_messages(DEPENDENCIES std_msgs)
部分ROS版本中exec_depend需要改成run_depend
编译 catkin_make
查看自定义的消息
rosmsg show Person
2服务编程
服务编程流程:
- 1).创建服务器
- 2).创建客户端
- 3).添加编译选项
- 4).运行可执行程序
如何自定义服务请求与应答
1).定义srv文件 AddTwoInts.srv
int64 a int64 b ---int64 sum
2).在package.xml中添加功能包依赖
<build_depend>message_generation</build_depend><exec_depend>message_runtime</exec_depend>
3).在CMakeLists.txt添加编译选项
a.find_package(...... message_generation)b.catkin_package(CATKIN_DEPENDS geometry_msgs roscpp rospy std_msgs message_runtime)c.add_service_file(FILES AddTwoInts.srv)
部分ROS版本中exec_depend需要改成run_depend
ROS通信编程---服务编程
1.如何实现一个服务器
- 1).初始化ROS节点
- 2).创建Server实例
- 3).循环等待服务请求,进入回调函数
- 4).在回调函数中完成服务功能的处理,并反馈应答数据
2.如何实现一个客户端
- 1).初始化ROS节点
- 2).创建一个Client实例
- 3).发布服务请求数据
- 4).等待Server处理之后的应答结果
3.如何编译代码
- 1).设置需要编译的代码和生成的可执行文件
- 2).设置链接库
- 3).设置依赖
CMakeLists.txt add_executable(server src/server.cpp)target_link_libraries(server ${catkin_LIBRARIES})add_dependencies(server ${PROJECT_NAME}_gencpp)add_executable(client src/client.cpp)target_link_libraries(client ${catkin_LIBRARIES})add_dependencies(client ${PROJECT_NAME}_gencpp)
4.如何运行可执行文件
1).Server节点启动后的日志信息
rosrun learning_communication server
2).Client启动后发布服务请求,并成功接收到反馈结果
rosrun learning_communication client 3 5
3).Server接收到服务调用后完成加法求解,并将结果反馈给Client
rosrun learning_communication server
3动作编程
1.什么是动作编程
- 1).一种问答通信机制
- 2).带有连续反馈
- 3).可以在任务过程中止运行
- 4).基于ROS的消息机制实现
2.Action的接口
- 1).goal:发布任务目标
- 2).cancel:请求取消任务
- 3).status:通知客户端当前的状态
- 4).feedback:周期反馈任务运行的监控数据
- 5).result:向客户端发送任务的执行结果,只发布一次
3.如何自定义动作消息
1).定义action文件
DoDishes.action #定义目标信息uint32 dishwasher_id#Specify which dishwasher we want to use---#定义结果信息uint32 total_dishes_cleaned---#定义周期反馈的消息float32 percent_complete
2).在package.xml中添加功能包依赖
<build_depend>actionlib</build_depend><build_depend>actionlib_msgs</build_depend><exec_depend>actionlib</exec_depend><exec_depend>actionlib_msgs</exec_depend>
3).在CMakeLists.txt添加编译选项
a.find_package(catkin REQUIRED actionlib_msgs actionlib)b.add_action_file(DIRECTPRY action FILES DoDishes.action)c.generate_messages(DEPENDENCIES actionlib_msgs)
部分ROS版本中exec_depend需要改成run_depend
4.如何实现一个动作服务器
- 1).初始化ROS节点
- 2).创建动作服务器实例
- 3).启动服务器,等待动作请求
- 4).在回调函数中完成动作服务功能的处理,并反馈进度信息
- 5).动作完成,发送结信息
5.如何实现一个动作客户端
- 1).初始化ROS节点
- 2).创建动作客户端实例
- 3).连接动作服务端
- 4).发送动作目标
- 5).根据不同类型的服务端反馈处理回调函数。
6.如何编译代码
- 1).设置需要编译的代码和生成的可执行文件
- 2).设置链接库
- 3).设置依赖
CMakeLists.txt
add_executable(DoDishes_client src/DoDishes_client.cpp)target_link_libraries(DoDishes_client ${catkin_LIBRARIES})add_dependencies(DoDishes_client ${PROJECT_NAME}_EXPORTED_TARGETS)add_executable(DoDishes_server src/DoDishes_server.cpp)target_link_libraries(DoDishes_server ${catkin_LIBRARIES})add_dependencies(DoDishes_server ${PROJECT_NAME}_EXPORTED_TARGETS)
7.运行可执行文件
rosrun learning_communication DoDishes_client
rosrun learning_communication DoDishes_server
3.实现分布式通信
ROS是一种分布式软件框架,节点之间通过松耦合的方式进行组合
1.如何实现分布式多机通信
- 1).设置IP地址,确保底层链路的联通
- 2).在从机端设置ROS_MASTER_URI,让从机找到ROS Master
$export ROS_MASTER_URI=http://pc:11311 (当前终端有效)或$echo "export ROS_MASTER_URI=http://pc:11311">>~/.bzshrc (所有终端有效)
主机端启动ROS Master与海龟仿真节点
roscore
rosrun turtlesim turtlesim_node
从机端发布一个速度控制消息
rostopic pub -r 10 /turtle1/cmd_vel geometry_msgs/Twist"linear:
x:0.5
y:0.0
z:0.0
angular:
x:0.0
y:0.0
z:0.5"
4.ROS中的关键组件
1).Launch文件
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>/<rosparam>
设置ROS系统运行中的参数,存储在参数服务器中。
<param name="output_frame" value="odom"/>
name:参数名 value:参数值
加载参数文件中的多个参数
<rosparam file="param.yaml" command="load" ns="params"/>
<arg>
launch文件内部的局部变量,仅限于launch文件使用
<arg name="" default="arg-value"/>
name:参数名 value:参数值
调用
<param name="foo" value="$(arg arg-name)" />
<node name="node" pkg="package" type="type" args="$(arg arg-name)" />
重映射<remap>
重映射ROS计算图资源的命名
<remap from="/turtlebot/cmd_vel" to="/cmd_vel" />
from:原命名 to:映射之后的命名
嵌套<include>
包含其他launch文件,类似C语言中的头文件包含
<include file="$(dirname)/other.launch">
file:包含的其他launch文件路径
2).TF坐标变换
机器人中的坐标变换
TF功能包能干什么
- 1).五秒钟之前,机器人头部坐标系相对于全局坐标系的关系是什么样的?
- 2).机器人夹取的物体相对于机器人中心坐标系的位置在哪里?
- 3).机器人中心坐标系相对于全局坐标系的位置在哪里?
TF坐标变换如何实现?
- 1).广播TF变换
- 2).监听TF变换
sudo apt-get install ros-kinetic-turtle-tfroslaunch turtle_tf turtle_tf_demo.launchrosrun turtlesim turtle_teleop_keyrosrun tf view_frames
命令行工具
rosrun tf tf_echo turtle1 turtle2
可视化工具
rosrun rviz rviz -d `rospack find turtle` /rviz/turtle_rviz.rviz
如何实现一个TF广播器
- 1).定义TF广播器(TransformBroadcaster)
- 2).创建坐标变换值
- 3).发布坐标变换(sendTransform)
如何实现一个TF监听器
- 1).定义TF监听器(TransformListener)
- 2).查找坐标变换(waitForTransform、lookupTransform)
3).Qt工具箱
- 日志输出工具---rqt_console
- 计算图可视化工具---rqt_graph
- 数据绘图工具---rqt_plot
- 参数动态配置工具---rqt_reconfigure
4).Rviz可视化平台
机器人模型、坐标、运动规划、导航、点云、图像、SLAM
Rviz是一款三维可视化工具,可以很好的兼容基于ROS软件框架的机器人平台
- a.在rviz中,可以使用XML对机器人、周围物体等任何实物进行尺寸、质量、位置、材质、关节等属性的描述,并且在界面中呈现出来。
- b.同时,rviz还可以通过图形化的方式,实时显示机器人传感器的信息、机器人的运动状态、周围环境的变化等信息
- c.总而言之,rviz通过机器人模型参数、机器人发布的传感信息等数据,为用户进行所有可监测信息的图形化显示。用户和开发者也可以在rviz的控制界面下,通过按钮、滑动条、数值等方式,控制机器人的行为
rviz界面包括 3D视图区、工具栏、显示项列表、视角设置区、时间显示区
rviz插件机制
5).Gazebo物理仿真环境
Features:Dynamics Simulation、Advanced 3D Graphics、Sensors and Noise、Plugins、Robot Models、TCP/IP Transport、Cloud Simulation、
Command Line Tools.
0:3D视图区 1:工具栏 2:模型列表 3:模型属性项 4:时间显示区
Gazebo是一款功能强大的三维物理仿真平台
- a.具备强大的物理引擎
- b.高质量的图形渲染
- c.方便的编程与图形接口
- d.开源免费
其典型应用场景包括:
- a.测试机器人算法
- b.机器人的设计
- c.显示情景下的回溯测试
- gazebo_ros:主要用于gazebo接口封装、gazebo服务端和客户端的启动、URDF模型生成等
- gazebo_msgs:是gazebo的Msg和Srv数据结构
- gazebo_plugins:用于gazebo的通用传感器插件
- gazebo_ros_api_plugin和gazebo_ros_path_plugin:这两个gazebo的插件实现接口封装
如何使用Gazebo进行仿真
- 1).创建仿真环境
- 2).配置机器人模型
- 3).开始仿真
总结
ros 发布信息频率_ROS入门笔记二基础相关推荐
- ros 发布信息频率_ROS 消息发布器和订阅器Publisher, Subscriber
1.编写发布器节点 节点(Node) 是指 ROS 网络中可执行文件.接下来,将会创建一个发布器节点("talker"),它将不断的在 ROS 网络中广播消息.切换到之前创建的 b ...
- ros 发布信息频率_ROS:消息发布器和订阅器(c++)
学习资料主要源自http://wiki.ros.org/ROS/Tutorials/WritingPublisherSubscriber%28c%2B%2B%29 $ roscd beginner_t ...
- ros 发布信息频率_RouterOS中wifi自动频率选择及发射功率设置
1. 在routeros中,wifi使用的频率设置说明 DFS的全称是Dynamic Frequency Selection,即自动频率选择,只有在DFS Mode设置为None时,Frequency ...
- MySql入门笔记二~悲催的用户
这些是当年小弟的MySql学习笔记,木有多么复杂的结构操作,木有多炫丽的语句开发,木有...总之就是木有什么技术含量... 日复一日,彪悍的人生伴随着彪悍的健忘,运维操作为王,好记性不如烂笔头,山水有 ...
- 机器学习入门 笔记(二) 机器学习基础概念
第二章 机器学习基础概念 1.机器的数据 2.机器学习的主要任务 3.监督学习和非监督学习 4.批量.在线学习.参数.非参数学习 5.哲学思考 6.环境的搭建 1.机器的数据 我们以鸢尾花的数据为例. ...
- 区块链安全入门笔记(二) | 慢雾科普
虽然有着越来越多的人参与到区块链的行业之中,然而由于很多人之前并没有接触过区块链,也没有相关的安全知识,安全意识薄弱,这就很容易让攻击者们有空可钻.面对区块链的众多安全问题,慢雾特推出区块链安全入门笔 ...
- 海思入门笔记二:HiBurn工具实现镜像烧写
这里写自定义目录标题 海思入门笔记:HiBurn工具实现镜像烧写 第一步:裸板可使用串口先烧录boot(速度慢) 第二步:已烧好boot的板子,可使用USB快速烧录 海思入门笔记:HiBurn工具实现 ...
- ubuntu卸载_ROS入门笔记(二):ROS安装与环境配置及卸载(重点)
1 ROS安装步骤 1.1 ROS版本 ROS目前只支持在Linux系统上安装部署, 它的首选开发平台是Ubuntu. 注:如果Ubuntu版本和ROS版本不对应的话,安装就不会成功了- 笔者使用的平 ...
- tensorflow 入门笔记(二)
Python3.0导入CIFAR-10数据集 前言 load_CIFAR10函数 调用cifar-10的数据集的数据 结果 前言 在搞完本科毕业设计之后终于有时间可以重新开始年前的关于深度学习的一些知 ...
最新文章
- 关于GitHub推送时发生Permission denied (publickey)的问题
- 世界经济增速统一放缓,网络拓扑发现统一增速
- MongoDB 2.6.4 主从同步
- 进化之路:线程池来帮忙,却好心办坏事
- The connection to adb is down
- 牛客21312 神秘餐馆
- 虚拟机 NAT模式与桥接模式的区别
- 在生产环境中使用 Sentinel
- 软件开发模型_QT开发(二十三)——软件开发流程
- android 获取当前时间_js如何获取当前时间并显示
- (35)FPGA面试题FPGA工程师努力的方向
- Redis学习总结(6)——Redis 高级特性与案例学习
- 特斯拉Model 3产能跟不上,是因为用了太多机器人
- 【软件工程】第一次阅读作业
- libcef-详细步骤-将cef浏览器嵌入到Win32中作为子窗口运行
- 尚硅谷JavaWeb笔记——Filter过滤器(了解过滤器,看着一篇就够了)
- element el-input特殊字符校验
- WS小世界网络构建实验(Matlab版)
- 树莓派安装图形化桌面系统及SD卡恢复方法
- Java并发包:ScheduledExecutorService
热门文章
- matlab toolbox 向量,mosek optimization toolbox for matlab提供的函数简介
- buck电路_2步避免BUCK电路中的“地弹”
- php全词查询,php 关键词查询的实现方法
- redisdemo php,一个简单的用redis做秒杀支撑的demo (PHP版)
- image 微信小程序flex_第三天学习微信小程序开发总结
- chrome vue 未响应_vue之骨架屏踩坑之路
- svn增量打包部署_实现Jenkins+svn+bat批处理构建svn版本差异增量的自动化打zip包
- Money 20/20 | 未来金融数字化转型:数字化半径与全栈式战略观
- DevOpsSOP 基于阿里云VPC搭建Storm+Kafka+Zookeeper集群
- jdbctemplate调用 mysql存储过程