指引:
该示例代码包含整个ROS的workspace。用catkin_make
编译即可使用。
建议放在 ~/
目录下。
前提条件:本工作空间需要已经完成ROS的安装、OpenCV的编译。
以在 ~/
为例:
cd ~/ucar_ws
catkin_make
本workspace目录结构如下:
.
├── startup_scripts # 设备权限设施脚本,用于在`/etc/udev/rules.d/`中添加ucar.rules
├── ucar_controller # 智能驾驶小车的底盘控制ros包(mini版本集成了imu)
├── fdilink_ahrs # imu示例ros包(晓版本用imu需要单独调用本包)
├── ydlidar # 激光雷达示例ros包
├── ucar_map # 建图示例ros包
├── ucar_nav # 导航示例ros包
├── car_race # 智能车比赛示例代码包
├── xf_mic_asr_offline # 麦克风阵列示例ros包
├── geometry # tf2相关包
├── geometry2 # tf2相关包
└── CMakeLists.txt
startup_scripts
:文件夹存放了快速配置小车外设权限的脚本。两个脚本分别对应两个版本小车。ucar_controller
:是控制小车底盘的驱动包,实现了对4个电机、彩色LED、IMU的控制。ydlidar
:激光雷达的驱动包。ucar_map
:基于Cartographer算法的SLAM建图的配置示例ros包。ucar_nav
:基于ROS move_base的导航配置示例ros包。ucar_race
:智能车竞赛参考代码。xf_mic_asr_offline
:麦克风阵列驱动包。geometry
与geometry2
tf2相关包。 具体使用见下文以及相应包中的README.md
文件。
没有包含的usb摄像头可以参考usb_cam包来使用。下面提到的
startup_scripts
已经将摄像头设备链接为/dev/ucar_video
。
initdev_mini.sh
与 initdev_xiao.sh
分别对应晓mini版本的智能驾驶小车和晓版本的智能驾驶小车。
cd ./ucar_ws/src/startup_scripts/
sudo chmod 777 ./initdev*.sh
sudo ./initdev_mini.sh # 对应晓mini版本,晓版本勿执行这句
sudo ./initdev_xiao.sh # 对应晓版本,晓mini版本勿执行这句
sudo reboot # 可选,最好完成一次重启
这个脚本完成了/etc/udev/rules.d/ucar.rules
文件的创建与udev服务重启。
以及,在~/.bashrc
中添加了对ucar_ws
的ROS环境的source。
ucar_controller
作为与下位机mcu通讯的ROS包实现了电机控制、灯光控制、mcu板载imu数据读取等功能。我们可以通过发布/cmd_vel(geometry_msgs/Twist)
速度控制话题,指定xy方向的平移速度以及yaw角的旋转速度来控制小车运动。同时发布里程计话题/odom(nav_msgs/Odometry)
实时发布小车里程计记录的速度、位置。其他功能阅读ucar_controller
包中的readme.md
文档。
sudo apt update
sudo apt install ros-melodic-serial libeigen3-dev
sudo pip3 uninstall em
sudo pip3 install empy -i https://pypi.tuna.tsinghua.edu.cn/simple
编译:
cd ~/ROS/ucar_ws
catkin_make
1、启动节点:
roslaunch ucar_controller base_driver.launch
2、发布话题控制:
base_driver
节点订阅/cmd_vel
话题,msg类型为geometry_msgs/Twist
。
我们可以通过发布/cmd_vel
话题来控制小车移动,比如:
Ctrl + Alt + T重新开启一个终端。
用rostopic
工具发布话题。(注意用Tab键自动补全来填写geometry_msgs/Twist
数据,不然手动输入容易出错)
rostopic pub -r 20 /cmd_vel geometry_msgs/Twist "linear:
x: 0.0
y: 0.0
z: 0.0
angular:
x: 0.0
y: 0.0
z: 1.0"
输入指令后小车会持续逆时针自转。
fdilink_ahrs
作为与晓版本小车nano板载imu通讯的ROS包实现了imu数据读取发布的功能。我们可以通过订阅/imu(sensor_msgs/Imu)
话题来获取imu数据。详细功能阅读fdilink_ahrs
包中的README.md
文档。
完成编译后使用如下指令启动该节点:
roslaunch fdilink_ahrs ahrs_driver.launch
激光雷达的驱动包,直接编译即可使用。默认发布/scan
话题的数据。对应的数据类型为:sensor_msgs/LaserScan
。
完成编译后使用如下指令启动该节点:
roslaunch ydlidar ydlidar.launch
对应的launch
文件保存在:~/ucar_ws/src/ydlidar/launch/ydlidar.launch
。
修改ydlidar.launch
文件中的参数可以对topic_name
、frame_id
等参数进行修改。
ucar_nav
包基于navigation
是包集,完成了基于move_base
的导航配置,供参考使用。
新打开一个终端,输入以下命令安装
sudo apt-get install ros-melodic-navigation*
打开新的终端,运行下面命令
roslaunch ucar_nav ucar_navigation.launch
ucar_nav/launch/
文件夹中的navigation.launch为导航的启动文件。ucar_nav/launch/config/
文件夹主要用于存放导航所需要的yaml文件,其中ucar_nav/launch/config/amcl/
中是用于定位的参数文件,ucar_nav/launch/config/move_base/
是存放着路径规划和感知地图的参数文件。
1、No module named 'em' 解决方法:打开一个新的终端执行下面的命令
sudo pip3 uninstall em
sudo pip3 install empy -i https://pypi.tuna.tsinghua.edu.cn/simple
SLAM建图示例包,本包配置了Google的Cartographer的2D建图启动文件。
sudo apt-get install ros-melodic-cartographer
sudo apt-get install ros-melodic-cartographer-ros
打开3个新的终端,运行下面命令:
roslaunch ucar_controller base_driver.launch
roslaunch ydlidar ydlidar.launch
roslaunch ucar_map cartographer_start.launch
roslaunch ucar_map ucar_mapping.launch
ucar_mapping.launch
中包含了分布启动建图中的3个launch文件
说明: 上文已经介绍了 base_driver.launch是启动小车底盘控制,ydlidar.launch是启动雷达 cartographer_start.launch是单独启动cartographer_ros。
麦克风阵列ROS驱动示例包,本包基于ROS实现了上传音频、获取唤醒角度、设置灯光、设置主麦设置唤醒词等功能。
详细内容阅读:ucar_ws/src/xf_mic_asr_offline/doc/麦克风阵列使用说明v1.9.x.pdf
20210323:新增fdilink_ahrs软件包的简介 20210309:第一版 20210304:初次编写