————今早七点达到实验室,吃了早饭收拾了一下现在07:24开始学习————
1. RO2与ROS1的不同架构:
ROS1架构下,所有节点都是Master进行管理
ROS使用基于DDS的Discovery机制,和Master说再见
API的重新设计
编译系统升级:
ROS1使用rosbuild、catkin管理项目
ROS2使用升级版的ament、colcon
1.2打开终端:
按住Ctrl+Alt+T打开终端
运行乌龟项目:
打开终端:ros2 run turtlesim turtlesim_node
再打开一个终端 ros2 run turtlesim turtle_teleop_key
鼠标要停留在key这个终端里,才有效果 也证明ROS2安装没有问题
指令操作:
pwd:可以查看当前终端是对于什么目录下进行操作的
ls:当前路径下下都有哪些文件夹和文件
ls-A:显示隐藏文件 ctrl+H也可以显示隐藏文件
mkdir+文件名:创建文件夹,名字自己设定的 mkdir flag
cd 文件夹名称/ :进入该文件夹里面 cd flag
touch 名字.格式:在文件夹里面创建文件 touch flag.txt
删除这个文件:rm 文件 例如 rm flag.txt
cd ..回到上级目录
rm -R 文件名 就可以删除 rm _R flag
sudo apt install + 包的名字:安装各种功能包比如ROS功能包
sudo:提高到管理员权限 apt 应用 install:安装
Tab补全
ros2 node :可以查看后面可以接哪些节点 参数 ,会有详细的解释
输入一下list 可以查看当前有哪些节点正在运行
想要查看节点信息可以用info
ros2 topic :查看有哪些话题
command哪里都可以查看
ros2 topic echo /turtlesim_pose (Tab键补全)
theta:表示围绕z轴的角度垂直于片面向外
linear_velocity:线速度
angular_velocity:角速度
有个小插曲,复制粘贴时候大意了,要谨慎要小心更要认真
$ ros2 topic pub --rate 1 /turtle1/cmd_vel geometry_msgs/msg/Twist "{linear: {x: 2.0, y: 0.0, z: 0.0}, angular: {x: 0.0, y: 0.0, z: 1.8}}"
解释:ros2发布一个话题,频率为1s,控制速度的+类似数据结构+线速度和角速度的值
$ ros2 service call /spawn turtlesim/srv/Spawn "{x: 2, y: 2, theta: 0.2, name: ''}"
产生另外一只海龟
name后面随意接名字name'abc'也可以
ros2 topic pub --rate 1 /turtle2/cmd_vel geometry_msgs/msg/Twist "{linear: {x: 2.0, y: 0.0, z: 0.0}, angular: {x: 0.0, y: 0.0, z: 1.8}
输入上一级这个命令可以让小海龟画圆运动
话题相当于机器人控制接口
如果记录小海龟的移动数据则只需要
ros2 bag
ros2 bag record /turtle/cmd_vel
在主目录这个地方可以看到
指令 ros2 bag play 文件名 即可
2. 工作空间
2.1 工作空间:
是一个存放项目开发相关文件的文件夹;是开发过程的大本营
包括: src(代码空间) install(安装空间) build(编译空间) log(日志空间)
2.1.2 创建功能包:
$ cd ~/dev_ws/src
$ ros2 pkg create --build-type ament_cmake learning_pkg_c # C++
$ ros2 pkg create --build-type ament_python learning_pkg_python # Python
ros2 pkg create --build-type<build-type><package_name>
2.1.3 编译功能包
$ cd ~/dev_ws
$ colcon build # 编译工作空间所有功能包
$ source install/local_setup.bash
创建功能包要在这个功能下,选择在终端中打开,把上述命令输入进去,c++或者python都可以,
里面包含的文件内容不一样。
C++文件中有两个空文件 python比C++多两个文件
3. 节点:机器人的工作细胞
先在文件夹里写:colcon build 编译一下工作环境
1.ros2 run 包 节点
那为什么能打印出hello world这样的信息 可以通过VScode,找到功能包的这个节点的编程,若你自己编程完还需要配置环境,这个节点是源自包节点函数名
实现一个节点,代码的实现流程是这样做的:
编程接口初始化 rclpy
创建节点并初始化 from...import...再 init
实现节点功能 while...
销毁节点并关闭接口 node.destroy_node
节点里面有许多用处,ROS只是一个框架,具体内容还是要编程的 刚才分别做了open_cv的图像识别一个是静态的图片识别,另外一个是动态的摄像机识别
很神奇,很好玩。
4.话题
4.1 创建发布者的程序流程:
1.编程接口初始化
创建节点并初始化
创建发布者对象
创建并填充话题消息
发布话题消息
销毁节点并关闭接口
4.2 订阅者程序流程
编程接口初始化
创建节点并初始化
创建订阅者对象
回调函数处理话题数据
销毁节点并关闭接口
4.3 话题:
有pub还有sub 做了一个摄像头检测识别苹果的例子
5.服务:
你问我答的一种机制
5.1 创建服务客户端的程序流程:
编程接口初始化
创建节点并初始化
创建客户端对象
创建并发送请求数据
等待服务器端应答数据
销毁节点并关闭接口
5.2 创建服务服务端的程序流程:
编程接口初始化
创建节点并初始化
创建服务端对象
通过回调函数处进行服务
向客户端反馈应答结果
销毁节点并关闭接口
————学的好慢 回寝室 21:38————