文章目录
- 一、简介
- 二、安装虚拟机与ROS系统安装
- 三、ROS系统安装
- 四、ROS应用商城APT源
- 五、GIthub
- 六、安装vscode
- 七、超级终端Terminator
- 八、Node节点与Package包
- 九、写一个Node节点
- 十、Topic话题与Message消息
- 十一、Publisher 发布者和Subscriber 订阅者的实现
- 十二、使用launch文件启动多个节点
- 十三、发布者节点的应用:底盘运动控制
- 十四、激光雷达
- 十五、使用Rviz观测传感器数据
- 十六、激光雷达消息包数据格式
- 十七、订阅者节点的应用:获取激光雷达数据
- 十八、节点发布+订阅的应用:激光雷达避障
- 十九、IMU惯性测量单元消息包
- 二十、订阅者节点应用:获取IMU数据的节点
- 二十一、节点发布+订阅的应用:IMU航向锁定
- 二十二、ROS消息包
- 二十三、ROS中栅格地图格式
- 二十四、发布者节点应用:发布地图数据
- 二十五、slam
参考视频:机器人操作系统 ROS 快速入门教程
一、简介
手机界的安卓操作系统就和机器人界的ros操作系统一样,向上可以扩展不同应用,向下可以适应不同的硬件设备
模块化、分布式的系统设计
-
模块化:ros中每个.lanuch文件相当于一个机器人,每个node节点相当于一个模块
-
分布式:可以使用多个计算机(实际上是cpu)来处理不同模块的计算任务
ros操作系统要跑在运算能力强的芯片上,例如瑞芯微、树莓派、电脑等,通过数据链路(usb、串口)与单片机进行通信传输指令与数据,在ros的应用中开发能够进行串口通信的node,例如GMapping(建图)、Move_base(自主导航)

二、安装虚拟机与ROS系统安装
虚拟机的缺点
- 运行效率低【两个系统之间隔着虚拟机】
- 调用宿主硬件的方法比较繁琐【利用宿主电脑的显卡GPU进行CUDA加速,映射操作比较复杂】
安装ubuntu20.04
一些注意点:
-
关于20.04版本:
- 可以在这个页面下载:
https://releases.ubuntu.com/20.04.5,选“64-bit PC (AMD64) desktop image”版本
- 可以在这个页面下载:
-
修改分辨率
- 因为分辨率看不见按钮,通过命令行修改分辨率
- 按Ctrl+Alt+T,出现终端窗口,然后在终端窗口输入命令:
- xrandr -s 1280x800后回车(需要注意的是1280和800中间的x是字母x)

-
安装过程跳过更新

-
虚拟机备份
- 备份虚拟机,避免一些问题重复安装虚拟机
- 查看克隆虚拟机章节
-
安装vmware tools工具
- 安装步骤
- 注意:由于文件夹由于容量过小,不能在这个文件夹解压,需要将文件夹移动到用户目录下
-
Ubuntu20.04使用过程中总是弹出检测到系统程序出现问题的解决方法
-
Ubuntu已安装VMware Tools仍无法粘贴复制主机文件夹
-
刚建立好的linux虚拟机使用NAT方式可以连接外网,系统重启几次,系统无法上网,这是什么问题导致的呢?
- 解决ubuntu20.04虚拟机无法上网的问题
sudo dhclient -v动态分配地址,但是每次开机都需要执行该指令
其他教程:
三、ROS系统安装
切换镜像源
- 要知道当前系统的代号,可以用以下命令:
lsb_release -a
关于无法保存只读文件问题,可以在home目录下创建好该文件然后复制过去
- 刷新列表,一定要执行刷新
sudo apt-get update//必须执行
sudo apt-get upgrade//非必须执行
视频教程
四、ROS应用商城APT源
简介与指令介绍
ubuntu有自带的下载源,到指定的应用商城下载软件包
ROS官方应用商城网站:index.ros.org
添加不同的源,就类似于添加不同的应用商城
下载指令格式:
suod apt install ros-noetic-软件包名称
软件包需要ros系统启动起来才能使用,另外开终端输入
roscore
运行软件包指令
rosrun 包的名称 节点的名称
案例
安装如下两个软件包进行测试
sudo apt install ros-noetic-turtlesim
sudo apt install ros-noetic-rqt-robot-steering
运行两个软件包
rosrun turtlesim turtlesim_node
rosrun rqt_robot_steering rqt_robot_steering
输入框中可以修改速度发送的主题名称

ros应用商城介绍


点击软件包的名称可以查看详细信息,例如源代码存放位置是github
右侧的website内有软件包的使用细节介绍

五、GIthub
在github中下载的是源码,没有编译,需要在本地编译,编译时有指定的文件格式,所以需要建立一个工作空间,所谓的工作空间就是符合某种要求的目录结构,编译器会安装这个目录结构去检索源代码,完成编译工作
建立如下目录结构:

安装git与克隆软件包
sudo apt install git
在src目录下克隆软件包
git clone https://github.com/6-robot/wpr_simulation.git
执行安装依赖包的脚本
下载后的目录结构中有scripts目录,【用于放置脚本文件,执行脚本可以为下载安装和编译需要用到的依赖项,为实体机器人映射端口】,根据ros版本执行不同的脚本,此类操作只需要执行一次

./install_for_noetic.sh
编译
cd ~/catkin_ws
catkin_make
注意:该指令(catkin_make)只能在catkin_ws路径下,会对src里面的源代码进行编译
编译完成后会得到如下几个文件

然后是将catkin_ws工作空间里面的环境变量加载到终端里面,使用source指令载入工作空间的环境设置
source ~/catkin_ws/devel/setup.bash
使用roslaunch运行编译好的ros程序
roslaunch wpr_simulation wpb_simple.launch

通过上面安装的速度控制工具可以控制机器人运动,运行软件包
rosrun rqt_robot_steering rqt_robot_steering
通常会把设置工作空间环境参数的source指令放到终端启动的初始化脚本文件bashrc中
gedit ~/.bashrc
在最末尾添加
source ~/catkin_ws/devel/setup.bash
在终端输入
source ~/.bashrc
六、安装vscode
下载后的路径在
/home/fang/下载
执行解压
sudo dpkg -i 压缩包名称
运行vscode
code
在vscode软件中将/home/fang/catkin_ws/src添加为工作空间
安装插件:
- chinese
- ros(会顺带安装c++和python等插件)

- cmake(安装CMake Tools会自动安装CMake)

- bracket【vscode已经内置了,无须安装】
- C/C++ Extension Pack【它包含了 vscode 编写 C/C++ 工程需要的插件(C/C++、C/C++ Themes、CMake、CMake Tools和Better C++ Syntax等)】
其他插件:地址
设置编译快捷键:
按下:ctrl+shift+b
选择第一项:

此时编译工作空间里面的软件包
当然也可以设置第一项为默认编译选择,点击右侧齿轮按钮
此时工作目录中出现的tasks.json文件,修改group选项

设置拼写错误检查
-
出现头文件引用问题是,c/c++插件没有找到,删除左侧的c__cpp_properties.json文件,然后关闭vscode再打开,此时ros插件会初始化,会修改c__cpp_properties.json文件,自动将头文件添加到路径中
-
特殊情况:ros插件无法识别,则需要手动关闭报错,按住ctrl+shift+p,输入:error squiggles,选择禁用错误波形曲线,此时左侧会多一个setting.json文件, 如果要启动检查则改为true

七、超级终端Terminator
安装Terminator
sudo apt install terminator
ctrl+AIT+T启动Terminator,在运行其他任务的时候可以分割界面

快捷键
- ctrl+shifr+E:分割为左右
- ctrl+shifr+O:分割为上下
- ALT+方向键:切换焦点窗口
- ctrl+shifr+W:删除刚刚切割的窗口
注意:ctrl+shifr+E可能会激活ubuntu输入法的符号模式,需要取消输入法对该快捷键的占用,终端输入:ibus-setup,删除该快捷键的占用,操作步骤如下


八、Node节点与Package包
基本单元:node
一个机器人由多个节点组成

节点的组织形式:package
使用apt下载的,虽然只使用了一个软件包里面的某些节点的功能,但是下载的还是整个软件包(package)

