diff --git a/docs/specs/D-kit/Waypoint_following--Apollo_software_installation_cn.md b/docs/specs/D-kit/Waypoint_following--Apollo_software_installation_cn.md index 03800491da6cfe48b3e3776b951e623f31a0fa6f..8769ba270f94e862719bf471fe10d580c3ccb666 100644 --- a/docs/specs/D-kit/Waypoint_following--Apollo_software_installation_cn.md +++ b/docs/specs/D-kit/Waypoint_following--Apollo_software_installation_cn.md @@ -250,7 +250,7 @@ cd can-utils/ ![图片](https://agroup-bos.cdn.bcebos.com/0d1f81329fa9f84ad143af20166b8adf38c95d91) 则表示Can驱动安装成功。 d.注意事项: -在后续启动apollo的canbus模块时,需要先在doc外运行start.sh脚本。 +在后续启动apollo的canbus模块时,需要先在docker外运行start.sh脚本。 ### 安装Docker diff --git a/docs/specs/D-kit/Waypoint_following--Localization_configuration_cn.md b/docs/specs/D-kit/Waypoint_following--Localization_configuration_cn.md new file mode 100644 index 0000000000000000000000000000000000000000..d79d6cc54caf3ecaffb1394edfbbde4e96dc2123 --- /dev/null +++ b/docs/specs/D-kit/Waypoint_following--Localization_configuration_cn.md @@ -0,0 +1,129 @@ +定位模块配置 +=================== + +## 目录 + + - [概览](#概览) + + - [导航设备配置](#导航设备配置) + + - [系统文件配置](#系统文件配置) + +## 概览 + +该手册旨在帮助用户在自动驾驶开发套件上配置定位模块。在定位模块配置环节,将完成导航设备配置。 + +## 导航设备配置 + +下面介绍了导航配置的方法。当设备正确接入系统后,在/dev/下面有名为ttyACM0的设备,即表示M2已经被正确的加载了。配置设备时,需要将设备的串口线连接上电脑的串口才可以对设备进行配置,也就是说,用来配置设备的电脑主机需要拥有串口。Windows下可以通过串口助手、串口猎人或者COMCenter等工具进行配置,Linux下可以通过Minicom、cutecom等工具进行配置。linux下建议使用cutecom软件,可使用`sudo apt-get install cutecom`来安装此软件,在终端中使用`sudo cutecom`命令打开该软件,在软件中`open`名为`ttyS0`的设备。 + +### 杆臂配置 + +车尾天线(后天线,通常是主天线,也就是Primary)杆臂配置: + +`$cmd,set,leverarm,gnss,x_offset,y_offset,z_offset*ff` + +这里的杆臂值就是车辆集成环节中测量所得的杆臂值,杆臂值请以自己使用的实际情况为准。 + +### GNSS航向配置 + +天线车头车尾前后安装 + +`$cmd,set,headoffset,0*ff` + +### 导航模式配置 +``` +$cmd,set,navmode,FineAlign,off*ff +$cmd,set,navmode,coarsealign,off*ff +$cmd,set,navmode,dynamicalign,on*ff +$cmd,set,navmode,gnss,double*ff +$cmd,set,navmode,carmode,on*ff +$cmd,set,navmode,zupt,on*ff +$cmd,set,navmode,firmwareindex,0*ff +``` + +### USB接口输出设置 +``` +$cmd,output,usb0,rawimub,0.010*ff +$cmd,output,usb0,inspvab,0.010*ff +$cmd,through,usb0,bestposb,1.000*ff +$cmd,through,usb0,rangeb,1.000*ff +$cmd,through,usb0,gpsephemb,1.000*ff +$cmd,through,usb0,gloephemerisb,1.000*ff +$cmd,through,usb0,bdsephemerisb,1.000*ff +$cmd,through,usb0,headingb,1.000*ff +``` +### 网口配置 +``` +$cmd,set,localip,192,168,0,123*ff +$cmd,set,localmask,255,255,255,0*ff +$cmd,set,localgate,192,168,0,1*ff +$cmd,set,netipport,111,112,113,114,8000*ff +$cmd,set,netuser,username:password*ff +$cmd,set,mountpoint,XMJL*ff +``` +这里我们假设您所使用的无线路由器的IP地址为192.168.0.1,那么我们将M2主机的IP地址设置为192.168.0.123,子网掩码为255.255.255.0,网关为192.168.0.1,netipport设置的是RTK基站的IP地址和端口,netuser设置的是RTK基站的用户名和密码,mountpoint是RTK基站的挂载点。网络配置请依据自己所使用的路由器的实际情况自行更改为相应的配置,RTK基站信息请以自己的实际情况为准。注意:在M2的网络模块配置完成后,在IPC主机中应该是可以ping通IMU的ip地址的;否则,IMU无法正常联网,在后续的GNSS信号检查中会一直显示SINGLE而不是我们期望的NARROW_INT。 + +### PPS授时接口输出 +``` +ppscontrol enable positive 1.0 10000 +log com3 gprmc ontime 1 0.25 +``` + +将所有配置逐条发送给设备,得到设备返回`$cmd,config,ok*ff`字段,说明配置成功,配置成功后要进行配置保存,发送`$cmd,save,config*ff`指令,然后将该设备断电后重新上电加载后即可使用。注意:PPS授时接口输出的两条配置命令是没有返回`$cmd,config,ok*ff`字段的,这是正常情况,不用担心。 + +## 系统文件配置 + +系统文件配置主要包括三个部分,GNSS配置、关闭点云定位和定位模式配置。 + +### GNSS配置 + +修改`/apollo/modules/calibration/data/dev_kit/gnss_conf`文件夹下面的配置文件`gnss_conf.pb.txt`,修改如下内容配置基站信息: +``` +rtk_from { + format: RTCM_V3 + ntrip { + address: "" + port: + mount_point: "" + user: "" + password: "" + timeout_s: 5 + } + push_location: true +} + +``` +这是RTK基站信息相关的配置,请依据自己的实际情况进行配置。注意:RTK基站信息需要同时配置在M2的IMU主机中和apollo的开发套件的`gnss_conf.pb.txt`配置文件中。 + +### 检查GPS信号 + +将车辆移至室外平坦开阔处,进入Apollo系统,在终端中执行gps.sh脚本打开gps模块。输入命令`cyber_monitor`,进入 `/apollo/sensor/gnss/best_pose`条目下,查看sol_type字段是否为NARROW_INT。若为NARROW_INT,则表示GPS信号良好;若不为NARROW_INT,则将车辆移动一下,直到出现NARROW_INT为止。进入`/apollo/sensor/gnss/imu`条目下,确认IMU有数据刷新即表明GPS模块配置成功。 + +### 关闭点云定位 + +在`apollo/modules/localization/conf/localization.conf`文件中将:`--enable_lidar_localization=true`修改为:`--enable_lidar_localization=false`。 + +### 定位模式配置 + +在`apollo/modules/localization/conf/localization_config.pb.txt`文件中这个配置应为`localization_type:MSF`,M2不支持`RTK`模式。 +将`apollo/modules/localization/launch/localization.launch`文件中的`dag_streaming_rtk_localization.dag`修改为`dag_streaming_msf_localization.dag`。 + +### 常见问题 +系统无法生成驱动设备`ttyACM0`,在`/apollo/data/log/gnss.INFO`里面会有类似报错提示: + +``` +open device /dev/ttyACM0 failed, error: no such file or directory +gnss driver connect failed, stream init failed +``` + +docker内和docker外的/dev/下都没有`ttyACM0`设备,先退出docker,然后关闭docker,再执行如下命令: +``` +cd /apollo/docker/setup_host +bash setup_host.sh +``` +重启工控机,然后在/docker/外,/dev/下,就有`ttyACM0`,再进docker,再试gps,可以了。 + +### 检查定位信号 + +将车辆移至室外平坦开阔处,进入Apollo系统,在终端中执行gps.sh和localization.sh脚本打开gps模块和localization模块。确认GPS模块已成功启动并且GPS信号良好。输入命令`cyber_monotor`,进入`/apollo/localization/pose`条目下,等待两分钟,直到有数据刷新即表明定位模块配置成功。 diff --git a/docs/specs/D-kit/Waypoint_following--Operation_and_questions_cn.md b/docs/specs/D-kit/Waypoint_following--Operation_and_questions_cn.md new file mode 100644 index 0000000000000000000000000000000000000000..8552f0063d3c874ed5d03e1d358c402157ce5e9a --- /dev/null +++ b/docs/specs/D-kit/Waypoint_following--Operation_and_questions_cn.md @@ -0,0 +1,417 @@ +车辆循迹演示及常见问题 +=================== + +## 目录 + + - [概览](#概览) + + - [启动循迹](#启动循迹) + - [系统文件配置](#系统文件配置) + + - [循迹操作说明](#循迹操作说明) + + - [调试与常见问题](#调试与常见问题) + + +## 概览 + +该用户手册旨在帮助用户在开发套件上实现循迹功能。 + +## 启动循迹 + +在完成以上软硬件安装,标定以及系统文件配置后,用户可以通过Dreamview界面录制车辆轨迹并回放,完成第一个循迹演示。 +注意:车辆启动循迹之前一定要先完成标定! +本部分主要分为系统文件配置和循迹操作说明两个方面。 + +### 系统文件配置 + +系统文件配置主要以车辆配置为主,其具体操作如下所示。 + +#### 车辆配置 +所有的车辆配置都是以车型为单位的,一个车型的车辆相关的所有配置都放在一个以车型命名的文件夹里面。Apollo支持的所有的车型都在`/apollo/modules/calibration/data/`目录下。我们以开发套件为例,其在Apollo中的简称为dev-kit,dev-kit文件夹的内容如下: + +- cancard_params目录 +- gnss_conf目录 +- gnss_params目录 +- vehicle_params目录 +- velodyne_conf目录 +- velodyne_params目录 +- control_conf.pb.txt文件 +- novatel_localization_extrinsics.yaml文件 +- README.md文件 +- vehicle_info.pb.txt文件 +- vehicle_params.pb.txt文件 + +`cancard_params`目录是CAN卡相关的配置和参数。 +`gnss_conf`目录主要是关于gps基站相关配置和参数,其中`gnss_conf.pb.txt`是关于基站的配置,其中内容在gps配置部分已经作了说明,必须保证信息正确。 +`gnss_params`目录主要是关于IMU的相关配置和参数。 +`vehicle_params`目录下是关于车辆`translation`和`rotation`相关设置,不用修改。 +`velodyne_conf`目录是激光雷达的相关配置。 +`velodyne_params`目录是激光雷达的相关参数。 + +因此如果只做循迹方案,只需要`gnss_conf目录`,`gnss_params`目录,`vehicle_params`目录,`vehicle_info.pb.txt`文件和`control_conf.pb.txt`文件,其他文件并不需要。 +保证这些文件正确,重新编译,启动`bootstrap`, 就可以在`dreamview`下选择酷黑小车`dev-kit`车辆,进行下面的循迹操作了。 + +除了车辆相关配置外,还需要注意canbus和control模块的配置。分别介绍如下: + +1. `modules/calibration/data/dev-kit/cancard_params/canbus_conf.pb.txt` 修改如下: +``` +enable_debug_mode:true +enable_receiver_log:true +enable_sender_log: true +``` +这三行用于打开debug信息。 + +2. `modules/canbus/conf/canbus.conf` 修改如下: +``` +--enable_chassis_detail_pub +--noreceive_guardian +``` +第一行打开/apollo/canbus/chassis_detail消息,第二行关闭guardian模块。 + + +### 循迹操作说明 + +当gps安装配置好以后,就可以进行循迹测试,所谓的循迹测试是对车辆底盘线控改造的一个综合测试( 对油门刹车档位等的控制 ),以及对apollo控制算法和传感器集成的综合测试。下面按时间先后对循迹测试的步骤做说明。以下所说的操作都是在apollo docker内部。 + +#### 循迹前检查和准备 + +在命令行中执行 +``` +bash bootstrap.sh +``` +启动`dreamview`,浏览器中输入`http://localhost:8888`进入`dreamview`界面,在`dreamview`顶部下拉菜单中选择`dev-kit`车辆(表示选择酷黑车型), `rtk_record_play`表示选择循迹。点击左侧的`task`标签,点击页面中的`reset all` ,接着点击`setup`,将会启动apollo中相应的模块。点击页面左侧的`modules controllers`,然后在右侧查看各个模块的打开情况,蓝色表示处于开启状态,灰色表示模块处于关闭状态,确保`GPS`,`CAN Bus`, `Control`,`Localization`模块是开启的,其他的`Gardian`和`Record Bag`处于关闭状态。 +运行`cyber_monitor`命令,通过以下channel查看`gps`,` imu`,`localization`信号和状态: +``` +/apollo/sensor/gnss/best_pose +/apollo/sensor/gnss/imu +/apollo/localization/pose +``` +都正常,就可以开始进行循迹测试( 有时候`localization`信号没有,可能需要等待一会儿,如果还是没有那么可以尝试让车辆跑一下 )。 + +#### 录制循迹数据包 +车辆开到循迹起始点,保持N档,线控开启,输入以下命令: +``` +cd /apollo/scripts +bash rtk_recorder.sh setup +bash rtk_recorder.sh start ( 命令输入后,开始开车走一段轨迹 ) +bash rtk_recorder.sh stop( 如果无法输入就按Ctrl + C结束 ) +``` +`Ctrl + C`结束后,apollo将会录制一个轨迹数据包garage.csv,放在`data/log/`下(主要记录了位置、刹车、油门、方向、速度等信息)。 + +#### 回放数据包 +N档,线控开启,输入以下命令: +``` +bash scripts/rtk_player.sh setup +bash scripts/rtk_player.sh start ( 这个命令敲完,车还不会反应 ) +``` +发现命令行中record数据被重放,log不停刷屏,`dreamview`会显示大致轨迹,清浏览轨迹是否大致相符,如果相差很大,比如本来录制的时候是直行,而轨迹显示大幅度转弯,请小心测试,谨防危险。 +点击`start auto`,这时候车子会出现反应,并且是大反应(司机注意接管)。`bash scripts/rtk_player.sh start` 这一步只是把record数据重新放出来,或者对路径进行规划,即完成planning的过程。 + +注意事项:一定要在宽阔的场地进行测试,确保周围没有人,循迹测试之前做好应急接管准备,有问题随时遥控器接管。不要轻易尝试速度大于20km/h( 6m/s )的循迹。 + +#### 结束播放 + +输入以下命令来结束播放: + +`bash rtk_player.sh stop` + +如果无法输入就按`Ctrl + C`或者`Ctrl + D` 结束。 + +## 调试与常见问题 + +本小节讲述小车Apollo 循迹过程的实际调试方法和操作,在此之前必须保证环境已经准备好,即Ubuntu 18.04已经装好apollo-kernel,docker,canbus,硬件和传感器已经连接好。 + +### 底盘连接是否正常 + +硬件连接:确保CAN硬件连接线CAN0和车辆线控底盘连接正常,线控底盘开关处于打开状态,进入Ubuntu Docker环境,输入以下命令: + +``` +cd /apollo/scripts +bash bootstrap.sh +bash canbus.sh 启动canbus模块 +cyber_monitor +``` + +在cyber_monitor界面中应该能看到如下的模块: + +![图片](../images/debug_chassis_and_detail.png) + +用键盘上下箭头移动光标选择CHASSIS或者CHASSIS_DETAIL,选中后按右箭头可以进入查看详细信息,这些信息即是车辆底盘信息, CHASSIS消息如下: + +![图片](../images/debug_chassis_topic.png) + +Chassis detail消息如下: + +![图片](../images/debug_chassisdetail_topic.png) + +如果这些信息得到正确显示,说明CANBUS模块工作正常。如果不能显示底盘信息,很大可能是CANBUS有问题,或者底盘有问题,没有向上反馈底盘数据。 +保证CANBUS的连接正确性,才能确定工控机计算单元可以控制车辆底盘,才能继续其它部分的调试。 + +#### canbus_teleop的使用 + +CANBUS能够连接底盘后,我们可以尝试控制底盘的运动。如果控制正常,则说明工控机计算单元下发命令后得到正确执行。 进入Ubuntu Docker环境,输入以下命令: + +``` +cd /apollo/scripts +bash canbus_teleop.sh +``` + +弹出界面如下: + +![图片](../images/debug_teleop.png) + +a 根据提示按M0重置系统,按 M1是开始控制底盘。 +b 按几次A或者D,看看车轮是否转动。 +c 按G1,挂前进档,按几次W,看车辆是否前进,按几次S看车辆是否停下来。 +请小心测试,不要轻易长时间连续按键,以防车辆突然高速动作发生事故。 + +#### 提示警告Nvidia GPU Driver未安装 + +下载并修改apollo-kernel官网上的脚本[install-nvidia.sh](https://github.com/ApolloAuto/apollo-kernel/blob/master/linux/install-nvidia.sh),将`NV_FILE="NVIDIA-Linux-x86_64-375.39.run"`和`NV_URL="http://us.download.nvidia.com/XFree86/Linux-x86_64/375.39/${NV_FILE}"`中的显卡驱动由375.39改为430.50,将`NEED_TO_COMPILE_NV_KO=0`中的0改为1,用`sudo`执行这个脚本完成安装。然后在终端中依次输入以下三条命令: +``` +sudo add-apt-repository ppa:graphics-drivers/ppa +sudo apt-get update +sudo apt-get install nvidia-driver-430 +``` +等待命令执行完成后重启工控机,在终端中输入`nvidia-smi`,能看到显卡的信息且最下面没有出现No running processes found的相关字样,输入`nvidia-settings`能调出显卡的配置界面,系统设置中可以修改屏幕的分辨率且系统信息中可以查看到独立显卡的信息时则表示显卡驱动安装成功。 + +#### 星网宇达M2 GPS调试 + +##### M2硬件设备的配置 + +M2 GPS首先需要保证M2硬件设备配置好,默认出厂的M2已经配置好,可以给百度apollo系统使用,只需要小部分改动,例如杆臂值的配置。 关于杆臂值的配置,请参考上文。 +硬件连接:需要把M2的串口线连接到工控机的串口,M2的USB口连接到工控机的USB口,M2接上电源并上电。 +软件部分:Ubuntu 18.04 系统安装串口调试工具cutecom,安装命令为:`sudo apt-get install cutecom`。 +安装好以后应该可以在/dev/下看到ttyACM0的设备,这就是我们的M2设备名。 + +##### apollo GPS模块相关配置 +根据上文,修改/apollo/modules/drivers/gnss/conf文件夹下面的配置文件。 + +##### M2 GPS状态查看 + +输入以下命令来查看M2 GPS设备的状态: + +``` +cd /apollo/scripts +bash bootstrap.sh +bash gps.sh 启动gps +bash localization.sh 启动localization +``` + + 运行cyber_monitor列出topic,应该可以得出以下结果: + +![图片](../images/debug_gps_topic.png) + +我们在双天线M2 GPS方案中,主要用到如下两个topic:best_pose和imu。cyber_monitor中检查以下channel: + +``` +/apollo/sensor/gnss/best_pose +``` + +![图片](../images/debug_gps_best_pose.png) + +cyber_monitor中检查以下channel: + +``` +/apollo/sensor/gnss/imu +``` + +![图片](../images/debug_gps_imu.png) + +接下来我们通常需要打开localization模块,鉴于后续我们都会用到dreamview模块,所以我们先打开dreamview,然后在dreamview界面中打开localization模块。 +输入命令: +``` + bash bootstrap.sh start +``` +然后在网页中输入`http://IP_ADDRESS:8888`(如果在本地机器可以用`http://localhost:8888` )即可以打开dreamview界面,该界面可以控制和监测车辆自动驾驶动作和效果。选择左侧的modules conttroller,可以出现很多模块,我们点击localization使它变成蓝色即可以打开localization模块,接着在命令行,就可以用命令`cyber_monitor`进入监视界面,进入`/apollo/localization/pose`观察localization的效果,dreamview和localization channel的效果如下图所示: + +![图片](../images/debug_dreamview_localization.png) + +在GPS定位方案中,localization模块和GPS模块相关,如果GPS模块没有打开并正常工作那么localization模块也无法正常工作。 + +如果无法得出以上结果,请到/apollo/data/log/下查看日志gnss.INFO,并根据报错做相应的排查。Apollo所有的日志都在/apollo/data/log/下,要多看这些log才能知道问题和运行过程,更快地完成调试。 + + +#### rtk循迹测试的调试 + +##### 配置dreamview + +在dreamview界面中确保选择自己的车型和RTK_Record/Replay,如下2幅图所示: + +![图片](../images/debug_ch.png) + +![图片](../images/debug_rtk.png) + + +##### 打开传感器 + +确保canbus,control,gps,localization这几个模块是打开的,如下图: + +![图片](../images/debug_turn_on_all.png) + +##### 录制轨迹包 + +车辆保持N档,线控权限交给apollo,然后在命令行中,输入如下命令: + +``` +bash rtk_recorder.sh setup +bash rtk_recorder.sh start ( 输入这条命令后,命令行界面会看到消息不停刷屏,记录车辆运动轨迹,开始用遥控控制车辆走一段距离 ,让车辆停止后,在命令行中ctrl + c按钮结束数据录制 ) +``` + +这些数据会记录到/apollo/data/log/garage.csv文件夹中,如下图所示: + +![图片](../images/debug_record.png) + +##### 回放数据包 + +Dreamview界面要准备好,需要命令行和dreamview界面配合操作,在命令行界面中输入如下命令: + + +``` +bash rtk_player.sh setup +bash rtk_player.sh start +``` + + +如下图所示: + +![图片](../images/debug_rtk_player_start.png) + +这时候会有很多关于轨迹的数据播放并刷屏,dreamview界面中也会看到有一条浅蓝色的线,代表车辆即将要走的轨迹。接下来需要在dreamview 界面中点击Start Auto,如下图所示,车辆开始运动,观察其循迹效果: + +![图片](../images/debug_dreamview_play.png) + +### 常见问题 + +调试过程中,常见的问题及解决办法总结如下: + +#### 网络断开或者网络太差无法进入docker +报错如下: + +![图片](../images/debug_docker.png) + +主要是因为网络没有连接上,或者网络太慢,请检查网路。 + +#### 找不到CANBUS相关报错log +调试过程中,一定要反复看/apollo/data/log/下的报错文件,这些文件对调试apollo和理解apollo系统执行非常有帮助,例如CAN相关的有: +CANBUS.error, +CANBUS.waring, +CANBUS.info, +如果打开过canbus.sh等,没有看到这些log信息,说明没有打开相关log记录功能,解决办法: +打开/apollo/module/canbus/conf/canbus_conf.pb.txt把如下三行的false改成true。 + +``` +enable_debug_mode: false +enable_receiver_log: false +enable_sender_log: false +``` + +#### docker进不去, no matching entries in passwd file + 安装好ubuntu Linux,apollo-kernel,docker后,执行 + + ``` + bash docker/scripts/dev_start.sh + bash docker/scripts/dev_into.sh + ``` + + 遇到报错如下: + unable to find user xxx : no matching entries in passwd file. + 主要是由于用户权限没有加进docker去导致。执行如下两行命令: + + `sudo gpasswd -a $USER docker` + `sudo usermod -aG docker $USER` + + 其中$USER是登陆用户名,执行成功后logout,然后重新登陆ubuntu。 + 如果没有解决,那么有可能是/apollo/scripts/docker_adduser.sh没有权限,需要`sudo chmod a+rx /apollo/scripts/docker_adduser.sh`增加权限。( 我们曾遇到一种情况就是/apollo/scripts/目录下有一个docker_adduser.sh~文件,导致报错,所以需要检查是否存在副本文件或者交换文件之类的,需要删除掉 )。 +如果还是不行,可以试试`sudo chmod 777 /var/run/docker.sock docker/scripts`。 + +#### 编译的时候CAN警告 + +若您的CAN卡是EMUC-CAN卡,请直接忽略;若您的CAN卡是ESD-CAN卡,请接着往下看。 +编译的时候,刚开始就报出几行黄色的提示找不到ESD CAN的报错,原因是CAN驱动没有安装好,参见下图: + +![图片](../images/debug_can_warn.png) + +首先要下载ESD CAN安装包,按照进行CAN驱动安装。其次需要从安装包中拷贝头文件和库文件到指定目录。具体操作如下: +检查apollo/apollo.sh脚本中的check_esd_files()函数,我这里看到1.0.0版本会检查3个文件: +libntcan.so, +libntcan.so.4, +libntcan.so.4.0.1, +所以对应应该建立的软链接是: +``` +ln -s libntcan.so.4.0.1 libntcan.so.4 +ln -s libntcan.so.4.0.1 libntcan.so.4.0 +``` +请看apollo.sh的check_esd_files()函数: +``` +function check_esd_files() { + if [ -f ./third_party/can_card_library/esd_can/include/ntcan.h \ + -a -f ./third_party/can_card_library/esd_can/lib/libntcan.so \ + -a -f ./third_party/can_card_library/esd_can/lib/libntcan.so.4 \ + -a -f ./third_party/can_card_library/esd_can/lib/libntcan.so.4.0.1 ]; then + USE_ESD_CAN=true + else + warning "${YELLOW}ESD CAN library supplied by ESD Electronics does not exit.${NO_COLOR}" + warning "${YELLOW}If you need ESD CAN, please refer to third_party/can_card_library/esd_can/README.md${NO_COLOR}" + USE_ESD_CAN=false + fi +} +``` +不同的apollo版本可能对检查的库文件名称的要求不同,可根据实际情况建立软连接。 + +#### 无法控制汽车底盘和读取底盘信号 +具体表现是车辆下发油门转向等信号,底盘不执行,也读不到底盘的相关信息,这时候的原因应该是CAN不通。解决方法如下: +(1) ESD CAN卡安装的时候跳线帽是否正确设置。跳线不正确,CAN不通。 +(2)如果(1)已经正确问题仍然存在,有可能是车辆底盘没有正确接收处理CAN信号,尝试整车断电重启。 +(3)如果(2)尝试了,仍然没有解决,用CAN调试工具,看底盘是否有信号上报,以及apollo执行的时候,是否有命令下发。 + +#### Teleop进入不了自动驾驶模式 + 打开canbus.sh后,执行canbus_teleop.sh始终无法进入自动驾驶模式,CAN调试工具测量底盘信号是通的。这种情况,有可能是guidian模块打开造成,guidian模块是一种安全保护机制,开发者调试阶段,可以根据需要关掉。 + 打开/apollo/module/canbus/conf/canbus.conf + 修改`--receive_guardian`为`--noreceive_guardian`。 + +#### chassis_detail信息量很少 +CANBUS正确配置接通的情况下,前述提到可以cyber_monitor中查看 /apollo/canbus/chassis_detail来查看底盘详细信息,但是如果执行后,看到的信息量很少,那么有可能是chassis_detail没有被打开。 +编辑/apollo/module/canbus/conf/canbus.conf +修改其中`--noenable_chassis_detail_pub`为`--enable_chassis_detail_pub`。 + +#### apollo系统第一次搭建完毕,测试发转角车辆实际转角不对 + +例如下发转向角10%,但是转动角度远超过转向最大角度的10%。可以在cyber_monitor中查看 /apollo/canbus/chassis及时观察底盘信号,apollo默认是Lincoln车型,如果使用者第一次搭建好apollo,还没有选择车型那么默认会按照lincoln车的最大转向角乘以百分比去执行。解决方法如下:检查modules/canbus/conf/canbus_conf.pb.txt中的配置,brand设置为正确的车型(例如D-kit),重启canbus,再尝试。如何仍然未解决,请运行bootstrap.sh脚本,在dreamview中选择对应的车型,例如D-kit开发套件。然后点击界面上的reset all,再点击setup。 + + +#### gps.sh打开后不正常,log提示Unable to load gnss conf file + +原因是gps配置文档不正确,检查每一行,是否有错误,尤其如下几行的#要去掉: +``` + #address: "111.111.111.11" + #port: 0000 + #mount_point: "yourport" + #user: "username" + #password: "password" +``` +另外,在程序运行的过程中,有可能会把modules/calibration/data/vehicle_name/gnss_params/gnss_conf.pb.txt拷贝到modules/drivers/gnss/conf/gnss_conf.pb.txt,那么我们也需要修改modules/calibration/data/vehicle_name/gnss_params/gnss_conf.pb.txt里面的基站配置信息和+zone=50才能保证gnss配置正确。 + +#### GPS打开后,发现best_pose, imu, localization/pose 信号没有收到 + +运行bash gps.sh后,可以cyber_monitor中观察以下几个信号 +``` +/apollo/sensor/gnss/best_pose +/apollo/sensor/gnss/imu +/apollo/localization/pose +``` +如果best_pose和imu没有,请检查gps和imu的配置。 +如果best_pose和imu有了,但是没有localization/pose没有信号,请等待2分钟,如果还是没有,请让车开动几分钟。 + +#### 循迹bash rtk_player.sh开始后,车辆不动 + +很可能是标定没有做好,尤其低速油门没有做好。 + +#### 循迹刹车地点不准确,或者刹车停不下来 + +很可能是标定没有做好,标定刹车部分没有做好,急刹缓刹都要考虑。 + +#### 循迹效果不佳 + +纵向效果不好,请考虑标定和PID参数调整以及车辆本身的信号(例如油门和刹车下发和上报是否一致),横向误差大,主要考虑LQR参数调整和车辆转向信号(下发和上报是否一致)。 diff --git a/docs/specs/D-kit/Waypoint_following--Vehicle_calibration_cn.md b/docs/specs/D-kit/Waypoint_following--Vehicle_calibration_cn.md new file mode 100644 index 0000000000000000000000000000000000000000..85c5361dd98fa7e754158b947161eab7d50aa1f5 --- /dev/null +++ b/docs/specs/D-kit/Waypoint_following--Vehicle_calibration_cn.md @@ -0,0 +1,120 @@ +车辆动力学标定 +=================== + +## 目录 + + - [概览](#概览) + + - [油门刹车标定](#油门刹车标定) + - [标定原理介绍](#标定原理介绍) + + - [标定流程说明](#标定流程说明) + +## 概览 + +该用户手册旨在帮助用户在开发套件上进行动力学标定。 + +## 油门刹车标定 + +油门刹车标定是车辆纵向精准控制的前提。用户可以使用系统预先标定好的参数,也可以按照手册说明重新进行标定。 +注意:完成本标定后,才可以启动循迹! + +### 标定原理介绍 +在Apollo系统中,控制模块会请求加速度量值。通过车辆标定表,控制模块便能找到准确产生所需加速度量值对应的油门、刹车踏板开合度控制命令,之后下发给车辆底盘。车辆标定表提供一个描述车辆速度、油门/刹车踏板开合度、加速度量之间关系的映射表。油门刹车标定过程便是生成车辆标定表的过程。 + +Apollo系统为开发套件提供了一份默认的标定表。如用户期望自己重新标定车辆,可以参考以下车辆标定流程说明。 + +### 标定流程说明 + +按如下顺序完成准备工作: + +- 改变驾驶模式 +- 选择测试地点 + +#### 改变驾驶模式 + 在`modules/canbus/conf/canbus_conf.pb.txt`中,设置驾驶模式为 `AUTO_SPEED_ONLY`。 + +#### 选择测试地点 + 理想的测试地点是平坦的长直路,且两边没有高大的建筑物遮挡。 + +以上准备工作完成后, 在`modules/tools/calibration`中按顺序完成如下工作: + +- 采集数据 +- 处理数据 +- 绘制结果 +- 转换结果为`Protobuf`格式 + + +![标定流程](../images/calibration_process_map.png) + + +#### 采集数据 + +1. 在采集数据之前,请先进入docker在终端中打开canbus模块,gps模块和localization模块,命令如下: +``` +bash /scripts/canbus.sh +bash /scripts/gps.sh +bash /scripts/localization.sh +``` +在依次输入完以上三个命令后,可用遥控器开着车走一小段距离,过两分钟之后,在diagnostic中可以看到以上三者都有信号时,便可以进行下面的操作了。 + +2. 运行 modules/tools/calibration/ 下的 `python data_collector.py`, 之后输入参数x y z, x 代表加速踏板开合度(百分比正值), y 代表了速度限值(米/秒), z 代表刹车踏板开合度(百分比负值)。输入参数后,车辆即开始以x加速踏板值加速至y速度限值,之后再以z刹车踏板值减速直至车辆停止。 + +3. 产生对应x y z 参数的csv文件。 比如输出指令 `15 5.2 -10`,将会生成名为`t15b-10r0_recorded.csv`的文件。 + +4. 根据车辆反应情况选取合适的x y z 参数,如加速踏板过小不能启动或者刹车踏板过小不能停车,需要相应调整命令参数。 + +![CSV文件样例图](../images/calibration_excel.png) + +x y z取值建议: +x: 过低可能无法启动,通常20以上。通过实验,获取能启动车辆的最小值供后续设置使用。最大取值取决于应用场景要求。在小加速踏板区间建议取值间隔粒度小,以获取更丰富数据。 +y: 单位米/秒,根据车型和实际应用场景确定​。 +z: 刹车踏板,-35已经是急刹车。通过实验,获取能制动车辆的最小值供后续设置使用。取值范围取决于应用场景要求,同时,建议采集急刹车数据。在小减速踏板区间建议取值间隔粒度小,以获取更丰富数据。 + +x y z参数组合取值建议: +一般先固定加速踏板命令 x ,之后再选择该加速踏板命令所能达到的最大速度或车型限速,最后尝试采集能让车辆停下来的最小减速命令z: +(21 5 -8) +之后再逐一更改加速踏板命令 x ,直到期望采集的 x 取值都已经覆盖​ +(22 5.3 -8) (23 5.4 -9) (24 5.6 -9)(25 5.6 -9)​ +(26 5.6 -9) (27 5.7 -10) (28 5.7 -10)(29 5.8 -10) +(30 5.8 -10)(33 5.9 -10)(38 6.1 -12)(43 6.1 -12) +之后再看期望采集的减速指令 z 取值是否都已经覆盖,如未覆盖再增加测试组合丰富 z 取值,对应 y 取值要尝试能让车辆停下来的最大速度(38 6 -11)。 + +#### 处理数据 +运行`process_data.sh {dir}`,其中dir为类似`t15b-10r0_recorded.csv`文件所在的目录。每个数据日志被处理成类似`t15b-10r0_recorded.csv.result`的文件。同时,会生成一个名为result.csv的文件。 + +#### 绘制结果 +运行`python plot_results.py {dir}/result.csv`, 其中dir为result.csv所在目录,得到可视化最终结果,检查是否有异常,示例如下: + +![标定可视化示例](../images/calibration_plot.png) + +#### 转换结果为`Protobuf`格式 +如果一切正常,运行`result2pb.sh {dir}/result.csv`, 其中dir为result.csv所在目录,把校准结果result.csv转换成控制模块定义的`Protobuf`格式。运行命令后生成control_conf_pb.txt文件。该文件里面的lon_controller_conf字段下面的calibration_table段落是我们需要的,我们将该calibration_table段替换放到文件/modules/calibration/data/dev_kit/control_conf.pb.txt下对应的lon_controller_conf字段下面的calibration_table段。 + +最后,把前面实验获取的启动车辆的最小 x 值和能制动车辆的最小 z 值替换 /modules/calibration/data/dev_kit/vehicle_param.pb.txt 文件里的throttle_deadzone、brake_deadzone 字段。 + +注:Calibration_table 片段示例 + + calibration_table { + calibration { + speed: 0.0 + acceleration: -1.43 + command: -35.0 + } + calibration { + speed: 0.0 + acceleration: -1.28 + command: -27.0 + } + calibration { + speed: 0.0 + acceleration: -1.17 + command: -25.0 + } + calibration { + speed: 0.0 + acceleration: -1.02 + command: -30.0 + } + } + diff --git a/docs/specs/D-kit/Waypoint_following--Vehicle_integration_cn.md b/docs/specs/D-kit/Waypoint_following--Vehicle_integration_cn.md new file mode 100644 index 0000000000000000000000000000000000000000..dfb5f85b481179902405b19fdad60a9978487e56 --- /dev/null +++ b/docs/specs/D-kit/Waypoint_following--Vehicle_integration_cn.md @@ -0,0 +1,79 @@ +车辆集成 +=================== + +## 目录 + + - [概览](#概览) + - [工控机安装](#工控机安装) + - [导航设备安装](#导航设备安装) + +## 概览 + +该手册旨在帮助用户在自动驾驶开发套件上安装和配置IPC和GPS导航等相关设备。 + +## 工控机安装 + +工控机的安装包括工控机主机的安装、显示器的安装、CAN线的安装、路由器的安装和无线键盘的安装,分别介绍如下: + +- 将工控机主机安装在小车的底板的中心位置,使其与小车的底板固连,将工控机的主板接口朝向小车的尾部以便于我们连接显示器等其它设备。工控机的电源接口接小车上的24V的直流电源。 +- 将显示器安装在小车的车架预留的安装位置并用卡扣将显示器固定好。用HDMI数据线将显示器和工控机的显卡连接起来。显示器的电源线接小车上的12V的直流电源。 +- 将CAN线的一端接在工控机的CAN卡的上面一个接口上,为防脱落,请拧紧螺丝固定好CAN线,将CAN线的另一端和小车的车身CAN线连接在一起。 +- 将路由器安装固定在小车的底板上,可用强力双面胶粘住以防脱落。路由器的电源接口接小车上的12V的直流电源。路由器的sim卡插口插入我们平时使用的手机sim卡即可。注意sim卡插入时可能需要卡托,请选用尺寸大小合适的卡托将sim卡插入插口并注意正反面不要插反。用网线将路由器的LAN口和工控机的网口连接起来,以使路由器可以给工控机提供网路服务。 +- 将无线键盘的信号接收器插入工控机的USB接口上,装入电池并打开无线键盘的开关。 + +## 导航设备安装 + +星网宇达Newton-M2是一款支持静态双天线初始化的GPS导航设备,其在Apollo系统中的安装配置主要包括硬件设置和软件配置两个部分,下面介绍硬件设置部分: + +### 安装主机和天线 +本安装指南描述了挂载、连接和为主机与天线量取和设置杆臂值尺寸的步骤: + +#### 安装需要的组件 + +- Newton-M2主机(1个) + +![M2_host](../images/gps_host.png) + +- 卫星天线(2个):测量型卫星天线,信号接口为TNC母口 + +![M2_antenna](../images/gps_antenna.png) + +- 射频连接线(2根):射频线两端分别为TNC公头和SMA母头 + +![M2_cable](../images/gps_cable.png) + +- 数据/电源线缆(1根):一端是和主机相连的接口,另一端含有一个串口母头,一根RJ-45网线母头,一根电源接口和一个USB接口 + +#### 挂载 +使用者可以将主机安装在载体上的任何位置,但我们强烈建议使用者采用下述的建议方案: + +- 将M2主机安装在小车的后轴的中心位置上,使主机铭牌上标示的坐标系XOY面尽量与载体坐标系平行并保持各轴向一致,将Y轴的正向保持与载体的前进方向一致,M2主机单元必须与被测载体固连,可用强力双面胶进行粘贴。 +- GNSS双天线应尽量与载体坐标系Y轴平行并且前天线(Secondary)应在Y轴正方向上,GNSS天线要尽可能的将其安置于测试载体的最高处以保证能够接收到良好的GNSS信号。将天线分别安装在小车的车架头尾预留的小圆片上。 + +#### 配线 +执行如下步骤将主机和天线连接到Apollo系统: + +- 将两根射频线的TNC公头连接上卫星天线的TNC母口。 +![IMU_ANTE](../images/imu_ante.png) +- 将射频线的SMA母口连接上IMU主机的SMA公口,车尾天线为主天线,将其连接在IMU的Primary接口上。 +![IMU_TNC](../images/imu_tnc.png) +- 将数据/电源线缆的公口和IMU主机的母口连接。 +![IMU_POWER_DATA](../images/imu_power_data.png) +- 将数据/电源线缆的串口母头连接上工控机的串口公口COM1,此线若过短,请使用串口延长线。注意:此线在完全配置完IMU之后就不需要再连接在IPC上了。 +![IMU_COM](../images/imu_com.png) +- 将数据/电源线缆的网线母头和路由器LAN口接出来的有线网的水晶头相连接。 +![IMU_ETHERNET](../images/imu_ethernet.png) +- 将数据/电源线缆的USB接口连接上IPC的USB接口。 +![IMU_USB](../images/imu_usb.png) +- 将数据/电源线缆的电源线接口和小车的12V电源接口连接起来。 + +#### 量取杆臂值 + +在后面配置IMU的参数时,我们会用到主天线的杆臂值,这里我们先量取并记录下它留作后用。杆臂值的量取参考下述步骤: + +- 当主机和天线处在正确位置时量取天线到主机的距离。主机的中点和天线的中点标记在设备的外部。 +- 距离被测量并记录为X轴偏移、Y轴偏移和Z轴偏移。坐标轴由主机的位置确定。偏移量的误差应该被控制在一厘米以内以获取高精度的定位信息。杆臂是指后天线(Primary)的几何中心位置相对于主机几何中心在直角坐标系内x,y,z三方向的位置差。通过如下指令进行补偿设置:`$cmd,set,leverarm,gnss,x_offset,y_offset,z_offset*ff`。x_offset:X方向的杆臂误差,单位为米,以此类推。注:上述坐标XYZ为设备坐标轴配置后的实际坐标,一般应与载体坐标系一致,注意补偿的是后天线(Primary)杆臂值。当进行导航模式配置后必须对设备进行重新上电启动。举例如下: + +![图片](../images/gps_vehicle_map.jpeg) + +如上图所示:后天线在M2主机X轴的正向0.2m处,则X轴偏移x_offset的值为0.2;后天线在M2主机Y轴的负向0.1m处,则Y轴偏移y_offset的值为-0.1;后天线在M2主机Z轴的正向0.8m处,则Z轴偏移z_offset的值为0.8,则杆臂值为(0.2,-0.1,0.8)。 diff --git a/docs/specs/images/imu_ante.png b/docs/specs/images/imu_ante.png new file mode 100644 index 0000000000000000000000000000000000000000..6a7c4909bd3b1c4f0615a62ae362a5b62f74de7b Binary files /dev/null and b/docs/specs/images/imu_ante.png differ diff --git a/docs/specs/images/imu_com.png b/docs/specs/images/imu_com.png new file mode 100644 index 0000000000000000000000000000000000000000..821daa9fb04222aa4d57537a818b60d1febf5834 Binary files /dev/null and b/docs/specs/images/imu_com.png differ diff --git a/docs/specs/images/imu_ethernet.png b/docs/specs/images/imu_ethernet.png new file mode 100644 index 0000000000000000000000000000000000000000..612c1220cb5df4e5a282c473ccda5e04713ad836 Binary files /dev/null and b/docs/specs/images/imu_ethernet.png differ diff --git a/docs/specs/images/imu_power_data.png b/docs/specs/images/imu_power_data.png new file mode 100755 index 0000000000000000000000000000000000000000..41cf81b2e4c95925cbc272af3fa3db3e89e706bc Binary files /dev/null and b/docs/specs/images/imu_power_data.png differ diff --git a/docs/specs/images/imu_tnc.png b/docs/specs/images/imu_tnc.png new file mode 100644 index 0000000000000000000000000000000000000000..1fc71e2f012aab7f9c62008534fea6432bdd8312 Binary files /dev/null and b/docs/specs/images/imu_tnc.png differ diff --git a/docs/specs/images/imu_usb.png b/docs/specs/images/imu_usb.png new file mode 100644 index 0000000000000000000000000000000000000000..aa1bf2d281543d03971a49c44281ae284c3c8db0 Binary files /dev/null and b/docs/specs/images/imu_usb.png differ diff --git a/docs/specs/images/lidar_connection.jpeg b/docs/specs/images/lidar_connection.jpeg new file mode 100644 index 0000000000000000000000000000000000000000..d5c71af68b41ee6390d53acf74dab9800ab95fd3 Binary files /dev/null and b/docs/specs/images/lidar_connection.jpeg differ diff --git a/docs/specs/images/lidar_line.jpeg b/docs/specs/images/lidar_line.jpeg new file mode 100644 index 0000000000000000000000000000000000000000..78bba7a5c042a908676e0f2a1e70e2ce7067232b Binary files /dev/null and b/docs/specs/images/lidar_line.jpeg differ diff --git a/docs/specs/images/lidar_power.jpeg b/docs/specs/images/lidar_power.jpeg new file mode 100644 index 0000000000000000000000000000000000000000..bd597c7b29be8d0ffe8089068b74e5a710ec6452 Binary files /dev/null and b/docs/specs/images/lidar_power.jpeg differ