你可以重新安装镜像,不过并不推荐这样。
小强自带的软件都是通过git去管理的,你可以到对应的软件文件夹内执行git stash来恢复。
ROS Group 产品服务
Product Service 开源代码库
Github 官网
Official website 技术交流
Technological exchanges 激光雷达
LIDAR ROS教程
ROS Tourials 深度学习
Deep Learning 机器视觉
Computer Vision
weijiz 发布的帖子
-
Ubuntu 16.04 systemback生成镜像文件无法安装grub的问题
在用systemback制作镜像安装时,会发现无法安装grub,grub的选项是disabled。这是由于系统缺少grub相关的软件包。
安装对应的软件包即可解决。sudo apt-get install grub sudo apt-get --reinstall install grub-pc
Enjoy it
-
小强自检程序发布
为了方便各位用户使用小强,我们开发了小强的自检程序。当小强无法正常工作时可以通过这个程序获取到有用的信息,方便调试和解决问题。
安装方法
使用
xq_os
的用户可以通过bwupdate
指令安装。使用旧版本系统的用户需要先安装xiaoqiang-cmds
软件包。安装方法可以参照这里.使用方法
执行
bwcheck
输出结果如下
xiaoqiang@xiaoqiang-desktop:~$ bwcheck ██████╗ ██╗ ██╗ ██╗███████╗██╗ ██╗██╗ ██╗ █████╗ ██╗ ███████╗ ██╔══██╗██║ ██║ ██║██╔════╝██║ ██║██║ ██║██╔══██╗██║ ██╔════╝ ██████╔╝██║ ██║ ██║█████╗ ██║ █╗ ██║███████║███████║██║ █████╗ ██╔══██╗██║ ██║ ██║██╔══╝ ██║███╗██║██╔══██║██╔══██║██║ ██╔══╝ ██████╔╝███████╗╚██████╔╝███████╗╚███╔███╔╝██║ ██║██║ ██║███████╗███████╗ ╚═════╝ ╚══════╝ ╚═════╝ ╚══════╝ ╚══╝╚══╝ ╚═╝ ╚═╝╚═╝ ╚═╝╚══════╝╚══════╝ 系统版本: Ubuntu 16.04 XQOS 2 检查软件系统中... 检查环境变量 ROS_MASTER_URI ... WARNING 警告: ROS_MASTER_URI最好应当是http://xiaoqiang-desktop:11311 请注意是否执行过 export ROS_MASTER_URI=http://xiaoqiang-desktop:11311 ROS_PACKAGE_PATH ... OK addwa_local_planner ... OK autoWifi ... OK BwbotCenter ... OK bwbotupdater ... OK cam_auto_brightness ... OK freenect_stack ... OK iai_kinect2 ... OK image_pipeline ... OK joystick_drivers ... OK libuvc_ros ... OK nav_test ... OK NLlinepatrol_planner ... OK openslam_gmapping ... OK orb_init ... OK ORB_SLAM ... OK ORB_SLAM2 ... OK rgbd_launch ... OK robot_arm ... OK rplidar_ros ... OK rqt_common_plugins ... OK SharpLink ... OK slam_gmapping ... OK startup ... OK stm32loader ... OK system_monitor ... OK turtlebot_apps ... OK turtlebot_msgs ... OK usb_cam ... OK web_video_server ... OK xiaoqiang_udrf ... OK xqserial_server ... OK audio_common ... OK cartographer_ros ... OK geometry ... OK geometry2 ... OK navigation_msgs ... OK robot_upstart ... OK turtlebot ... OK turtlebot_apps ... OK turtlebot_msgs ... OK laser_filters ... OK navigation ... OK bwbot_check ... OK 检查hosts文件 ... OK 检查hostname ... OK 检查95-persistent-serial.rules文件 ... OK 检查startup服务程序 ... OK 检查硬件中... 检查底盘驱动程序 ... ERROR 错误: 底盘驱动程序没有启动 检查底盘串口设备 ... ERROR 错误: 未发现底盘串口设备 检查摄像头驱动程序 ... ERROR 错误: 摄像头驱动程序未启动 检查摄像头设备 ... ERROR 错误: 未发现摄像头设备 检查kinect ros驱动程序 ... ERROR 错误: kinect ros 驱动未启动 检查kinect设备 ... ERROR 错误: 未发现kinect设备 检查电池电压 ... ERROR 错误: 获取电池电压失败
根据错误提示就能找到小强出现异常的原因了。
-
Ubuntu 16.04 x11vnc在无显示器的时候很卡的解决方法
在Ubuntu 16.04上使用x11vnc作为vnc服务器的时候,发现非常的卡。但是一旦插上显示器之后就正常了。在网上搜索也没有找到解决方案。最后终于通过Xorg的log找到了原因。
在
/var/log/Xorg.0.log
文件中发现提示无法加载intel
,fbdev
,vesa
模块。
然后安装这几个软件包就可以了sudo apt-get install xserver-xorg-video-vesa xserver-xorg-video-intel xserver-xorg-video-fbdev
之后就可以了。如果你遇到了类似的问题根据log的提示安装对应的软件包就可以了。
-
ros launch中的节点工作空间路径
在launch文件中启动节点,那么这个节点的工作目录是什么呢?在node程序中如果创建一个文件,这个文件的默认位置在哪里?
在launch中node节点有一个cwd参数,按照文档的解释,这个参数可以为ROS_HOME或node。当设置为ROS_HOME时,cwd为ROS_HOME参数指定的位置。当设置为node时就是对应node所在的位置。但是如果你echo $ROS_HOME
时会发现这个值没有设置。当你进入node源文件所在的位置时你会发现没有刚生成的文件。实际上当把cwd设置为ROS_HOME时,默认的cwd是
~/.ros
。当cwd设置成node时默认的位置是node所在的workspace的devel文件夹内。以小强为例,image_view video_recoder默认的文件保存路径就在/home/xiaoqiang/Documents/ros/devel/lib/image_view
内 -
如何解决百度云下载慢的问题
百度云下载大文件很慢。这时候可以获取下载连接后用迅雷下载。
获取下载链接的方法
找一个Linux的系统中的浏览器。打开共享链接,然后点击下载,之后就可以直接在浏览器中下载了。
以小强系统为例。我们可以先vnc进小强系统
用浏览器打开共享连接
点击下载按钮
这时候看到已经在浏览器下载了。但是这样速度还是不快。可以把下载链接复制到迅雷里。
可以看到速度快很多。
-
蓝鲸ROS镜像发布
本文列出所有已发布的蓝鲸ROS系统镜像,用户可以根据自己需要进行选择。
蓝鲸ROS是蓝鲸智能机器人公司在Ubuntu ROS的基础上进行修改而制作的ROS系统镜像。其中包含了ROS系统和常用的一些ROS软件包。非常适合ROS学习和开发人员使用。系统安装完成后不需要再安装配置ROS,即可直接使用。蓝鲸ROS也是小强的系统镜像,可以安装在小强上直接使用。对于实体小强机器人,重装系统后请根据这篇教程完成后续配置。https://community.bwbot.org/topic/2939/如何在重装系统后恢复xiaoqiang设置
注意在虚拟机上安装推荐使用Vmware Player
系统配置要求
内存最低1.5G推荐2G
存储空间至少30GNoetic 最新版本
xq4 pro 和xq5通用版本:xiaoqiang-noetic_2021-11-12.iso 下载地址
版本
xq5-noetic_2020-10-29
下载地址版本
xq5-noetic_2020-07-16
下载地址
md5: 3EF9EE329283B3009B22EF1E7C9A856D已知问题:
在未插显示器和视频转接头的情况下VNC远程会黑屏。这个是Gnome的问题,无法很好的解决。
如果想在无显示器和转接头情况下VNC访问可以试试这里的方法。这个方法也有一些问题,比如无法播放声音。Kinetic 最新版本
版本
xq_os_v2.0.10-2018-11-08.iso(kinetic版本)
可以在小强Pro上使用,也可以在自己电脑上使用
下载地址
md5: 6E093DDF851852C50316F86A279DB22B说明:
注意此镜像更改了默认的udev规则,设备和usb端口绑定。串口插在对应的USB位置上才能识别。如果安装完成镜像后无法遥控,查看/dev文件夹下是否有ttyUSB001,如果没有则把U转串换一个USB接口。直到出现为止。
增加奥比中光支持版本
xq_os_v2.0.11_xq5-2019-12-21.iso.
(kinetic版本)
可以在XQ5上使用,也可以在自己的电脑上使用
下载地址
md5: 1E9DB219A28936CA2366BAB2CC4D41F9版本
xq_os_v2.0.7_mini_2019_01_15.iso(kinetic版本)
可以在小强mini上使用,也可以在自己电脑上使用
下载地址
md5: 4A37DA0FCC09866615A5CAEBE91B4CE9Jade最新版本
版本
xq_os_v1.0.3_2017-10-31
可以在小强Pro上使用,也可以在自己电脑上使用
下载地址
md5: afbf1c8026733c4f8063778846c84e9b版本
xq_os_v1.0.4_mini_2017-11-17
只能在mini上使用
下载地址
md5: e874c78088211dff3feabd92f86275e7注意事项
下载完成之后一定要做一下md5的检查,确认文件完整性
注意安装时的用户名只能是xiaoqiang,否则会有问题镜像安装方法
在虚拟机中安装
打开虚拟机软件,这里使用的是Virtualbox。下载地址
点击创建按钮,开始创建虚拟机
注意在系统选择列表中选择Ubuntu 64
按照图上设置,完成后点击下一步
内存建议设置成2G,内存太小可能会导致无法启动
设置完成后,点击上面的设置按钮。在弹出的对话框中选择存储。点击存储界面右侧的光盘图标设置镜像文件
设置完成之后点击主界面的启动按钮。等待载入系统的选择界面。
如果想要安装系统则选择第二个选项,之后按回车确认。
等待系统安装程序载入,这个过程和你的机器性能相关,如果机器性能较差可能会载入较长时间。载入完成之后设置用户信息,注意用户只能是
xiaoqiang
, hostname可以随意设置。点击下一步进入分区界面。
选中你要安装的硬盘,然后点击Delete按钮再次选择硬盘中的新分区
点击箭头进入下一步
再次选择刚才新建的分区
设置右侧的Mount point,再次点击箭头进入下一步勾选transfer user configuration files
注意在实际的电脑上安装时,分区的时候,要给boot单独的分区,然后选择下面的grub安装位置。否则系统安装完成后是无法启动的。对于不同的启动方式分区也有些不同。以grub方式启动的要给/boot单独分区,以uefi方式启动的要给/boot/efi单独分区。具体的分区信息可以看Install GRUB 2 bootloader的右侧的提示信息。注意一定要保证Install GRUB 2 bootloader不是disable状态。
在给实际的电脑安装的时候,推荐的分区方式是 1G给 /boot/efi, 4G给swap,剩下的全部分给/。
点击右下角的next就可以继续了。如果你还想设置其他分区可以按照以上的步骤进行设置。
等待系统安装完成后重新启动就可以了。
在实际的电脑上安装
安装过程和一般的安装Ubuntu是一样的。下面介绍一下如何用U盘安装系统。
首先你要在自己的硬盘上准备一个空白的分区用来安装系统。
然后下载ultroiso软件。 下载地址
在电脑上插入自己的U盘。
用软件打开iso文件。在菜单栏中选择启动 -> 写入硬盘镜像,弹出界面如下点击写入,等待写入完成。
写入完成之后,把U盘插入想要安装系统的电脑上。启动时进入BIOS选项,选择从U盘启动。后面的安装过程就基本上是一样的了。
注意在分区的时候,要给boot单独的分区,然后选择下面的grub安装位置。否则系统安装完成后是无法启动的。对于不同的启动方式分区也有些不同。以grub方式启动的要给/boot单独分区,以uefi方式启动的要给/boot/efi单独分区。一般情况下用U盘安装都需要给/boot/efi单独分区。
虚拟机软件下载
Vmware Player -
ROS坐标系统,常见的坐标系和其含义
常见的坐标系
在使用ROS进行定位导航等操作时,我们经常会遇到各种坐标系。每种坐标系都有明确的含义。理论上坐标系的名称可以是随意的,但是为了方便不同的软件间共享坐标信息,ROS定义了几个常见的坐标系。
1.
base_link
base_link
坐标系和机器人的底盘直接连接。其具体位置和方向都是任意的。对于不同的机器人平台,底盘上会有不同的参考点。不过ROS也给了推荐的坐标系取法。x 轴指向机器人前方
y 轴指向机器人左方
z 轴指向机器人上方2.
odom
odom
是一个固定在环境中的坐标系也就是world-fixed。它的原点和方向不会随着机器人运动而改变。但是odom的位置可以随着机器人的运动漂移。漂移导致odom
不是一个很有用的长期的全局坐标。然而机器人的odom
坐标必须保证是连续变化的。也就是在odom
坐标系下机器人的位置必须是连续变化的,不能有突变和跳跃。
在一般使用中odom
坐标系是通过里程计信息计算出来的。比如轮子的编码器或者视觉里程计算法或者陀螺仪和加速度计。odom
是一个短期的局域的精确坐标系。但是却是一个比较差的长期大范围坐标。3.
map
map
和odom
一样是一个固定在环境中的世界坐标系。map
的z轴是向上的。机器人在map
坐标系下的坐标不应该随着时间漂移。但是map
坐标系下的坐标并不需要保证连续性。也就是说在map坐标系下机器人的坐标可以在任何时间发生跳跃变化。
一般来说map
坐标系的坐标是通过传感器的信息不断的计算更新而来。比如激光雷达,视觉定位等等。因此能够有效的减少累积误差,但是也导致每次坐标更新可能会产生跳跃。
map
坐标系是一个很有用的长期全局坐标系。但是由于坐标会跳跃改变,这是一个比较差的局部坐标系(不适合用于避障和局部操作)。坐标系的约定
在非结构化的环境中(比如开放环境),如果我们要定义一个全球坐标系
- 默认的方向要采用 x轴向东,y轴向北,z轴向上
- 如果没有特殊说明的话z轴为零的地方应该在WGS84椭球上(WGS84椭球是一个全球定位坐标。大致上也就是z代表水平面高度)
如果在开发中这个约定不能完全保证,也要求尽量满足。比如对于没有GPS,指南针等传感器的机器人,仍然可以保证坐标系z轴向上的约定。如果有指南针传感器,这样就能保证x和y轴的初始化方向。
在结构化的环境中(比如室内),在定义坐标系时和环境保持对应更有用。比如对于有平面图的建筑,坐标系可以和平面图对应。类似的对于室内环境地图可以和建筑物的层相对应。对于有多层结构的建筑物,对每一层单独有一个坐标系也是合理的。
4.
earth
这个坐标系是为了多个机器人相互交互而设计的。当有多个机器人的时候,每个机器人都有自己的map
坐标系,他们之间的map
坐标系并不相同。如果想要在不同的机器人间共享数据,则需要这个坐标系来进行转化。
如果map
坐标系是一个全局坐标系,那么map
到earth
坐标系的变化可以是一个静态变换。如果不是的话,就要每次计算map
坐标系的原点和方向。
在刚启动的时候map
坐标系的全局位置可能是不知道的。这时候可以先不发布到earth
的变换,直到有了比较精确的全局位置。坐标系之间的关系
坐标系之间的关系可以用树图的方式表示。每一个坐标系只能有一个父坐标系和任意多个子坐标系。earth -> map -> odom -> base_link
按照之前的说明,odom
和map
都应该连接到base_link
坐标系。但是这样是不允许的,因为每一个坐标系只能有一个父坐标系。额外的中间坐标系
这个图只表示了最少的坐标系。在保证基本的结构不变的情况下可以在其中加入中间的坐标系以提供额外的功能。多机器人坐标系的例子
earth --> map_1 --> odom_1 --> base_link1
earth --> map_2 --> odom_2 --> base_link2
坐标系变换的计算
odom
到base_link
的变换由里程计数据源中的一个发布map
到base_link
通过定位组件计算得出。但是定位组件并不发布从map
到base_link
的变换。它首先获取odom
到base_link
的变换然后利用定位信息计算出map
到odom
的变换。earth
到map
的变换是根据map
坐标系选取所发布的一个静态变换。如果没有设置,那么就会使用机器人的初始位置作为坐标原点。Map之间的切换
如果机器人的运动范围很大,那么极有可能是要切换地图的。在室内环境下,在不同的建筑物中,和不同的楼层地图都会不同。
在不同的地图间切换的时候,定位组件要恰当的把odom
的parent
替换成新的地图。主要是map
到base_link
之间的变换要选取恰当的地图,然后在转换成map
到odom
之间的变换。odom坐标系的连续性
在切换地图的时候,odom坐标系不应该受到影响。odom坐标系要保证连续性。可能影响连续性的情况包括进出电梯,机器人自身没有运动,但是周围环境发生很大的变化。还有可能由于运动距离太远,造成数据溢出。这些都要特殊进行处理。参考资料:
ROS REP 105 -
ROS高效图传的一些方法
图传是大家经常会遇到的一个问题,ROS中图传的方法也有很多。下面就总结一下常用到的方法。
1.设置
ROS_MASTER_URI
的方式
通过设置ROS_MASTER_URI
,我们能够直接和远程主机进行通信。这样只要在远程端发出 image topic 然后在本地订阅这个 topic 就可以显示了。下面是一个具体例子
假设远程端已经有一个image topic 名称为/camera_node/image_raw
,远程端计算机名为xiaoqiang-desktop
, 其ip为192.168.0.130
。a. 在本地计算机
/etc/hosts
文件添加192.168.0.130 xiaoqiang-desktop
b. 在本地计算机设置
ROS_MASTER_URI
环境变量export ROS_MASTER_URI=http://xiaoqiang-deskstop:11311
c. 在本地计算机输入
rostopic list
就可以看到远程计算机的topic
了
在本地计算机上输入rosrun image_view image_view image:=/camera_node/image_raw
就可以通过
image_view
打开远程图传了。然而默认的传输方式图像是没有压缩的,占用的带宽非常大。可以通过添加压缩参数来传输。
rosrun image_view image_view image:=/camera_node image_raw compressed
这里实际上使用了image_transport这个包进行了压缩。这个包不仅能够压缩视频图像也可以压缩深度图像信息。不过这个压缩算法是逐帧压缩的,所以压缩的效率并不高,带宽使用率也比较高。但是实时性是比较高的。
2.使用
web_video_server
软件包
在远程端安装这个包。安装方法如下
在自己的工作空间中git clone https://github.com/RobotWebTools/web_video_server cd .. catkin_make
等待编译完成,启动节点
rosrun web_video_server web_video_server
启动后在本地浏览器输入
http://192.168.0.130:8080/stream?topic=/camera_node/image_raw&type=vp8
,就可以在浏览器中打开远程视频了。这种方法也是不仅能够压缩一般图像数据也可以压缩深度图像数据,同时可以设置多种压缩方式。由于视频传输是采用的标准的http格式,所以客户端读取视频的时候可以完全脱离ROS的框架,使用起来也比较容易。这种压缩方式压缩效率也比第一种高很多。但是实际使用中发现实时性要差一点,这个和客户端如果处理数据关系比较大,比如缓存设置的比较大,就会有较大的延时。 -
小强在群体机器人中的应用
ROS是一种分布式设计的通信框架,所以非常适合用来做群体机器人的研究。下面就简单介绍下如何用小强实现机器人集群的控制。
首先回顾一下ROS通信的基本结构
ROS的通信由
master
,node
组成。node
从master
获取其他node
的信息,然后再根据这些信息和其他node
建立连接。不同的node
并不要求在同一个机器人上。所以只要我们以一台电脑作为master,让其他机器人的node
都连接这个master
就可以实现机器人之间的通信了。我们不仅能获取到所有机器人的状态信息,也可以向任意一台机器人发送控制命令。每台机器人负责各自节点的计算,所以我们的
master
并不需要很多的计算资源。整个处理过程也是分布式的。master
只要做好调度计算就可以了。不仅如此,ROS还提供了很方便的工具方便我们对集群进行配置。下面就以小强为例,配置一个简单的集群。这个集群总共有两台电脑组成。一台作为集群的中心节点,也就是
master
,计算机名为nowhere
。另一台作为node
,计算机名xiaoqiang
。实际使用中node
可以有很多台。控制方式是完全一样的。整体的结构如下master(nowhere ip: 192.168.0.116) <----> node(xiaoqiang ip: 192.168.0.130)
现在假设我们要在
nowhere
上启动小强的system_monitor
。首先要保证网络的联通性,即xiaoqiang
和nowhere
要在同一个局域网下。由于ROS的node
间访问的时候使用的是计算机名,所以我们要在xiaoqiang
和nowhere
的hosts
文件中添加各自的ip。
打开小强的/etc/hosts
文件在其中添加如下内容192.168.0.116 nowhere 127.0.0.1 xiaoqiang-desktop
打开nowhere的
/etc/hosts
文件,在其中添加如下内容192.168.0.130 xiaoqiang-desktop 127.0.0.1 nowhere
在nowhere的工作空间中新建一个叫做
cluster_robots
的软件包。catkin_create_pkg cluster_robots rospy
然后在
cluster_robots
文件夹内创建一个launch文件夹cd cluster_robots mkdir launch
在launch文件夹内创建一个
cluster.launch
文件
文件内容如下<launch> <machine name="xiaoqiang" address="192.168.0.130" env-loader="/home/xiaoqiang/Documents/ros/devel/env.sh" user="xiaoqiang" password="xiaoqiang" /> <node machine="xiaoqiang" pkg="system_monitor" type="monitor.py" name="monitor"></node> </launch>
在这个launch文件中首先定义一个machine。这个machine中包含了小强的基本信息。
name 此机器人的名称,之后会用在node里面
address 此机器人的ip
env-loader 此机器人的环境变量设置脚本。指向你的工作空间中的devel/env.sh
user 此机器人的用户名,用于远程登录此计算机
password 此机器人的密码下面的
node
和正常的node
写法是一样的,差别在于增加了一个machine
标签。在这里指定这个节点运行在哪台机器上。下面就可以执行了
roslauch cluster_robots cluster.launch
不过你会遇到一些错误。我们要先把它们解决。
出现
Incompatible ssh peer
错误。这是因为一个库的版本太低了,输入下面的指令升级sudo pip install paramiko --upgrade
出现
is not in your SSH known_hosts file
这是由于ssh默认的加密方式和ROS的ssh库不一样。输入下面的命令ssh -oHostKeyAlgorithms='ssh-rsa' xiaoqiang@xiaoqiang-desktop # 在nowhere上输入 ssh -oHostKeyAlgorithms='ssh-rsa' nowhere # 在xiaoqiang上输入
在nowhere确认
ROS_MASTER_URI
的值,如果是http://localhost:11311
则要输入export ROS_MASTER_URI=http://nowhere:11311 # 注意nowhere是计算机名,要根据你自己的情况更改
最后在nowhere上运行
roslauch cluster_robots cluster.launch
终端输出如下
这时在nowhere上输入rostopic list终端的输出如下
可以看到已经有来自小强的topic了
这样我们就实现了
master
和node
之间的通信。按照这种方式可以继续添加多台小强。实际使用中情况要比这个例子复杂一些。比如如果有多台小强,由于每台小强的topic名称默认都是一样的,所以很有可能存在冲突的情况。这时候就要通过remap给topic重命名。或者采用相对的namespace的方式对topic进行命名。同时一个小强可能要启动很多的节点。这样使用launch文件进行管理的时候也要充分考虑文件组织的合理性。
采用这种方式启动小强的节点,小强上是没有master节点的。如果在小强上输入
rostopic list
就会提示无法和master通信。同时小强自己ROS_MASTER_URI
是不受影响的,仍然是http://xiaoqiang-desktop:11311
。但是在nowhere上通过launch文件启动的小强的节点是可以和nowhere的master进行通信的。同时也和nowhere共享同一个参数服务器。如果小强本地同时启动了一个master
,小强的master和nowhere的master是完全独立的。之间的topic数据也是不通的。 -
ROS基础知识
ROS 简介
-
什么是ROS
ROS 是 Robot Operation System 的简称。是专门为机器人控制开发的系统。和一般的操作系统相比增加了软件包管理,信息通信框架等。同时这个系统对硬件进行了抽象使得各个组件之间的耦合更低,程序开发也更加方便快捷。 -
ROS 能在哪些平台上使用
ROS官方版本基于Ubuntu进行开发。所以无论是arm架构还是x86架构都可以使用。即使你所使用的平台无法安装Ubuntu或者Debian,只要能够安装Linux系统就可以从源码编译安装ROS。OSX也可以安装ROS,不过是测试版本,安装使用过程中可能会遇到问题,并不推荐大家使用。Windows的ROS已经实现,但并未完全开发完成。 -
ROS的版本区别
ROS每年5月发布一个版本。其中单数年份发布为短期版本,支持时间为2年。双数年份发布的版本为长期支持版,支持时间为5年。最新的长期支持版是Kinetic Kame。现在一般网上的教程是基于Hydro或者 Indigo。这些教程和Jade和Kinetic版本是通用的。
不同版本之间并不完全通用。比如你的机器人的系统是Indigo的,但是你的本地操作系统是Jade的那么系统间通信就有可能会出现消息格式不匹配的情况。所以不同系统间的版本尽量保持一致。 -
ROS的学习路线
ROS开发中主要使用的语言是C++和Python,你需要对这两种语言都比较熟悉。同时ROS基于Ubuntu操作系统,这也要求你对Ubuntu比较熟悉。
首先你可以先读完这篇文章,对于ROS的架构和基本概念有一个初步的认识。然后看官方wiki中的Tutorial 。
同时Learning ROS for Robotics Programming Second Edition也是一个不错的选择。
你也可以按照这个ROS思维导图的方式来学习。
在对ROS比较熟悉之后,如果你想了解更多关于ROS设计方面的东西可以看看REP
如果想要了解关于ROS2方面的信息可以看这里
在实际使用中会遇到很多问题,欢迎在我们的ROS交流群中提问(538456117)
当然想要更深入的了解ROS,阅读源代码也是一个不错的选择
ROS源代码
ROS2源代码 -
ROS的未来
ROS虽然大大方便了机器人开发,在业内有很广泛的应用,但是实际使用中还是有挺多问题。比如稳定性,网络带宽和多机器的情况下的自动连接等等。这些功能都会在ROS2中实现。随着ROS的不断发展,相信其在机器人行业会有越来越好的发展前景。
ROS的架构
ROS与其说是操作系统其实更像一个通信框架。ROS的基本单元是节点(Node)。节点之间可以通过订阅和发布Topic进行通信。节点的基本信息会存储在Master里面。下面以一个例子具体说明。假如我们现在有一个激光雷达,然后我们想要通过图形界面显示雷达的数据。那么整个结构就如下图所示
激光雷达有一个节点叫做hokuyo,图形界面有一个节点叫做viewer。激光雷达节点从传感器读出数据之后,首先告诉Master自己在发布一个叫做scan的topic。然后在本地监听2345端口,等待其他节点连接。图形界面节点viewer启动之后,首先告诉Master自己在订阅一个叫做scan的topic。这时候Master就会告诉viewer节点谁在发布scan。Viewer获得到hokuyo的地址和端口信息后和hokuyo节点建立TCP连接。这样激光雷达的数据就从hokuyo节点发送至viewer节点了。
通过这种架构可以实现节点的分布式处理功能。即不同的节点不要求一定在同一个机器人上。比如上例中的激光雷达节点和viewer节点就可以在不同的机器人上。也可以进一步实现多台机器人的调度。ROS的基本概念
从上例我们可以看出ROS中有以下几个比较重要的基本概念
- Master
Master就是存放各种节点和topic信息的地方。节点之间通过Master了解到对方的信息。同时在Master的帮助下节点之间建立网络连接。 - Node
基本的ROS计算单元。 - Topic
节点之间的通信通道 - Parameter Server
参数服务器。在使用过程中可能不同的节点间要共享一些参数。这些参数就可以放在参数服务器里面。其作用就类似于不同节点公用的全局变量。在上面的例子中没有用到参数服务器。
ROS的安装
下面以Kinetic版本为例说明ROS的安装方法。
- 安装Ubuntu 16.04
- 添加ROS源
sudo sh -c 'echo "deb http://packages.ros.org/ros/ubuntu $(lsb_release -sc) main" > /etc/apt/sources.list.d/ros-latest.list'
- 添加源的key
sudo apt-key adv --keyserver hkp://ha.pool.sks-keyservers.net:80 --recv-key 421C365BD9FF1F717815A3895523BAEEB01FA116
- 安装
sudo apt-get update sudo apt-get install ros-kinetic-desktop-full
- 初始化rosdep
sudo rosdep init rosdep update
ROS的环境变量
ROS运行时依赖一些环境变量,所以我们要把其添加到自己的终端配置文件中。
echo "source /opt/ros/kinetic/setup.bash" >> ~/.bashrc source ~/.bashrc
这样就会在
bash
中添加source /opt/ros/kinetic/setup.bash
这样一行语句。每次打开一个终端都会执行上面的脚本。这个脚本会设置ROS相关的一些环境变量。下一步
-
-
rqt_graph报错global name 'dot_parser' is not defined
产生这个问题的原因是rqt_graph用到了pydot而pydot默认版本只支持pyparsing < 2.0版本。而现在系统中pyparsing的默认版本是大于2.0的。幸运的是新版的pydot已经解决了这个问题。所以解决方法很容易,就是升级pydot的版本。
sudo pip install -U pydot