ros采用cmake和catkin作为编译工具,引入了package的概念(ros中各个节点采用模块化的思想),可以将各个节点的关联性进行分类,一次只安装一个包(一组节点),此时包可以理解为节点的容器
九、写一个Node节点
创建超声波节点的软件包
进入catkin_ws/src目录:
catkin_create_pkg ssr_pkg rospy roscpp std_msgs
catkin_create_pkg指令:
catkin_create_pkg <包名> <依赖项列表>
ps:依赖项是通用的依赖项,也可以成为
通用节点
- rospy:ros和python结合
- roscpp:ros和cpp结合
- std_msgs :标准消息
此时会创建两个文件,两个目录

ps:
- 凡是catkin软件包里面一定含有package.xml
- CMakeLists.txt是指令和注释,可以作为编译项进行复制,避免写错,##表示注释 ,#表示指令
roscd指令
该指令可以在终端中进入指定软件包的文件地址

路径:/opt/ros/noetic/share/roscpp 里面都是软件包,来源于安装ros的desktop-full基础包或独立扩展包
catkin_ws工作空间中的软件包则是源码,而在此目录下是可执行文件在bashrc中
source /opt/ros/noetic/setup.bash和source ~/catkin_ws/devel/setup.bash就分别是软件包的两个安装空间
创建超声波node节点
在srv目录下创建chao_node.cpp文件
#include <ros/ros.h>
int main(int argc, char *argv[])//argv没有const
{
/* code */
ros::init(argc,argv,"chao_node");//节点初始化后才能与ros系统产生连接,才能调用ros的核心功能
printf("hello world");
//节点启动后一直运行,true可以替换为ros::ok()函数,避免节点不响应任何外部信号,例如ctrl+c
while(ros::ok()){
printf("hhhhh");
}
return 0;
}
为新建节点添加编译规则
打开CMakeLists.txt,添加如下两条
# 为这个包的节点添加可执行指令
# 前一项:指定可执行文件的名字,可以和节点名保持一致
# 后一项:指定从哪个代码文件进行编译
add_executable(chao_node src/chao_node.cpp)
# 链接ros::init函数所在的库文件
target_link_libraries(chao_node
${
catkin_LIBRARIES}
)
运行节点
- 启动roscore
- 终端输入:rosrun ssr_pkg chao_node
rosrun <包名> <节点文件名>
十、Topic话题与Message消息
Topic 话题
- 话题Topic是节点间进行持续通讯的一种形式
- 话题通讯的两个节点通过话题的名称建立起话题通讯连接话题中通讯的数据,叫做消息Message
- 消息Message通常会按照一定的频率持续不断的发送,以保证消息数据的实时性
- 消息的发送方叫做话题的发布者Publisher。
- 消息的接收方叫做话题的订阅者Subsciber。
- 一个ROS节点网络中,可以同时存在多人话题
- 一个话题可以有多个发布者,也可以有多个订阅者2
- 一个节点可以对多个话题进行订阅,也可以发布多个话题
- 不同的传感器消息通常会拥有各自独立话题名称,每个话题只4有一个发布者。
- 机器人速度指令话题通常会有多个发布者,但是同一时间只能有一个发言人。
一个话题多个发布者的情况是存在的,例如底盘驱动需要速度指令,该指令可以由跟踪或者导航节点发布,注意的是要控制发布的顺序

Message 消息
不同的消息包有不同的消息类型,标准消息包std_msgs就包含多个基本消息类型
可以将消息类型理解为C语言中的结构体
十一、Publisher 发布者和Subscriber 订阅者的实现
Publisher 发布者的实现
chao_node.cpp
- 确定话题名称和消息类型
- 在代码文件中include消息类型对应的头文件
- 在main函数中通过NodeHandler大管家发布一个话题并得到消息发送对象。
- 生成要发送的消息包并进行发送数据的赋值
- 调用消息发送对象的publish()函数将消息包发送到话题当中。
#include <ros/ros.h>
#include<std_msgs/String.h>
int main(int argc, char *argv[])
{
/* code */
ros::init

2万+




被折叠的 条评论
为什么被折叠?



