Ubuntu20.04下ROS的安装与配置,话题通信、服务通信的编程实践验证
一、ROS的安装
1. 1设置软件源
设置软件源为国内的服务器,建议我这里使用的是阿里云服务器。
设置过程如下图所示:打开系统设置,拉倒最低端,点击关于菜单,点击软件更新,选择下载服务器,选择aliyun。
确认后,提示“重新载入”。点击“重新载入”按钮,等待更新完成。
1.2安装ROS noetic
1.2.1添加 sources.list
设置系统从 packages.ros.org 接收软件,命令如下:
sudo sh -c ‘echo “deb http://packages.ros.org/ros/ubuntu $(lsb_release -sc) main” > /etc/apt/sources.list.d/ros-latest.list’
按提示输入密码回车即可,注意,密码不会显示,不要按Backspace键,如果输入错误,回车重新输入即可。
1.2.2设置keys
命令如下:sudo apt-key adv --keyserver ‘hkp://keyserver.ubuntu.com:80’ --recv-key C1CF6E31E6BADE8868B172B4F42ED6FBAB17C654
设置成功后,输出显示:
gpg: 合计被处理的数量:1
gpg: 已导入:1
1.2.3更新系统软件源
输入命令:sudo apt update
1.2.4安装noetic
输入命令安装noetic桌面完整版:
sudo apt install ros-noetic-desktop-full
软件包比较大,可能要等一段时间。
耐心等待即可
如果出现软件包无法下载,可返回第1步切换软件源,或者切换网络连接试试。
1.2.5设置环境变量
输入以下命令,设置环境变量。
echo “source /opt/ros/noetic/setup.bash” >> ~/.bashrc
source ~/.bashrc
二、 测试ROS与运行小海龟
运行roscore
输入命令,运行ros,可显示ros的相关信息:
输入roscore
输出信息部分如下:
…logging to /home/ddduan/.ros/log/73c1f360-6103-11ed-8ddf-996439fcd44d/roslaunch-DDDuan-Lenovo-PC-5841.log
Checking log directory for disk usage. This may take a while.
Press Ctrl-C to interrupt
Done checking log file disk usage. Usage is <1GB.
started roslaunch server http://DDDuan-Lenovo-PC:44705/
ros_comm version 1.15.14
这是程序自检,检查日志目录的磁盘使用情况,然后进行总结,比如这里,给出了参数,进程等信息,表示无错。
新打开一个终端窗口,输入命令,运行小海龟示例程序。
rosrun turtlesim turtlesim_node
可以看到小海龟窗口显示出来。
再打开一个终端窗口,输入命令,控制小海龟移动。
rosrun turtlesim turtle_teleop_key
保持这个终端窗口激活,按下键盘的方向键,就可以移动小海龟了。
运行小海龟,保持键盘的焦点在rosrun turtlesim turtle_teleop_key的终端页面内,通 过↑、↓、←、→来控制小乌龟的移动,而且可以看到,在小海龟“撞墙”的时候,我们的rosrun turtlesim turtlesim_node终端页面会有提示数据的输出。
三、ros系统常见用法介绍
启动ros内核
roscore
查看topic列表
rostopic list
显示某个topic
rostopic echo /camera_raw
显示某个topic的header
rostopic echo /camera_raw/header
将compressed格式转为raw格式
rosrun image_transport republish compressed in:=/Mate/camera/ raw out:=/Mate/camera_raw/
限制topic频率
rosrun topic_tools throttle messages /Mate/camera_raw 4.0 /left
录制rosbag包
rosbag record -O bagpath.bag /camera_raw /imu
播放与加速播放rosbag
rosbag play -r 100 bagpath.bag
rosbag play bagpath.bag
启动rviz
rviz
四、ROS通信
ROS的核心——分布式通信机制
ROS是一个分布式框架,为用户提供多节点(进程)之间的通信服务,所有软件功能和工具都建立在这种分布式通信机制上,所以ROS的通信机制是最底层也是最核心的技术。在大多数应用场景下,尽管我们不需要关注底层通信的实现机制,但是了解其相关原理一定会帮助我们在开发过程中更好地使用ROS。ROS最核心的三种通信机制如下。
- Topic机制
- service机制
- 共享参数机制
4.1话题通信
话题通信,一般就是指:一个节点发布消息,另一个节点订阅该消息。适用于不断更新的、少逻辑处理的数据传输场景。
1.话题通信的三个角色
话题通信涉及到三个角色。
Talker(发布者)
负责像订阅者发布数据。
Listener(订阅者)
负责接收发布者的数据。
ROS Master(管理者)
负责保管发布者和订阅者注册的信息,并匹配话题相同的发布者与订阅者,帮助发布者与订阅者建立连接。
2.话题通信建立的流程
下图就是话题通信建立的示意图,摘抄自课程笔记。
step0:
发布者在管理者处注册,其中包含所发布消息的话题名称。管理者会将节点的注册信息加入到注册表中。
step1:
订阅者在管理者处注册,包含需要订阅消息的话题名称。管理者会将节点的注册信息加入到注册表中。
step2:
管理者根据注册表中的发布者、订阅者的话题名称进行匹配,并将发布者的地址信息告诉订阅者。
step3:
订阅者向发布者发送连接请求,传输订阅的话题名称、消息类型以及通信协议(TCP/UDP)。
step4:
发布者响应订阅者的请求,并发送自身的 TCP 地址信息。
step5:
订阅者根据步骤4