智能车仿真 —— 2020室外光电创意组线上仿真赛

12329
18
2020年7月6日 12时05分

前言

今天推出了官方的仿真文件,我也参与了部分仿真模型的设计,提供一个简单的参考思路。

模型下载地址

https://pan.baidu.com/s/1TFBTbCeyQMuKnxemCbyNSw 提取码: crm5

安装依赖工具

sudo apt-get install ros-kinetic-controller-manager
sudo apt-get install ros-kinetic-gazebo-ros-control
sudo apt-get install ros-kinetic-effort-controllers
sudo apt-get install ros-kinetic-joint-state-controller
sudo apt-get install ros-kinetic-driver-base
sudo apt-get install ros-kinetic-rtabmap-ros
sudo apt-get install ros-kinetic-ackermann-msgs
sudo apt-get install ros-kinetic-teb-local-planner
如果gazebo打开仿真出现cmd134字眼是gazebo版本太低的原因从7.0.0升级到7.16.0即可!!!

模型使用说明

首先创建工作区间:

mkdir -p smartcar_ws/src

初始化工作区间

cd ~/smartcar_ws/src
catkin_init_workspace

然后导入仿真文件,将百度云下载的压缩文件解压,将其中的racecar_description.7z文件复制到smartcar_ws/src下并提取(如下图):
在这里插入图片描述

将压缩文件中的smartcar_plane.7z文件提取到.gazebo下的models下,具体操作如下:

  • 在home目录下ctrl + h显示隐藏文件
  • 找到.gazebo文件
  • 进入文件中的models文件夹(如果没有就自己创建一个)
  • 将smartcar_plane.7z解压到models下
    在这里插入图片描述
    在这里插入图片描述
    在racecar_description文件夹下创建worlds文件夹,然后把百度网盘的world文件放到下面:
    在这里插入图片描述
    修改一下launch文件夹中的racecar.launch文件:
    在这里插入图片描述
    编译工程:
cd ~/smartcar_ws
catkin_make

在这里插入图片描述
使能环境变量:

echo "source ~/smartcar_ws/devel/setup.bash" >> ~/.bashrc
source ~/.bashrc

启动仿真环境:

roslaunch racecar_description racecar.launch

在这里插入图片描述
启动rviz和gazebo:

roslaunch racecar_description racecar_rviz.launch

在这里插入图片描述

仿真任务提示

因为涉及比赛我就不详细讲解怎么配置完整的项目,做一些提示:

  • 首先车不能动,需要配置运动控制器,参考我的项目:https://github.com/xmy0916/racecar中racecar_control文件夹配置运动控制器
  • 官方仿真没有配置gmapping那些,可以参考我的项目里面racecar_gazebo下的congig文件配置
  • 上述配置完成后可以直接使用teb运动规划的速度和方向。
  • 也可以参考我写的path_pursuit.py代码完成纯路径追踪,这个算法有缺陷我没有订阅局部路径规划的话题所以只能巡线不能避障。代码在racecar_gazebo下的srcipts下。

关于运动控制的配置

其实车模已经配置好了关节,要做的就是写关节的控制器,关节控制器代码在racecar车模里就一个yml文件,内容如下:

racecar:
  # Publish all joint states -----------------------------------
  joint_state_controller:
    type: joint_state_controller/JointStateController
    publish_rate: 50


  # Velocity Controllers ---------------------------------------
  left_rear_wheel_velocity_controller:
    type: effort_controllers/JointVelocityController
    joint: left_rear_wheel_joint
    pid: {p: 1.0, i: 0.0, d: 0.0, i_clamp: 0.0}
  right_rear_wheel_velocity_controller:
    type: effort_controllers/JointVelocityController
    joint: right_rear_wheel_joint
    pid: {p: 1.0, i: 0.0, d: 0.0, i_clamp: 0.0}
  left_front_wheel_velocity_controller:
    type: effort_controllers/JointVelocityController
    joint: left_front_wheel_joint
    pid: {p: 0.5, i: 0.0, d: 0.0, i_clamp: 0.0}
  right_front_wheel_velocity_controller:
    type: effort_controllers/JointVelocityController
    joint: right_front_wheel_joint
    pid: {p: 0.5, i: 0.0, d: 0.0, i_clamp: 0.0}


  # Position Controllers ---------------------------------------
  left_steering_hinge_position_controller:
    joint: left_steering_hinge_joint
    type: effort_controllers/JointPositionController
    pid: {p: 10.0, i: 0.0, d: 0.5}
  right_steering_hinge_position_controller:
    joint: right_steering_hinge_joint
    type: effort_controllers/JointPositionController
    pid: {p: 10.0, i: 0.0, d: 0.5}

