学长说让以考促学,用做过的比赛来检验ROS的学习效果,看我们能不能灵活运用。(′д`)ゞ
目录
1.vscode准备工作
2.首先需要搭建gazebo仿真环境
3.launch文件打开gazebo仿真环境代码集成主要包括两大部分
才做了一个开头车还不会动,恩智浦杯的实物车出了点问题,我要去解决了。等我以后有时间了会继续做的,这是我脱离视频完成仿真,检验我学习成果的最好方式了。
创建工作空间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)
根据场地示意图可知,需要红蓝锥桶插件
在Insert目录下找 Construction Cone即是锥桶,然后再改变颜色
问题:红蓝锥桶颜色修改并保存模型后再打开gazebo锥桶颜色不是修改后的了
解决:尝试了gazebo工具里的插件,甚至改了urdf文件,弄了两天没有成功,所以这个问题
没有解决
新想法:查到可以用SolidWorks导入模型到Gazebo,有兴趣可以简单学一下
对锥筒位置进行计算,直线部分数据精准到小数点后6位,弯道部分尽量符合规则
打开gazebo画好还没有退出的样子
被框住的部分(5个锥桶)调整了好长时间,不想太拥挤又想让尽量符合赛道尺寸
保存为.world文件并集成进launch文件里打开还是在预想的地方出了问题
锥桶颜色问题上面提到了没有解决
注:已经画过两次,掌握了在gazebo里自己搭建仿真环境的技巧,这也只是考核内容的开端,后面的才是重头戏,有一个锥桶出了小问题,为了节约时间不再重新画。
创建仿真环境
导入建好的机器人模型
标签主要用于在参数服务器上设置参数,参数源可以在标签中通过 value 指定,也可以通过外部文件加载,在
标签中时,相当于私有命名空间。
4.遇到的错误
interest@interest:~$ sudo apt-get install ros-noetic-effort-controllers
正在读取软件包列表... 完成
正在分析软件包的依赖关系树
正在读取状态信息... 完成
E: 无法定位软件包 ros-noetic-effort-controllers
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 |
网上一般说中科大比较好
但我觉得去软件和更新选择最佳服务器一般的插件都可以下载,有一两个不能下载的换个软件源就好了
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
总结:导航效果很不理想,猜测建图时我键盘控制小车不稳定有很大原因,小车速度也没有加很大不好控制。从中我理解了从运动--建图--导航的过程;但是小车只能键盘控制,写一个融合代码小车自己根据命令就能跑是下一步的目标。