大学生智能汽车竞赛系列教程 第四章赛事模板程序
一、依赖
请按照先前教程完成首先确认ros安装,按照先前教程完成工作空间(gazebo_test_ws)创建,建图功能包(gazebo_map)、导航功能包(gazebo_nav)的搭建。
sudo apt-get install ros-melodic-cartographer*
sudo apt-get install ros-melodic-navigation
sudo apt install ros-melodic-teleop-twist-keyboard
sudo apt install ros-melodic-rqt-graph
1.1 准备工作
-
把赛事模板程序文件夹解压缩到/home
-
在/home 建立工作空间gazebo_test_ws,在目录下建立src,将gazebo_map,gazebo_nav,gazebo_pkg,start_game放在src目录下。若已完成之前教程,仅需把start_game移动至gazebo_test_ws/src
-
在gazebo_test_ws目录下,catkin_make编译
cd ~/gazebo_test_ws
catkin_make
- 在脚本目录下,首先执行命令:
cd ~/gazebo_test_ws/src/start_game
sudo chown YourAccountName *
chmod u+x *.py
- YourAccountName 替换成自己的用户名
- 上面两条命令是为了防止文件权限没有在传输中丢失,添加执行权限,从而为后面的操作打下基础
1.2 在gazebo_test_ws/src下创建功能包gazebo_nav
- 打开终端输入如下指令:
cd gazebo_test_ws/src
catkin_create_pkg gazebo_nav //功能包创建完毕
cd ..
catkin_make //编译功能包
二、文件结构
.
├── gazebo_map # 建图部分
│ ├── cfg
│ └── launch
│ └── map
│ └── CMakeLists.txt
│ └── package.xml
├── gazebo_nav # 导航部分
│ ├── map # 导航所需地图
│ └── launch
│ │ ├── navi_demo.launch # 导航所需地图位置在此处修改
│ │ └── config # 参数配置文件
│ └── CMakeLists.txt
│ └── package.xml
├── start_game # 脚本部分
│ ├── main.py # 执行脚本
│ └── initialize.py # 修改工作空间和urdf路径
│ └── interactive.py
│ └── ros_module.py
│ └── pose.json # 导航点
│ └── log.txt
│ └── vital_log.txt
│ └── resources
│ │ ├── ucar_plane
└── gazebo_pkg
2.1 功能讲解
2.2.1 地图位置及命名
- 导航所需地图在~/gazebo_test_ws/src/gazebo_nav/launch/navi_demo.launch,$(find gazebo_map)/map/game_map.yaml为地图所在位置
<node name="map_server" pkg="map_server" type="map_server" args="$(find gazebo_map)/map/game_map.yaml" output="screen">
<param name="frame_id" value="map" />
</node>
- 若选手的地图在其他位置,将路径写入args后。其中,gazebo_map为功能包,map为功能包目录下文件夹,game_map为地图名称。
- 若选手希望将地图名称及位置修改与上图一致,将地图.png及地图.yaml文件移至~/gazebo_test_ws/src/gazebo_map/map目录下,并修改.png及.yaml文件名称,注意修改.yaml文件第一行地图名称。
2.2.2 导航
- 导航目标点在~/gazebo_test_ws/src/start_game/pose.json修改。其中,position下x,y,z为导航目标点位置信息,orientation下x,y,z,w为导航目标点姿态信息。
{
"position":
{
"x": -0.25,
"y": -5.3,
"z": 0.0
},
"orientation":
{
"x": 0.0,
"y": 0.0,
"z": 1.0,
"w": 0.0
}
}
- 选手可在~/gazebo_test_ws/src/start_game/main.py launch_pkg()中nav_cmd修改导航指令
nav_cmd = [
'roscore',
'sleep 5; roslaunch gazebo_pkg race.launch',
'sleep 5; roslaunch gazebo_nav navi_demo.launch' # 此处可以替换为选手的launch文件
]
其中,‘roslaunch gazebo_pkg race.launch’为打开仿真环境;'roslaunch gazebo_nav navi_demo.launch’为开启导航模块。
导航模块可以替换为选手自己的launch文件,但需要修改start_game/main.py launch_pkg()的内容。
例如
nav_cmd = [
'roscore',
'sleep 5; roslaunch gazebo_pkg race.launch',
'sleep 5; roslaunch ucar_nav your_navigation.launch' # 修改的地方为此处
]
三、注意事项
3.1.1选手不应当使用root执行本脚本
- 指令前不添加sudo
3.1.2 选手应当将python2默认编码修改为utf-8
修改方法见先前教程
3.1.3 若选手文件层级与教程不同,请选手完善自己urdf文件路径
- 在home路径下 ctrl-F 搜索车模urdf文件夹路径
- 将该文件夹位置,补全到 start_game/initialize.py 第十三行
#Description:
11 from interactive import show, get_bool_ans, get_str_ans, save
12
13 model_path = '~/gazebo_test_ws/src/gazebo_pkg/urdf' #修改此处内容
14 workspace_path = 'source ~/gazebo_test_ws/devel/setup.bash'
15
16 def install_pkg():
3.1.4 若选手文件层级与教程不同,请选手完善自己的工作空间路径
- 将工作空间路径,补全到 start_game/initialize.py 第十四行
11 from interactive import show, get_bool_ans, get_str_ans, save
12
13 model_path = '~/gazebo_test_ws/src/gazebo_pkg/urdf'
14 workspace_path = 'source ~/gazebo_test_ws/devel/setup.bash' #修改此处内容
15
16 def install_pkg():
3.2 运行模板程序
在gazebo_test_ws/src/start_game目录下,运行main.py
cd ~/gazebo_test_ws/src/start_game
python2 main.py
脚本运行后,会提醒选手是否开启录屏,若开启,可以回答“Y”并回车。
接着,脚本所在目录中gazebo_pkg 文件夹下的urdf进行 MD5 校验.
之后,本脚本将自动打开三个标签页,并执行如下命令
'roscore'
'sleep 5; roslaunch gazebo_pkg race.launch',
'sleep 5; roslaunch gazebo_nav navi_demo.launch'
具体执行哪些命令可以参照功能讲解修改,这里不再赘述。后两条命令中sleep 5的目的是保证其他程序在roscore启动完成后才被执行。
全部命令执行完成后,命令行提示“上述命令是否已全部在其他窗口正确执行? [Y/n]”,这里作出肯定回答
提示“是否开始比赛计时?(务必等待所有软件启动完成后开始!)”,这里继续作出肯定回答,仿真开始,按屏幕上指示进行即可,仿真期间每 30s 打印一次 Topic list。
3.3 收尾工作
3.3.1 记录运行时间