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

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

目录

1.vscode准备工作

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

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


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

1.vscode准备工作

创建工作空间kaohe

新建3个功能包备用

功能包名添加依赖作用
urdf01_rviz

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

存放小车模型参数,有对应语法,
urdf02_gazebourdf 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仿真环境

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

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

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

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

           没有解决

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

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

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

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

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

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

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

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

 创建仿真环境

  • 可以选择insert,先坐标系中加入已有的模型,也可以通过edit的下拉菜单中的building editor创建一个环境
  • 创建完成后在file下拉菜单中选择save world as 并将环境在功能包下新建文件夹名为worlds再以.world文件形式保存
  • 在launch文件中,设置launch文件的参数处加如.world文件的路径即可,例如:
           <!-- 启动 gazebo,这个是ros里内置的 -->
    <include file="$(find gazebo_ros)/launch/empty_world.launch" >
           <!-- 别人写好的仿真环境放到功能包下,在launch文件里启动 -->
           <!-- name="world_name"是固定的,其他的加载不出来;
           value路径是自己建好的gazebo环境保存的路径 -->
        <arg name="world_name" value="$(find urdf2_gazebo)/worlds/box_house.world" />
    </include>

 导入建好的机器人模型

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

    <!-- 将 Urdf 文件的内容加载到参数服务器 -->
    <param name="robot_description" command="$(find xacro)/xacro $(find urdf2_gazebo)/urdf/car.urdf.xacro" />
    <!-- 在 gazebo 中显示机器人模型 ,内置的-->
    <!-- args参数解释:从参数服务器的robot_description加载urdf格式的数据,产生一个新的模型,并把这个模型命名为mycar -->
    <node pkg="gazebo_ros" type="spawn_model" name="model" args="-urdf -model mycar -param robot_description"  />
</launch>

 4.遇到的错误

interest@interest:~$ sudo apt-get install ros-noetic-effort-controllers
正在读取软件包列表... 完成
正在分析软件包的依赖关系树       
正在读取状态信息... 完成       
E: 无法定位软件包 ros-noetic-effort-controllers
  • 要安装对应的版本,咱们用的是noetic版本
UbuntuROSEnd of Life
14.04LTSindigo lglooAprial,2019
16.04LTSKinetic KameAprial,2021
18.04LTSMelodic MoreniaMay,2023
20.04LTSNoetic 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.用到的命令

是通过键盘控制小车运动的

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得到角度,推算机器人位姿

 

 

#读编码器和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

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

  • 8
    点赞
  • 53
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 11
    评论
ROS是一种用于机器人开发的开源框架,而无人车自主跟随基于视觉的仿真教程,可以让我们了解如何使用ROS框架实现无人车的自主跟随功能。本教程将提供以下步骤: 1. 安装ROS 2. 下载并安装仿真环境 3. 配置ROS工作环境 4. 编写ROS节点 5. 测试程序 以下是详细的步骤说明: 1. 安装ROS 在开始之前,您需要先安装ROS。您可以按照ROS官方网站上的说明进行安装: http://wiki.ros.org/ROS/Installation 2. 下载并安装仿真环境 在本教程中,我们将使用Gazebo仿真环境和RViz视觉化工具。您可以使用以下命令安装: ```bash sudo apt-get install ros-<distro>-gazebo-ros-pkgs ros-<distro>-gazebo-ros-control sudo apt-get install ros-<distro>-rviz ``` 其中,`<distro>`应该替换为您正在使用的ROS版本,例如“kinetic”或“melodic”。 3. 配置ROS工作环境 在开始编写ROS程序之前,您需要设置ROS工作环境。请按照以下步骤执行: ```bash mkdir -p ~/catkin_ws/src cd ~/catkin_ws/ catkin_make source devel/setup.bash ``` 这将创建一个名为“catkin_ws”的工作空间,并为ROS设置必要的环境变量。 4. 编写ROS节点 在此步骤中,我们将编写ROS节点以实现无人车的自主跟随功能。您可以使用以下命令在“src”文件夹中创建一个新的ROS包: ```bash cd ~/catkin_ws/src catkin_create_pkg follow_car rospy ``` 这将创建一个名为“follow_car”的ROS包,并使用Python编写ROS节点。现在,您可以使用文本编辑器打开“follow_car”文件夹中的“src”文件夹,并创建一个名为“follow_car_node.py”的新文件。请在该文件中添加以下代码: ```python #!/usr/bin/env python import rospy from sensor_msgs.msg import Image from cv_bridge import CvBridge import cv2 class FollowCar: def __init__(self): self.bridge = CvBridge() self.image_sub = rospy.Subscriber('/camera/image_raw', Image, self.callback) def callback(self, data): cv_image = self.bridge.imgmsg_to_cv2(data, 'bgr8') # 在此添加跟随功能代码 cv2.imshow('Follow Car', cv_image) cv2.waitKey(1) if __name__ == '__main__': rospy.init_node('follow_car_node') fc = FollowCar() rospy.spin() ``` 上述代码使用OpenCV库接收摄像头图像,并在回调函数中实现跟随功能。您可以按照您的需求更改代码以实现想要的跟随方式。 5. 测试程序 现在,您可以使用以下命令运行ROS节点: ```bash roscore ``` 在新的终端中,使用以下命令启动Gazebo仿真环境: ```bash roslaunch gazebo_ros empty_world.launch ``` 接下来,您需要将无人车模型添加到仿真环境中。您可以使用以下命令将无人车模型添加到仿真环境中: ```bash roslaunch gazebo_ros spawn_model -file ~/catkin_ws/src/follow_car/models/car.urdf -urdf -x 0 -y 0 -z 1 -model car ``` 这将在仿真环境中添加一个名为“car”的无人车模型。现在,您可以使用以下命令将无人车模型的摄像头图像发布到ROS话题中: ```bash rosrun gazebo_ros gzclient ``` 在新的终端中,您可以使用以下命令运行ROS节点: ```bash rosrun follow_car follow_car_node.py ``` 现在,您应该可以在新的窗口中看到无人车的视频流,并且车辆应该开始跟随。 总结 本教程提供了如何使用ROS框架实现无人车自主跟随功能的步骤。在完成此教程后,您应该熟悉ROS的基本概念,并可以使用ROS框架开发自己的机器人应用程序。
评论 11
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

不想努力又想飞

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值