本节介绍文件结构以及介绍一下launch文件的编写.
这个文件夹主要是配置小车的运动,我们的车模是阿克曼车模,前轮相当于舵机转向后轮驱动,这个文件夹就是配置了这两项.
这个文件夹下就一个racecar_control.yaml文件,也就是运动关节的配置文件:
这里面定义了运动控制器对应的模型的关节是哪个,并且定义了每个关节的类型以及PID参数,这个参数基本不需要调整.
这下面放置了控制关节运动相关的启动文件:
第一第三个没有用,是MIT的实体车模使用的文件,第二个是仿真机器人运动控制器的启动文件:
第一个文件是车模按键控制的脚本,也就是我们启动仿真左边一栏的?窗口对应的代码部分,里面实现了按键转换成阿克曼消息,发布速度和角度.可以参考写自己的控制车模运动的代码.
第二个文件主要是创建了一些节点来发布车模的舵机的状态等,不需要修改没有什么参考意义.
这个不用动也不要修改,里面是车模传感器的样式文件,说白了就是为了显示外观的.
这里面是一些搭建好的场地的文件,没有用上也不用看不要改.
这里面是这个车模的形状以及关节怎么连接以及传感器怎么配置的文件夹:
图中两个框选的文件是我们这个车模的,sensors下放置的是传感器的配置文件,修改传感器的参数可以在里面修改,racecar.urdf.xacro文件是机器人整体结构的描述文件,包含各个关节的名字定义,各个关节的子关节和父关节的定义以及一些物理属性的配置,也不需要大家修改.
这个是室外光电组比赛用的计算里程计的代码文件夹,我们的仿真没用上可以忽略,这个文件实现了将激光雷达数据和陀螺仪数据融合计算出机器人的当前位置这一功能,有兴趣的同学可以私戳我教你怎么使用,但我们仿真比赛用不上.
这个文件存放的是MIT实体车的一些电调配置,串口配置之类的还有启动实体车传感器的脚本等等,咱们用不上可以忽略.
这里面放置了amcl,gmapping,代价地图等等SLAM建图导航使用的配置文件,主要用途是室外光电组比赛,咱们ROBOCON的比赛很少使用SLAM建图导航的方式,这样的导航对于到达目标点精确度不高,而我们ROSBOCON一般对定位的要求可能会到达1cm一下的允许误差内.
这三个文件是我们用上的:
fetch_moveit.launch文件启动了fetch机器人的move_group也是组合动作的配置文件,启动后可以使用moveit来规划运动.
racecar.lauch文件用途是在gazebo中加载一个空的世界地图和我们的车模和fetch机器人.launch文件都是由<标签>标签>构成的,也就是xml语法.
上面这一段代码,定义了我们启动的gazebo场景的名字如果没有传参默认叫racecar,并且定义了三个参数x_pos,y_pos,z_pos这个主要是用于告诉gazebo我们的racecar车模应该放在仿真软件中的那个位置.下面一段
加载了一个gazebo提供的空世界地图
上面这一段group用于加载racecar车模,这个基本是加载机器人的固定格式,一般都是复制粘贴的,可以自己多看看几个开源的机器人仿真就了解了.
这段代码最底下一个include是加载了fetch机器人,其他的比如第一个include是加载了我们之前看的控制运动的launch文件,这里我们就能发现launch文件是可以嵌套调用的,描述文件也可以用include的方式在launch文件中加载.
racecar_robocon.launch文件
这段代码比较简单,就是调用了racecar.launch文件,并且将world name这个变量名字传了进去告诉调用的launch文件应该启动那个world场景.
根据传入的world name,就可以找到对应的world文件,在lracecar.launch中的代码是这一段:
所以找到了下面文件:
launch文件夹下的includes文件夹:
这段代码和racecar的启动文件代码类似,画框的地方定义了fetch机器人的放置位置.
这是SLAM导航建的环境地图,用不上,可以忽略
我建的一些场景的模型文件,用不上可以忽略
下面放了写的c++代码,没什么用忽略
下面放置了gazebo环境的world文件,不需要修改
#!/usr/bin/env python
# BEGIN ALL
import rospy,cv2,cv_bridge, numpy
from sensor_msgs.msg import Image
from std_msgs.msg import Float64
from ackermann_msgs.msg import AckermannDriveStamped
rospy.init_node('follower')
cmd_vel_pub = rospy.Publisher(
"/vesc/low_level/ackermann_cmd_mux/input/teleop", AckermannDriveStamped, queue_size=1)
ack = AckermannDriveStamped()
while not rospy.is_shutdown():
ack.drive.speed = 0.5
ack.drive.steering_angle = 0.2
cmd_vel_pub.publish(ack)
rospy.spin()
准备结营比赛,根据规则视屏,完成所有的任务,包括启动传送带,设计传送带的程序,设计小车走到指定区域启动传送带的程序等.
线上培训电控部分到这里告一段落,培训的重头戏还是最后的仿真比赛,比赛通过任务的完成度,以及完成的时间来计算成绩,具体细则稍后推出,结营比赛时间预计在8.9日,我们会给大家电控的同学分组进行程序设计完成比赛.参与了结营比赛并且在结营前完成了所有作业的同学,开学后会定制证书发给大家.