
现在还只是个草稿,后面会陆续更新改正,保证大家一看就会,绝对不废
只是帮助大家理解,很多知识点只是类比推理,是有错误的,哈哈,勿喷
蛮多人在学习ROS的时候,其实还是不太理解什么是ROS,为什么要去ROS,以及怎么样去学习ROS,我大二的时候开始接触到ROS,也经历过比较痛苦的一段时间,所以希望用这篇文章来帮助大家对ROS有一个较好的理解。
首先我们抛开ROS来说,如果我们要写一个程序,程序需要完成特定的功能,就拿C语言中的加法函数来说吧。我们定义了一个加法函数,输入两个整数最后返回两个整数的和,然后定义完函数以后,在main()函数里调用这个加法函数,就可以在键盘上输入两个整数,然后计算两个整数的和了。
那么问题来了 如果我要在别的程序需要使用加法函数所返回的值,应该怎么做呢?
一种方式 定义一个全局变量,将加法函数返回的值赋给这个全局变量,那么在一个工程文件下的程序都可以使用这个全局变量了,这就达到了其他程序使用这个变量的目的了
那么问题又来了,如果不是在同一个工程目录下的程序,要怎么样才能使用到这个加法函数的返回值呢?
一种方式 将第一个程序的加法返回值写到一个文档中,然后其他程序去读这个文件,这样也可以达到使用这个数据的目的了
上面的例子,想给大家传递的知识点就是 我们在写程序的时候,大多数人是只有一个main()函数的,也就是只有一个可执行文件,那么问题就来了,要是不同的main()函数之间需要相互使用对方的数据,那应该怎么办呢,这就引申出了程序与程序之间到交流问题,也就是通信问题。这也是ROS里面我个人觉得必须首先要搞清楚的问题。大家先理解到这个地方,然后往下看。
开始进入主题 到底什么是ROS,ROS就是Robot Operating System 的缩写,这大家都知道,对吧,翻译成中文也就是机器人 *** 作系统,可是除了这个大家对 *** 作系统是什么大家有了解过么,为什么需要 *** 作系统,也就是 *** 作系统能干什么,大家有简单的了解过么
*** 作系统(先空白,后面再填坑)
在了解 *** 作系统以后,我们就可以开始分析我们的机器人 *** 作系统了,话不多说,先放狗,不不不,先放图:
我们知道, *** 作系统本身也是一个软件,但是他的特殊之处在于能够完成对硬件的调配,而其他的应用软件,比如网易云,他如果想放歌,他需要打开播放器,是得需要 *** 作系统去完成的,它本身没有这个能力去直接打开播放器,而是对 *** 作系统说,大哥,能不能帮我打开一下播放器,求求你了,哈哈。
我们也知道,在win上安装了许许多多的软件,向上面的solidworks(三维制图软件),matalab(数据计算软件) QQ(聊天软件) 网易云 (听歌软件) 腾讯视频(播放软件)
那么问题又来了 你能让你的扣扣去跟网易云说 我想听歌,然后网易云就会打开播放么,当然你要是杠杆定理学得好,那我认了,哈哈,大多数人是应该是觉得这应该不可以,因为扣扣怎么跟网易云通信嘛,对吧。
所以我们安装在win上的各个软件只负责自己的问题,不会跟其他的软件有过多的交流。
哈哈,所以我有了一个大胆的想法,让我的电脑同时登录3个扣扣,那么这三个扣扣总该可以相互发消息了吧,没错,这就是我想要讲的东西,我只在我的电脑上安装三个软件 也就是3个扣扣软件,他们肯定是可以相互交流的。因为他们是同一类软件。
是的,ROS也是这么干的,在ROS上也安装了向扣扣这样的可执行程序,只不过在ROS中换了个说法,可执行程序叫做节点,这应该不拿理解吧。要记住在ROS上安装了许许多多的软件哦,也就是许许多多的可执行程序,也就是许许多多的节点,如果你现在理解了节点是什么了,那么恭喜你,已经迈出了一小步了,你说巧不巧,安装在ROS上的这些程序,它还可以相互通信,也就是相互交流,哈哈。
好了,理解到这一步呢就理解了节点是个什么东西了。
下面又开始了一个新的例子,我们的手机上有一个扣扣,我们需要和其他人聊天对吧,那么你知道你要和别人聊天需要先做什么么,你肯定说,登录账号加好友啊,不对的,首先要做的就是把腾讯的服务器打开,不然你登录不上去的,也就是说,腾讯的服务器不打开,你是登录不上扣扣的,只不过这一步不是我们 *** 作的,人家的服务器他已经给我门打开了,然后我们再登录扣扣,想一下,我们在登录的时候,做了什么,对吧,大家都知道,我们也就是输入账号密码就可以登录了吧对吧,这个过程呢就是向腾讯的服务器注册自己的信息,告诉腾讯服务器,我上线了,然后腾讯服务器就把你加入到注册表中,里面包含了你的一些信息,你想要和别人连天,那么别人是不是也要跟你一样,也要先登录,过程和你的一样,所以这个时候,腾讯服务器那边是已经有了你和你想要聊天的对象的一些信息的,比如ip地址之类的东西,这样,你想发消息给你的朋友(后面再填坑)
类比一下 服务器 就相当于ROS里面的ros master
只不过这个rosmaster需要我们自己开启而已。
事实上,ros并不是一个 *** 作系统,他并不能直接运行在硬件之上,只不过他把硬件做了一个给 *** 作系统的接口 和网易云一样 网易云大不了就使用一个喇叭呗,只不过ros使用了太多的硬件,比如激光雷达,相机,编码器,imu等等。
因此ROS本身也就是一个软件,和qq一样,运行在 *** 作系统之上,所不同的是,在ROS上又可以安装许许多多的同类软件,这些安装在ROS上的程序(节点)之间可以按照ROS所规定的通讯机制进行相互交流通讯。比如激光雷达节点(程序)通过ROS提供的接口,让 *** 作系统把激光数据传上来,交给建图所需要的Gmapping节点使用,然后Gmaping节点把所构建的地图给move_base节点使用,move_base节点的输入是一个速度和角度的命令,先由move_base下发给ros,然后ros下发给 *** 作系统,然后 *** 作系统调用硬件,在这里是电机,让电机按照ROS下发的速度的角速度进行运动
大家应该会有一点点理解了吧
总结下 就是ros是一个类似于win上的一个软件,但是这个软件上又安装了很多软件,在ros上安装的这些软件可以相互通信,然后可以借助ROS,去调用 *** 作系统去调用硬件。
这就是为什么我们每次想要聊天的时候,需要先打开qq这个软件,也就是我们想要用ROS的时候,先运行roscore这个命令打开ROS了吧
接下来是
ros中的通讯方式
ros中的一些工具
ros中的一些已经有了的功能包(算法)
慢慢写,不着急
ros拨号成功不能上网原因如下:
1、DNS解析问题:ROS默认情况下使用的是ISP提供的DNS,但有时候会出现解析不成功的情况,您可以尝试更改为其他可靠的DNS服务器地址。
2、IP地址和网关配置问题:在ROS上进行拨号时,需要配置正确的IP地址和网关信息,否则将无法正常访问互联网。您可以在终端中输入“/iprouteprint”命令查看当前路由表信息,确认IP地址和网关是否正确。
3、防火墙设置问题:ROS默认情况下启用了防火墙功能,如果您没有进行正确的防火墙设置,也可能导致无法上网。您可以通过在终端中输入“/ipfirewallfilterprint”命令查看当前防火墙规则,确认是否存在阻止互联网访问的规则。
4、网络接口设置问题:如果您使用了多个网络接口,需要确认网络接口的设置是否正确。您可以在终端中输入“/interfaceprint”命令查看当前网络接口的状态和配置信息。
要启用ROS中的温度检测功能,需要以下步骤:
1、确认硬件设备支持温度检测功能。大多数CPU、GPU、芯片组和传感器都支持温度检测功能。可以通过查看设备手册或者在设备管理器中查看设备信息来确认。
2、安装相应的驱动程序和工具。根据硬件设备的型号和厂商不同,需要安装相应的驱动程序和工具。例如,如果使用Nvidia显卡,需要安装Nvidia的显卡驱动程序和NvidiaSystemManagementInterface(nvidia-smi)工具。
3、在ROS中安装相应的软件包。ROS中有许多与温度检测相关的软件包,可以通过ROS官方网站或者ROSPackageIndex进行下载和安装。例如,可以使用“lm-sensors”软件包来读取CPU温度。
4、编写ROS节点程序。可以使用C++或Python等编程语言,编写ROS节点程序来读取温度数据,并将其发布到ROS话题或者保存到文件中。可以使用ROS中的“sensor_msgs/Temperature”消息类型来传输温度数据。
5、运行ROS节点程序。可以使用ROS命令行工具“rosrun”来运行ROS节点程序,并通过ROS话题或者文件读取温度数据。
实时建立环境地图并定位,要依靠于昂贵的激光雷达,不过现在有了可替代的工具,可以伪造出激光雷达的效果,算是伪造吧。
可替代的工具是微软的Kinect和Asus Xtion相机。可以看depthimage_to_laserscan和kinect_2d_scanner 两个包的内容。
这一章主要以3个包的内容展开航行的设计:
move_base使用 MoveBaseActionGoal message ,看一下消息的定义:
rosmsg show MoveBaseActionGoal
会显示以下信息:
这个看起来有点复杂,我们下面会使用简单一点的东西来指定目标。
move_base运行之前需要设置四个文件。这些文件定义了障碍,机器人半径,路径需要规划多远,机器人运行多快等。
这四个设置文件可以在config文件夹下找到:
move base节点需要一个环境地图才能运行,不过使用一个空地图也是可以的。我们后面会使用真正的地图。 rbx1_nav package包含了一个空地图叫做 blank_mappgm ,它在maps的子目录下。描述文件叫blank_mapyaml。启动move_base节点和空地图的启动文件叫fake_move_base_blank_maplaunch,它在launch的子目录下。
现在来看一下启动文件。
首先在一个空白地图上启动了mao_server node地图的描述文件就是那个yaml文件
然后加载了fake_move_baselaunch文件,它启动了move_base node并且加载了必要的参数
最后,因为我们使用了空白的地图并且我们的仿真机器人没有传感器,机器人不能使用扫描数据定位我们对机器人量程框架和地图框架,或者说坐标系,做一个静态的简单对应,换句话说,就是假设机器人的编码器能够获得理想的数据
然后我们再看一下fake_move_baselaunch文件:
这个启动文件运行了move_base node和五个rosparam来导入参数costmap_common_paramsyaml导入了两次,是为了把这些参数同时设置在global_costmap namespace 和 local_costmap namespace使用后面的ns来指定
要在仿真中尝试,首先启动ArbotiX仿真器:
这里可以换成别的机器人
然后在空白地图上启动move_base node:
如果你还没有运行过RViz,可以使用配置好的参数文件启动:
现在我们已经准备好了使用move_base控制机器人,而不是简单的使用Twist消息
为了测试一下首先我们让机器人前进1米现在我们的机器人位于(0,0,0)在/map坐标系和/base_link坐标系我们可以使用任意一个坐标系指定这次移动
然而,第一次移动并不能让机器人到达准确的位置,随后的误差要靠/base_link坐标系去比较消除所以我们最好在/map上面设定目标指令如下:
把机器人移动回原点,只要停止刚才的命令,然后按照相同的格式输入原点坐标就可以了,像下面这样:
你可以看到一个细细的绿线,那个是全局路径规划,还可以看到一个红线,是实时更新的本地路径规划想要更为清晰的看到这两条线,可以在RViz上面关掉Odometry, Goal
Pose and Mouse Pose,然后重新运行上面的命令
绿色的路径比较平坦,是因为这中间没有任何的障碍,另外,它还跟我们的一些参数设置有关比如,pdist_scale (04) and gdist_scale (08),还有最大线速度( max_vel_x )我们的局部路径,跟我们的全局规划路径相差很大,想要让我们的机器人更加贴近我们的全局规划路径,我们可以使用rqt_reconfigure增大pdist_scale参数或者减小max_vel_x
再打开一个新窗口,启动rqt_reconfigure:
然后,打开move_base->TrajectoryPlannerROS,把pdist_scale设置的大一点,比如08,然后把gdist_scale设置的小一点,比如04然后重新运行运动指令,看看有什么变化
好像是好了很多
我们刚刚是使用navrviz文件启动RViz的,这样我们可以直接点击2D Nav Goal在地图上指定目标点击时不要放开,可以旋转改变设定目标的方向
我们可以再RViz的窗口上看到设置信息:
我们最好重新开始,关掉之前所有的node,然后:
然后执行命令:
程序里面有很多注释,可以自己打开看一下
move_base最厉害的一点是,它可以在到达指定位置的同时躲避障碍局部路径规划会重新计算路径
我们将会打开一个带有障碍的地图,然后仍然使用move_base_squarepy运行机器人,看它是否会避开障碍,并且到达目标
首先打开地图:
然后清理到move_base节点的资源:
这个命令会清理掉所有move_base已经退出的参数,它的清理程度仅次于重启roscore
然后运行加载地图和move_base:
然后运行RViz:
**的部分就是障碍,其他颜色代表一个扩大的安全距离的缓冲
也可以使用点击,像之前那样,设定目标
以上就是关于ROS(机器人 *** 作系统)全部的内容,包括:ROS(机器人 *** 作系统)、ros拨号成功不能上网、ros如何启用温度检测等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)