还不明白嘛?Velocity Controllers部分控制转速的pid以及关节定义,Position Controllers部分配置转向关节的pid以及关节定义,对照官方的车模改个对应的关节名字不就完事了~

其实想要发现哪里需要修改配置,研究对应的启动文件即可:

<?xml version='1.0'?>

<launch>

  <!-- Load joint controller configurations from YAML file to parameter server -->
  <rosparam file="$(find racecar_control)/config/racecar_control.yaml" command="load"/>

  <!-- load the controllers -->
  <node name="controller_manager" pkg="controller_manager" type="spawner" respawn="false"
        output="screen" ns="/racecar" args="left_rear_wheel_velocity_controller right_rear_wheel_velocity_controller
                                            left_front_wheel_velocity_controller right_front_wheel_velocity_controller
                                            left_steering_hinge_position_controller right_steering_hinge_position_controller
                                            joint_state_controller"/>

  <!-- convert joint states to TF transforms for rviz, etc -->
  <node name="robot_state_publisher" pkg="robot_state_publisher" type="robot_state_publisher" respawn="false" output="screen">
    <remap from="/joint_states" to="/racecar/joint_states" />
  </node>

  <!-- servo node -->
  <node pkg="racecar_control" type="servo_commands.py" name="servo_commands" output="screen">
    <remap from="/racecar/ackermann_cmd_mux/output" to="/vesc/low_level/ackermann_cmd_mux/output"/>
  </node>

  <!-- Allow for Gazebo to broadcast odom -->
  <node pkg="racecar_gazebo" name="gazebo_odometry_node" type="gazebo_odometry.py"/>

</launch>

这里面这一段代码就提示了修改racecar_control.yaml文件嘛:

<!-- Load joint controller configurations from YAML file to parameter server -->
  <rosparam file="$(find racecar_control)/config/racecar_control.yaml" command="load"/>
  <node name="controller_manager" pkg="controller_manager" type="spawner" respawn="false"
        output="screen" ns="/racecar" args="left_rear_wheel_velocity_controller right_rear_wheel_velocity_controller
                                            left_front_wheel_velocity_controller right_front_wheel_velocity_controller
                                            left_steering_hinge_position_controller right_steering_hinge_position_controller
                                            joint_state_controller"/>

接下来你应该知道还有啥要修改的了!仔细阅读源码~

享受比赛~

附件:关于添加锥桶

gazebo是可以直接打开world文件的,命令格式:

gazebo ***.world

官方提供的场地目前没加锥桶,我们可以自己添加,首先下载gazebo的模型:

链接:http://pan.baidu.com/s/1pKaeg0F 密码:cmxc (来自rosclub.cn)

或是下载https://bitbucket.org/osrf/gazebo_models/downloads/ (ExBot ROS专区,网友提醒)

下载后找到官方的场地world文件,进入那个文件夹:

gazebo racetrack.world

在这里插入图片描述
点击左上角insert插入锥桶:
在这里插入图片描述
插入后保存新的world文件,点击左上角:
在这里插入图片描述
选择save world as替换官方的world即可:
在这里插入图片描述

最后github项目racecar点个star不过分吧,最近在学习无人驾驶后续在仿真完善一下哈哈哈:传送门

发表评论

后才能评论

