这一部分主要介绍视觉导航系统中各个功能模块的编译和使用,其中包括command_center
(命令模块),Trans_msg
(消息转换模块),Planner
(局部路径规划模块),PathTracking
(路径跟踪模块),以上模块分别对应资源包中的那几个文件夹下的C++工程,这些都需要用到Qt来编译。此外,还有一个文件夹Map
是放各种地图的。
安装请参考:
https://blog.csdn.net/qq_44020228/article/details/125057917
我们的项目需要用终端打开Qt,这样才能加载环境变量。
设置你的~/.bashrc
使用指令来打开Qt。
做法如下:
1.将这段指令粘贴到~/.bashrc
中
alias qt="/home/swc/Qt5.14.2/Tools/QtCreator/bin/qtcreator.sh"
其中qt=" "中改成你qtcreator.sh
所在的目录,上面那段指令的意思是你在终端输入“qt”即可运行qtcreator.sh
这个文件打开Qt。
2. 保存后source
一下~/.bashrc
,打开终端输入指令打开Qt:
qt
command_center
工程在这里,我们以command_center
工程为例进行说明。
1.通过终端的方式打开Qt,打开command_center.pro
文件打开工程:
2.projects->Bulid&Run->build 取消勾选框
command_center.pro
文件的依赖右键->rebuild,编译成功即可,如果报错请留言(一般是依赖没写对)。
Planner
工程其他步骤与2.1中相同,不同的地方在于.pro文件的修改不同:
Planner.pro
文件修改这里好像可以不用改,先直接编译,如果报错,对照下面框框里的依赖有没有。如果报某一项没有,先注释掉该项后再编译,如果不报错了则说明可以不需要该项依赖,如果还报错则需要安装相应的库(安装之前请先留言博主,看是否是必须依赖,避免安装采坑)
PathTracking
工程该工程的做法和Planner
工程一模一样。
Trans_msg
工程该工程内容有点多,因为该工程用于发布carla地图,CARLA中有很多地图,目前该项目提供Town01
,Town02
,Town05
,Town07
这四个地图。具体做法如下:
打开项目后在trans_msg.cpp
文件下替换地图的路径,分别需要替换的地方如下:
town_num = 7; //城镇的编号
map = cv::imread("/home/swc/Desktop/owx/carla/control_plan/Trans_msg/Town0" + to_string(town_num) + ".jpg"); //将前面的路径改成自己的
map_go=cv::imread("/home/swc/Desktop/owx/carla/control_plan/Trans_msg/tpTown07.jpg"); //换图片的路径
map_go=cv::imread("/home/swc/Desktop/owx/carla/control_plan/Trans_msg/tpTown07.jpg");//换图片路径
路径换完后与上面Planner
工程一样重新编译,以后想换地图都需要重新编译。
shell
文件运行项目。所有的shell
文件都在shell
文件夹下面。
start.sh
文件该.sh
文件是总的启动文件,用于启动各个模块的.sh
。请留意代码中的注释说明
#!/bin/bash
shell_path="/home/swc/Desktop/owx/carla/shell/" #换成你自己的shell文件夹的路径
gnome-terminal --window -e "bash -c ${shell_path}/COMMAND_CENTER.sh;exec bash" \ #用于启动COMMAND_CENTER.sh
--tab -e "bash -c ${shell_path}/Trans.sh;exec bash" \ #用于启动Trans.sh
--tab -e "bash -c ${shell_path}/PLANNER.sh;exec bash" \ #用于启动PLANNER.sh
--tab -e "bash -c ${shell_path}/TRACKER.sh;exec bash" \#用于启动TRACKER.sh
COMMAND_CENTER.sh
文件用于启动command_center
项目。请留意代码中的注释说明
#!/bin/bash
program_name="F2_Ctrl_Puber_End"
printf "\e]2;command_center\a"
source /opt/ros/melodic/setup.bash #ROS路径
cd /home/swc/Desktop/owx/carla/control_plan/command_center/bin/ #这是2中编译的各个工程编译后的可执行文件的位置,换成你的路径
ps -ef|grep -w $program_name |grep -v "grep"
if [ $? -ne 0 ]
then
./$program_name
sleep 2
ps -ef|grep $program_name |grep -v "grep"
if [ $? -eq 0 ]
then
echo "$program_name start sucess by shell!"
else
echo "$program_name start failed"
fi
else
echo "$program_name is already runing!"
fi
Trans.sh
文件用于启动Trans_msg
工程,这个文件与其他文件不同,该工程通过Qt编译后生成的可执行文件名为Autocar_cpp
在这个目录下/xyx/control_plan/Trans_msg
,需要将该执行文件替换/xyx/control_plan/Trans_msg/bin
目录下的Trans_msg
文件。做法如下:
/xyx/control_plan/Trans_msg/bin
目录下的Trans_msg
文件。/xyx/control_plan/Trans_msg
下的Autocar_cpp
重命名为Trans_msg
后复制到/xyx/control_plan/Trans_msg/bin
目录下。#!/bin/bash
program_name="Trans_msg"
printf "\e]2;%s\a" $program_name
source /opt/ros/melodic/setup.bash
cd /home/swc/Desktop/owx/carla/control_plan/Trans_msg/bin/ #这个工程你需要用qt重新编译,然后换成你的路径
ps -ef|grep -w $program_name |grep -v "grep"
if [ $? -ne 0 ]
then
./$program_name
sleep 2
ps -ef|grep $program_name |grep -v "grep"
if [ $? -eq 0 ]
then
echo "$program_name start sucess by shell!"
else
echo "$program_name start failed"
fi
else
echo "$program_name is already runing!"
fi
TRACKER.sh
文件用于启动PathTracking
工程,请留意代码中的注释说明。
#!/bin/bash
program_name="Tracker"
printf "\e]2;%s\a" $program_name
source /opt/ros/melodic/setup.bash
cd /home/swc/Desktop/owx/carla/control_plan/PathTracking/bin/ #这个工程你需要用Qt重新编译,然后换成你的路径
ps -ef|grep -w $program_name |grep -v "grep"
if [ $? -ne 0 ]
then
./$program_name
sleep 2
ps -ef|grep $program_name |grep -v "grep"
if [ $? -eq 0 ]
then
echo "$program_name start sucess by shell!"
else
echo "$program_name start failed"
fi
else
echo "$program_name is already runing!"
fi
PLANNER.sh
文件用于启动Planner
工程,请留意代码中的注释说明。
#!/bin/bash
program_name="Planner"
printf "\e]2;%s\a" $program_name
source /opt/ros/melodic/setup.bash
#export ROS_HOSTNAME=wrc
#export ROS_MASTER_URI=http://10.42.0.176:11311
cd /home/swc/Desktop/owx/carla/control_plan/Planner/bin/ #这个工程你需要用Qt重新编译,然后换成你的路径
ps -ef|grep -w $program_name |grep -v "grep"
if [ $? -ne 0 ]
then
./$program_name
sleep 2
ps -ef|grep $program_name |grep -v "grep"
if [ $? -eq 0 ]
then
echo "$program_name start sucess by shell!"
else
echo "$program_name start failed"
fi
else
echo "$program_name is already runing!"
fi
修改完上述shell
文件后在终端运行如下指令即可运行所有功能模块。
./start.sh
运行成功如图所示: