ROS学习入门基础

记录学习ROS的学习过程!
参考视频:https://www.bilibili.com/video/BV1zt411G7Vn?p=6

一丶背景介绍

ROS社区功能包,可进行二次开发。

Powering the word’s robots 机器人领域的普遍标准
在这里插入图片描述
提高机器人研发中的软件复用率!

资源:
ROS wiki:记录ROS信息文档的主要论坛
邮件列表(Mailing list):交流ROS更新的主要渠道
ROS Answers :咨询ROS相关问题的网站
博客:htttp://www.ros.org/news

二丶核心概念

1.通信机制

在这里插入图片描述
松耦合分布式软件框架,可以分布式完成节点,使用统一的通信标准。

  • 节点(Node)—— 执行单元
    执行具体任务的进程、独立运行的可执行文件;
    不同节点可使用不同的编程语言,可分布式运行在不同的主机;
    节点在系统中的名词必须是唯一的。

  • 节点管理器(ROS Master)—— 控制中心
    为节点提供命名和注册服务;
    跟踪和记录话题/服务通信,辅助节点相互查找、建立连接
    提供参数服务器,节点使用此服务器存储和检索运行时的参数。
    在这里插入图片描述

  • a) 话题通信

    • 话题 —— 异步通信机制
      节点间用来传输数据的重要总线;
      使用发步/订阅模型数据由发布者传输到订阅者,同一个话题的订阅者或发布者可以不唯一。
    • 消息 —— 话题数据
      具有一定的类型和数据结构,包括ROS提供的标准类型和用户自定义类型;
      使用编程语言无关的,msg文件定义,编译过程中生成对应的代码文件。
      在这里插入图片描述
  • b) 服务通信

    • 服务 —— 同步通信机制
      使用客户端/服务器(C/S)模型,客户端发送请求数据,服务器完成处理后返回应答数据;
      使用编程语言无关的,srv文件定义请求和应答数据结构,编译过程中生成对应的代码文件。 在这里插入图片描述

2.参数

  • 参数 —— 全局共享字典
    可通过网络访问的共享、多变量字典;
    节点使用此服务器来存储和检索运行时的参数;
    适合存储静态、非二进制的配置参数,不适合存储动态配置的数据。
    在这里插入图片描述

3.文件系统

  • 功能包:ROS软件中的基本单元,包含节点源码、配置文件、数据定义等
  • 功能包清单:记录功能包的基本信息,包含作者信息、许可信息、依赖选项、编译标志等
  • 元功能包:组织多个用于同一目的功能包
    在这里插入图片描述

三丶命令行工具的使用

1.以小海龟为例

启动节点管理器(ROS Master)

 roscore

运行学习功能包中的小海龟节点

 rosrun turtlesim turtlesim_node 

运行键盘控制节点

 rosrun turtlesim turtle_teleop_key 

在这里插入图片描述
显示系统计算图的工具

rqt_graph 

在这里插入图片描述

2.rosnode

显示系统所有节点相关信息的指令
在这里插入图片描述

列出系统中所有的节点
在这里插入图片描述
其中 rosout 采集所有节点的日志信息,提交显示,默认的话题。

列出某个节点的信息
在这里插入图片描述

3.rostopic

在这里插入图片描述
使用rostopic给小海龟发布信息
在这里插入图片描述
话题名 + 消息结构(Twist) + 具体数据(Linear 线速度 + angular 角速度)
但pub指令只会发布一次,因此小海龟只会运动一次,
添加频率 -r 10,每秒十次。
在这里插入图片描述

4.rosmsg

查看消息数据结构
在这里插入图片描述

5.rosservice

在这里插入图片描述
再添加一只海龟!(过年了!)

 rosservice call /spawn "x: 3.0
y: 3.0
theta: 0.0
name: 'like'" 

在这里插入图片描述
通过 rostopic list 看查看到第二只海龟,也可以控制第二只海龟
在这里插入图片描述

6.话题记录

记录当前系统中所有话题数据,并在下次复现。
在这里插入图片描述
其中 -a 是代表记录所有数据(all),-O是保存成压缩包的形式,后面是名称。默认保存在home文件夹下。

但是在查看.bag文件时,发现只出现.bag.active文件,查找原因可能是电脑在记录信息是没有完成最终录制,虽然可以转换成.bag文件,但是会有部分消息的丢失。

#切换到”xxx.bag.active”文件所在的目录下
rosbag reindex cmd_record.bag.active
rosbag fix cmd_record.bag.active cmd_record.abg

在第二步结束后,除了原来的以.bag.active为后缀的文件之外,还会生成一个以.bag.org.active为后缀的文件,注意该文件只是中间文件,第三部输入的时候不要对该文件进行修复。在第三步结束之后,会生成正常的.bag文件。
在这里插入图片描述