评论列表(18条)

  • 飞梦 2020年10月23日 下午8:00

    大佬 我配置完小车控制器和launch 启动文件然后我启动进入gazebo 用tk 控制小车为啥不动啊

  • 真相只有一个 2020年7月14日 下午9:10

    请问一下那个robot_control.yaml中的pid参数该怎么调呀,新手求指导

    • 布剪刀石头 回复 真相只有一个 2020年7月20日 上午10:39

      这个不调应该也行,仿真里的我也没跳过,如果你想调,首先你得测速,然后观察当前速度逼近你发布的目标速度的曲线,根据响应快慢以及曲线在你的目标速度附近的震荡来调节pid

  • 星陨 2020年7月13日 下午7:32

    [gazebo-2] process has died [pid 40842, exit code 139, cmd /opt/ros/kinetic/lib/gazebo_ros/gzserver -e ode /home/riki/catkin_ws/src/racecar/racecar_gazebo/worlds/racecar_runway.world __name:=gazebo __log:=/home/riki/.ros/log/b88bdec6-c4fb-11ea-92e9-000c291751db/gazebo-2.log].
    log file: /home/riki/.ros/log/b88bdec6-c4fb-11ea-92e9-000c291751db/gazebo-2*.log
    楼主请问一下出现这种情况怎么解决,忙活一下午了其他问题都解决了就差这个了,gazebo我也升级到7.16.0了,以前打开的gazebo我也杀死了,还是一直出现这种问题

  • 佛系男孩、 2020年7月9日 下午6:01

    请问具体怎么给小车加控制器啊,这里老是报错

  • 2020年7月9日 下午3:53

    大佬,我配置rf2o,出现了这个error:”base_footprint” passed to lookupTransform argument target_frame does not exist.
    该怎么解决

    • 布剪刀石头 回复 2020年7月9日 下午9:46

      ~/racecar_ws/src/racecar_gazebo/scripts/gazebo_odometry.py这个文件的base_link改成base_footprint

  • 布剪刀石头 2020年7月6日 下午5:38

    我试了使用gmapping建图效果好像不太行,地图会重合,odom在跳跃也不知道啥原因,试了hector建图效果就好多了,可以尝试配置hector~

    • 7djip_6698 回复 布剪刀石头 2020年7月6日 下午6:53

      大佬 我配置gamping出现这个错误:Error: TF_DENORMALIZED_QUATERNION: Ignoring transform for child_frame_id “base_link” from authority “unknown_publisher” because of an invalid quaternion in the transform 是啥意思

    • 布剪刀石头 回复 7djip_6698 2020年7月6日 下午7:22

      他的模型基准是base_footprint不是base_link,你找找哪里少改了

    • oeafh_3827 回复 7djip_6698 2020年7月22日 上午9:39

      老哥,解决了吗?

    • hfqmd_2516 回复 布剪刀石头 2020年7月7日 下午3:35

      大佬您好,请问一下把所有base_link都改成了base_footprint还是一样的报错,还需要改其他地方吗,能提示一下吗

    • vr4r5_8851 回复 hfqmd_2516 2020年7月7日 下午4:14

      一样的问题,请问解决啦吗

    • 布剪刀石头 回复 hfqmd_2516 2020年7月7日 下午10:16

      grep -r “关键字” .
      上面这个命令查文件夹所有文件关节字,你自己查查吧

  • jixs3_7109 2020年7月6日 下午4:17

    站在大佬肩膀上比赛

    • 布剪刀石头 回复 jixs3_7109 2020年7月6日 下午5:32

      加油呀,还挺费劲的配置环境,我跟庄园老哥推荐了上传配置好运动控制器的代码但是好像说不过他们哎~

    • Sarmen 回复 布剪刀石头 2020年11月9日 下午1:35

      [ERROR] [1604898411.916711, 6.830000]: Failed to load rear_right_velocity_controller
      [INFO] [1604898411.917470, 6.831000]: Loading controller: rear_left_velocity_controller
      [ERROR] [1604898412.923500, 7.815000]: Failed to load rear_left_velocity_controller
      请问这个错误是什么原因?谢谢