好大的坑,速度不稳定,一抖一抖的
上层与底层通讯的实时性要保证,两者之间的交互的数据是v和w,左右轮的速度的计算都放在下层,并保证底层计数odom和计算v和w的实时性和准确性。这些是基础,非常重要。
20170705超声不避障,xml文件格式好坑爹
加速DLu的sonar层之后,发现根本没有避障。后来发现在local_costmap.yaml,global_costmap.yaml,common_costmap.yaml中obstacle layer,inflation layer,sonar layer都要在第二层,而不是第一层顶格。
顶格的只有第一行的local_costmap等,意思就是这些层都是属于local_costmap或者global_costmap的,注意local和global文件都要进行相应的配置。
20170712超声避障太差,排布要注意
原来是这样子排布的,正前方有一个空隙无法检测到障碍,那么机器人会认为这里可以走,所以就不进行避障,直接撞上去。
后来改成这样,就好一点
20170713远程遥控
按照教程(ROS wiki中有个Remote monitoring and control),把教程中的要求写进了~/.bashrc,ssh登录到机器人端,然后开启launch,没有什么用?也不动
一定要按照教程在终端写入才能用,简直坑爹。
rocon_remocon这是人家写好的远程操作界面
机器人本体端安装indigo-rocon-remocon ros_bridge, 手机端安装EAI的app,机器人端开启相应的launch,手机端设置好相应的端口,那么就可以用手机控制机器人了。
20170714用python写node
不用像c++那样在cmakelist.txt中添加任何代码
但是关键的是要授权可执行 chmod +x ./scripts/node.py
20170714自定义msg的坑
定义好msg之后对cmakelist和package.xml进行相应的修改,这些网上都有,照着来
然后catkin_make
用时
from package.msg import msg_name
TM from的居然是package.msg, import才是定义的消息的文件名,特么有病
另外recv或许还有一个比较容易曲解的地方recv(maxsize)并不是阻塞到直到获取到maxsize长度后才返回。这个地方可以这样理解,把这个IO流当做一个盒子。当盒子里面没有内容的时候recv是阻塞的。某一时刻盒子里面放进了一些内容,不管放进了多少recv会读取最多maxsize内容返回。
201708087
想用map_server map_saver [-f name]将图片保存为jpg格式
map_saver只将图片保存为.pgm格式,我看了源码:
直接给后缀'.pgm',所以除非改源码,不然无法保存jpg图片
20170808
远程设置参数
roslibjs可以远程设置参数,比如将这个字符串设置到如下object
但是设置完参数,远程如何获取呢
因为如果没有参数,那么ROS端的node必然运行不起来,所以:
- 必须先设置参数
- 再运行node
- 如果要在运行过程中实时改变参数,那么就要设置rqt_reconfigure了
ROS端的参数有不同的分类:
global_name = rospy.get_param("/global_name")
relative_name = rospy.get_param("relative_name")
private_param = rospy.get_param('~private_name')
default_param = rospy.get_param('default_param', 'default_value')
# fetch a group (dictionary) of parameters
gains = rospy.get_param('gains')
p, i, d = gains['P'], gains['I'], gains['D']
便面上看,第一行是global参数,这种参数可以在node启动之前先在远程设置,启动node之后,node就能够获取到这个参数。
第二行的相对参数用法不知
第三行的私有参数是用的最多的,这种参数只能在启动node时设置或者在launch文件中设置,无法在node启动前先设置,node启动再去获取。