学长说让以考促学,用做过的比赛来检验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仿真环境
根据场地示意图可知,需要红蓝锥桶插件
- 先导入gazebo官方插件,具体步骤参考我的另一份CSDN链接:https://editor.csdn.net/md/?articleId=128743413
在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版本
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.用到的命令
是通过键盘控制小车运动的
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导航文章来源:https://www.toymoban.com/news/detail-701140.html
#安装必备的功能包
interest@interest:~/kaohe$ rosdep install teb_local_planner
#All required rosdeps installed successfully
#导航命令,可以自动加载建图时保存的地图
roslaunch bringup move_base.launch
总结:导航效果很不理想,猜测建图时我键盘控制小车不稳定有很大原因,小车速度也没有加很大不好控制。从中我理解了从运动--建图--导航的过程;但是小车只能键盘控制,写一个融合代码小车自己根据命令就能跑是下一步的目标。
文章来源地址https://www.toymoban.com/news/detail-701140.html
到了这里,关于第十七届恩智浦杯室外ROS无人车竞速赛仿真的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!