本文档对Oceanbotech全向智能移动平台ROS相关部分进行说明。
Oceanbotech SmartCar V1.0 是一款面向STEAM教育,机器人研究、开发的开源软硬件系统,搭载了麦克纳姆轮的全向智能移动平台,该ROS机器人平台搭载Realsense D435i 深度摄像头,rplidar a2激光雷达,IMU九轴传感器模块,电机编码器等硬件模块,支持里程计、2D SLAM、3D VSLAM、视觉跟踪、视觉循迹等ros功能包,并拥有完备的用户界面。
在开始使用Oceanbotech SmartCar V1.0之前,建议您:
- 确保已经在Ubuntu 16.04上安装ROS操作系统并仔细阅读初学者文档
- 遵循Tutorial安装依赖安装包并编译SmartCar ROS工作空间,配置环境变量
- 运行示例 对SmartCar进行远程键盘操控
roslaunch sc_hw sc_hw.launch
roslaunch sc_hw mecanum_keyboard.launch
- Ubuntu 16.04
- Ros Kinetic
# On server NUC
bash setup_from_scratch.sh # if this is a new setup
bash setup_environment_server # if opencv and ros is installed
sudo su
echo "server 127.127.1.0" >> /etc/ntp.conf
echo "fudge 127.127.1.0 stratum 5" >> /etc/ntp.conf
systemctl restart ntp.service
# add the following line to /etc/rc.local, before the "exit 0" line
bash /home/obt-sc/ros_workspace/SC0_ws/src/ocean_audio/script/server_bringup.sh
# On PC
bash setup_pc.sh # Only do this step if you didn't setup your pc envirnment at all. Manual setup is recommanded.
# put the Mecanum_ros/src inside your workspace, for example: ~/ros_workspace/SC0_ws
cd ~/ros_workspace/SC0_ws/
catkin_make
on PC (add following lines to ~/.bashrc)
export ROS_MASTER_URI=http://SERVER_IP_ADDRESS:11311
export ROS_HOSTNAME=PC_IP_ADDRESS
on Server (add following lines to ~/.bashrc)
export ROS_MASTER_URI=http://SERVER_IP_ADDRESS:11311
export ROS_HOSTNAME=SERVER_IP_ADDRESS
roslaunch sc_hw sc_hw.launch
roslaunch rplidar_ros rplidar.launch
roslaunch sc_2dnav gmapping.launch
rosrun rviz rviz -d `rospack find sc_2dnav`/rviz/HANDSFREE_Robot.rviz
roslaunch sc_hw mecanum_keyboard.launch
roscd sc_2dnav/map/
rosrun map_server map_saver -f your_map_name (on pc)
roslaunch sc_2dnav demo_move_base_amcl_server.launch map_name:=your_map_name (on nuc)
roslaunch sc_2dnav demo_move_base_amcl_client.launch (on pc)
roslaunch sc_hw sc_hw.launch
roslaunch rplidar_ros rplidar.launch
roslaunch realsense2_camera rs_camera.launch align_depth:=true
roslaunch sc_2dnav demo_sc_rtab_mapping.launch args:="--delete_db_on_start" (nuc)
roslaunch sc_2dnav demo_sc_rtab_rviz.launch (pc)
roslaunch sc_hw mecanum_keyboard.launch
roslaunch sc_2dnav demo_sc_rtab_mapping.launch localization:=true (nuc)
roslaunch sc_2dnav demo_sc_rtab_rviz.launch (pc)
roslaunch sc_hw sc_hw.launch
roslaunch ocean_audio ocean_audio.launch (pc/nuc)
recognize.py (pc)
roslaunch sc_hw sc_hw.launch
roslaunch realsense2_camera rs_camera.launch align_depth:=true
roslaunch ocean_vision cmt_tracker_mecanum.launch
roslaunch sc_gazebo demo_gazebo_sc0.launch
roslaunch sc_gazebo demo_move_base_amcl.launch
Download weights and demo pictures from Baidu Yun Link
Extract data/ and weights/ folder to the sc_gui_py3 dir.
# connect the robot wifi
roslaunch ocean_audio server_ros.launch (nuc)
cd sc_gui_py3 (pc)
python gui.py (pc)
$ sudo apt-get install -y ntpdate
$ sudo ntpdate -u SERVER_IP
Please refer to Merical/AutoDrive
sc_hw 是机器人嵌入式软件系统与工控机进行通讯的ros package,其中包含了串口通讯,姿态解算,传感器数据上报,命令数据下发,里程计信息发布,机器人控制命令接受等等,以询问的策略与移动平台建立通讯.
sequenceDiagram
ROS->>MCU: Set Robot Command
ROS->>MCU: Read Robot Status
为了能够快速启动移动平台与ROS系统的连接,可以使用下面的命令启动驱动结点并获取里程计信息
roslaunch sc_hw sc_hw.launch
如果需要使用键盘控制全向移动平台,则可以使用下列命令:
roslaunch sc_hw mecanum_keyboard.launch
驱动全向智能移动平台ros节点
/mobile_base/mobile_base_controller/cmd_vel(geometry_msgs/Twist)
移动平台运动速度控制话题,接受机器人移动速度指令
/mobile_base/mobile_base_controller/odom(nav_msgs/Odometry)
移动平台通过编码器计算得到的里程计信息
/handsfree/imu_data(sensor_msgs/Imu)
移动平台通过九轴传感器得到的IMU姿态信息
/handsfree/robot_state(sc_msgs)
移动平台上报的底层状态信息,包括系统时间,电池电量等等
~odom_linear_scale_correction(double, default: 1.0)
里程计线性移动误差矫正系数
~odom_angle_scale_correction(double, default: 1.0)
里程计转动误差矫正系数
~serial_port(string, default: "/dev/SCRobot")
机器人移动平台USB绑定端口
~base_mode(string, default: "4omni-wheel")
移动平台机械结构类型
~with_arm(bool, default: False)
是否搭载机械臂
~controller_freq(double, default: 100)
移动平台刷新频率
使用键盘控制全向智能移动平台ros节点
None
/mobile_base/mobile_base_controller/cmd_vel(geometry_msgs/Twist)
移动平台运动速度控制话题,接受机器人移动速度指令
graph TD
id[main]--Read config files and initialize ros nodehandle, entering mainloop-->id1[HF_HW_ros::mainloop]
id1[HF_HW_ros::mainloop] --Setup communication with MCU, read data and set robot action --> id2[HF_HW::checkHandsShake / HF_HW::UpdateCommand]
id2[HF_HW::checkHandsShake / HF_HW::UpdateCommand] --Update robot state and sensor output, Send command to MCU--> id3[HF_HW_ros::readBufferUpdate/HF_HW_ros::writeBufferUpdate]
id3[HF_HW_ros::readBufferUpdate/HF_HW_ros::writeBufferUpdate] --Update robot data in memory and send data ros controller_manager--> id4[controller_manager]
SHAKING_HANDS //检查与MCU的通讯握手,确保建立连接
READ_SYSTEM_INFO //读取MCU的系统信息,包括运行时间,电量等
SET_ROBOT_SPEED //设置机器人的移动速度
READ_ROBOT_SPEED //读取机器人的移动速度
READ_GLOBAL_COORDINATE //读取机器人的全局坐标信息
READ_IMU_FUSION_DATA //读取IMU传感器数据
READ_INTF_MODE //读取机器人的控制权
SET_INTF_MODE //设置机器人的控制权
READ_MODULE_CONFIG //读取机器人的模块配置
READ_SONAR_DATA //读取机器人超声波传感器数局
SET_SONAR_STATE //设置机器人超声波传感器使能
CLEAR_ODOMETER_DATA //清除机器人坐标信息
激光雷达主要应用在建图、导航、目标跟踪等方面,是以串口形式连接到移动平台上依赖包:两台电脑间通过ROS实现通信,激光雷达相关数据也通过ROS传输到主机中
roslaunch rplidar_ros rplidar.launch
驱动rplidar_a2并发布扫描数据
None
/scan(sensor_msgs/LaserScan)
serial_port(string,default: "/dev/rplidar")
系统中使用的串行端口名称
serial_baudrate(int,default: 115200)
串口波特率
frame_id(String,default=laser_frame)
设备的坐标系名称
inverted (bool, default: false)
指示激光雷达是否倒置安装
angle_compensate (bool, default: false)
是否需要进行角度补偿
scan_mode (string, default: std::string())
激光雷达的扫描模式.
Realsense相机主要应用在三维建图、导航及目标跟踪等功能中,realsense中相关信息也通过主题发布。 深度图像、RGB图像等相关主题
roslaunch realsense2_camera rs_camera.launch aligned_depth:=true
驱动realsense D435 并发布图像数据
None
/camera/color/camera_info (sensor_msgs/CameraInfo)
相机矫正和元数据
/camera/color/image_raw (sensor_msgs/Image)
相机拍摄的彩色图像,格式为RGB.
/camera/depth/camera_info (sensor_msgs/CameraInfo)
相机矫正和元数据
/camera/depth/image_raw (sensor_msgs/Image)
相机拍摄的深度图像,像素值为uint16的深度值.
/camera/aligned_depth_to_color/image_raw (sensor_msgs/Image)
经过适应RGB图像视角矫正的深度图像,像素值为uint16的深度值.\
align_depth (bool, default: false)
指示是否使用矫正后的深度图像\
更多参数及更多功能请见realsense_ros
Oceanbotech视觉跟踪ros包,使用CMT算法与pid控制算法实现智能移动平台跟踪功能
roslaunch sc_hw sc_hw.launch
roslaunch realsense2_camera rs_camera.launch align_depth:=true
roslaunch ocean_vision cmt_tracker_mecanum_remote.launch
Oceanbotech二维导航功能包
使用gmapping算法进行地图建立
使用move_base和amcl进行实时导航
使用rtabmap进行2维和3维的建图和导航
//Mapping:
roslaunch sc_2dnav gmapping.launch
rosrun rviz rviz -d `rospack find sc_2dnav`/rviz/HANDSFREE_Robot.rviz
roslaunch sc_hw mecanum_keyboard.launch
roscd sc_2dnav/map/
rosrun map_server map_saver -f your_map_name (on pc)
//Navigation:
roslaunch sc_2dnav demo_move_base_amcl.launch map_name:=your_map_name