参考博客:https://blog.csdn.net/Tansir94/article/details/81513517

四丶创建工作空间

工作空间是一个存放工程开发相关文件的文件夹。

  • src:代码空间
  • build:编译空间
  • devel:开发空间
  • install:安装空间

1.创建工作空间

mkdir -p ~/catkin_ws/src
cd ~/catkin_ws/src
catkin_init_workspace

2.编译工作空间

cd ~/catkin_ws/
catkin_make

3.设置环境变量

source devel/setup.bash

4.检查环境变量

echo $ROS_PACKAGE_PATH

在这里插入图片描述

五丶创建功能包

放置ros源码最小单元,所有源码必须放在功能包中,并不能直接在src中。

catkin_create_pkg <package_name> [depend1][depend2][depend3]

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.创建功能包

cd ~/catkin_ws/src
catkin_create_pkg learning_topic roscpp rospy std_msgs geometry_msgs turtlesim

2.编写cpp文件
在这里插入图片描述
3.配置发布者代码编译规则

如何配置CmakeLists.txt的编译规则

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

4.编译并运行发布者

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

永久配置环境 Ctrl+h 显示隐藏文件 修改 .bashrc
source /home/like/catkin_ws/devel/setup.bash

在这里插入图片描述

七丶订阅者Subscriber的编程实现

在这里插入图片描述

1.编写cpp文件*

在这里插入图片描述
2.配置发布者代码编译规则

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

在这里插入图片描述

八丶话题消息的定义与使用

在这里插入图片描述

1.自定义话题消息

➢ 定义msg文件;
在这里插入图片描述
➢ 在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)

➢ 编译生成语言相关文件

2.创建发布者代码

在这里插入图片描述

3.创建订阅者代码

在这里插入图片描述

4.配置编译规则

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)

5.编译并运行

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

在这里插入图片描述

九丶客户端Client的编程实现

在这里插入图片描述
1.创建功能包

cd ~/catkin_ws/src
catkin_create_pkg learning_service roscpp rospy std_msgs geometry_msgs turtlesim

2.编写cpp代码
在这里插入图片描述
3.配置编译规则

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.编写Server代码
在这里插入图片描述
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.自定义服务数据
➢ 定义srv文件;
在这里插入图片描述
➢ 在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.编写程序代码
在这里插入图片描述
在这里插入图片描述
3.配置编译环境

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)

4.编译并运行

 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
# 列出当前多有参数
 rosparam list
# 显示某个参数值
 rosparam get param_key
# 设置某个参数值
 rosparam set param_key param_value
# 保存参数到文件
 rosparam dump file_name
# 从文件读取参数
 rosparam load file_name
# 删除参数
 rosparam delete param_key

3.编程实现方法

在这里插入图片描述
4.配置编译规则

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

5.编译并运行

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

十三丶ROS中的坐标系管理系统

1.机器人坐标变换
在这里插入图片描述

1.小海龟跟随实验

 #sudo apt-get install ros-melodic-turtle-tf 
 sudo apt-get install ros-kinetic-turtle-tf
 roslaunch turtle_tf turtle_tf_demo.launch
 rosrun turtlesim turtle_teleop_key
 rosrun tf view_frames

在这里插入图片描述
2.查树中任意两个坐标系之间的关系

rosrun tf tf_echo turtle1 turtle2

在这里插入图片描述

3.可视化工具

 rosrun rviz rviz -d `rospack find turtle_tf`/rviz/turtle_rviz.rviz

在这里插入图片描述

十四丶TF坐标系广播与监听的编程实现

1.创建功能包

 ~/catkin_ws/src
 catkin_create_pkg learning_tf roscpp rospy tf turtlesim

2.编写程序代码
在这里插入图片描述
在这里插入图片描述
2.配置编译规则

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

3.编译并运行

 cd ~/catkin_ws
 catkin_make
 source devel/setup.bash
 roscore
 rosrun turtlesim turtlesim_node
 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启动文件的使用方法

Launch文件:通过XML文件实现多节点的配置和启动(可自动启动ROS Master)
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

⚫ROS : https://www.ros.org
⚫ROS Wiki : http://wiki.ros.org/
⚫ROSCon 2012 ~ 2019 : https://roscon.ros.org
⚫ROS Robots : https://robots.ros.org/
⚫Ubuntu Wiki : https://wiki.ubuntu.org.cn
⚫古月居 :http://www.gyh.ai
⚫zhangrelay的专栏 :https://blog.csdn.net/ZhangRelay
⚫易科机器人实验室:http://blog.exbot.net/
⚫开源机器人学学习指南:https://github.com/qqfly/how-to-learn-robotics

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

秃头队长

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值