第十七届恩智浦杯室外ROS无人车竞速赛仿真

 学长说让以考促学,用做过的比赛来检验ROS的学习效果,看我们能不能灵活运用。(′д`)ゞ

目录

1.vscode准备工作

2.首先需要搭建gazebo仿真环境

3.launch文件打开gazebo仿真环境代码集成主要包括两大部分


        才做了一个开头车还不会动,恩智浦杯的实物车出了点问题,我要去解决了。等我以后有时间了会继续做的,这是我脱离视频完成仿真,检验我学习成果的最好方式了。

1.vscode准备工作

创建工作空间kaohe

新建3个功能包备用

功能包名 添加依赖 作用
urdf01_rviz

urdf xacro(xacro文件是对urdf文件的封装优化)

存放小车模型参数,有对应语法,
urdf02_gazebo urdf xacro gazebo_ros gazebo_ros_control(为后续运动控制做准备) gazebo_plugins(gazebo相关插件) 为小车模型添加collision (碰撞属性)、 inertial (惯性矩阵)相关参数
auto_nav

gmapping

map_server

amcl(定位)

move_base(路径规划)

slam建图

地图服务

定位

路径规划

  •  建好功能包后Ctrl+Shift+B编译成功证明导入的功能包没问题
  • 后续需要编写源文件再在package.xml文件中添加依赖roscpp rospy std_msgs
  • 使用到话题通信自定义msg还需要另外添加依赖包(message_generation)和执行依赖(message_runtime)

2.首先需要搭建gazebo仿真环境

根据场地示意图可知,需要红蓝锥桶插件

第十七届恩智浦杯室外ROS无人车竞速赛仿真_第1张图片

  •  先导入gazebo官方插件,具体步骤参考我的另一份CSDN链接:https://editor.csdn.net/md/?articleId=128743413

在Insert目录下找 Construction Cone即是锥桶,然后再改变颜色

第十七届恩智浦杯室外ROS无人车竞速赛仿真_第2张图片

问题:红蓝锥桶颜色修改并保存模型后再打开gazebo锥桶颜色不是修改后的了

解决:尝试了gazebo工具里的插件,甚至改了urdf文件,弄了两天没有成功,所以这个问题 

           没有解决

新想法:查到可以用SolidWorks导入模型到Gazebo,有兴趣可以简单学一下

对锥筒位置进行计算,直线部分数据精准到小数点后6位,弯道部分尽量符合规则

第十七届恩智浦杯室外ROS无人车竞速赛仿真_第3张图片

 打开gazebo画好还没有退出的样子

被框住的部分(5个锥桶)调整了好长时间,不想太拥挤又想让尽量符合赛道尺寸

第十七届恩智浦杯室外ROS无人车竞速赛仿真_第4张图片

 保存为.world文件并集成进launch文件里打开还是在预想的地方出了问题

锥桶颜色问题上面提到了没有解决

第十七届恩智浦杯室外ROS无人车竞速赛仿真_第5张图片

 注:已经画过两次,掌握了在gazebo里自己搭建仿真环境的技巧,这也只是考核内容的开端,后面的才是重头戏,有一个锥桶出了小问题,为了节约时间不再重新画。

3.launch文件打开gazebo仿真环境代码集成主要包括两大部分

 创建仿真环境

  • 可以选择insert,先坐标系中加入已有的模型,也可以通过edit的下拉菜单中的building editor创建一个环境
  • 创建完成后在file下拉菜单中选择save world as 并将环境在功能包下新建文件夹名为worlds再以.world文件形式保存
  • 在launch文件中,设置launch文件的参数处加如.world文件的路径即可,例如:
           
    
           
           
        
    

 导入建好的机器人模型

标签主要用于在参数服务器上设置参数,参数源可以在标签中通过 value 指定,也可以通过外部文件加载,在标签中时,相当于私有命名空间。

    
    
    
    
    

 4.遇到的错误

interest@interest:~$ sudo apt-get install ros-noetic-effort-controllers
正在读取软件包列表... 完成
正在分析软件包的依赖关系树       
正在读取状态信息... 完成       
E: 无法定位软件包 ros-noetic-effort-controllers
  • 要安装对应的版本,咱们用的是noetic版本
Ubuntu ROS End of Life
14.04LTS indigo lgloo Aprial,2019
16.04LTS Kinetic Kame Aprial,2021
18.04LTS Melodic Morenia May,2023
20.04LTS Noetic Ninjemys(Recommended) May,2025
  • ROS软件源有问题

         网上一般说中科大比较好

        但我觉得去软件和更新选择最佳服务器一般的插件都可以下载,有一两个不能下载的换个软件源就好了

  • 需要下载的插件,好多已经安装过了
sudo apt install ros-noetic-joint-state-publisher-gui
sudo apt-get install ros-noetic-driver-base
sudo apt-get install ros-noetic-gazebo-ros-control
sudo apt-get install ros-noetic-effort-controllers
sudo apt-get install ros-noetic-joint-state-controller
sudo apt-get install ros-noetic-ackermann-msgs
sudo apt-get install ros-noetic-global-planner
//阿克曼底盘运动需要的算法
sudo apt-get install ros-noetic-teb-local-planner  

5.用到的命令

是通过键盘控制小车运动的第十七届恩智浦杯室外ROS无人车竞速赛仿真_第6张图片

5-1键盘控制

#1.先启动仿真环境(车和场地)
roslaunch bringup racecar.launch
想实现键盘控制分2步
#2-1将阿克曼的数据消息转换为对应关节
rosrun racecar_description servo_commands.py
#2-2键盘遥控
rosrun racecar_description keyboard_teleop.py

5-2阿克曼运动学与里程计计算

从/gazebo/link_states话题中读取gazebo_msgs/LinkState消息,再从msg.name.index中提取racecar::base_footprint

#打印出来包含所有的关节状态数据(linear and angular and position and orientation)
rostopic echo -n 1 /gazebo/link_states
在rviz中显示里程计,固定坐标系Fixed Frame选择odom
rosrun racecar_description gazebo_odometry.py

手动计算,除了计算理论还要从、racecar/joint_states话题中读取编码器数据,通过imu得到角度,推算机器人位姿

第十七届恩智浦杯室外ROS无人车竞速赛仿真_第7张图片

 

第十七届恩智浦杯室外ROS无人车竞速赛仿真_第8张图片

 

#读编码器和imu数据转换成里程计(路程计算公式)信息进行发布
rosrun racecar_description gazebo_odometry.py

5-3使用slam_gmapping建图

#同时启动rviz和gazebo
roslaunch bringup racecar_gazebo_rviz.launch
#启动键盘控制节点
rosrun racecar_description keyboard_teleop.py
#开机建图命令
roslaunch bringup slam_gmapping.launch

5-4导航

#安装必备的功能包
interest@interest:~/kaohe$ rosdep install teb_local_planner
#All required rosdeps installed successfully
#导航命令,可以自动加载建图时保存的地图
roslaunch bringup move_base.launch

总结:导航效果很不理想,猜测建图时我键盘控制小车不稳定有很大原因,小车速度也没有加很大不好控制。从中我理解了从运动--建图--导航的过程;但是小车只能键盘控制,写一个融合代码小车自己根据命令就能跑是下一步的目标。
 

你可能感兴趣的:(机器人)