三轮全向移动机器人源码公开下载
0x00 源码简介
关注过ROS小课堂公众号或者优酷视频教程的应该对ROS小课堂的三轮全向移动小车有所了解,我已经制作了大概10集关于三轮全向移动小车的教程,由于一直跟大家说要开放源码,这次终于等到ROS小课堂的服务器搭建的差不多了才把源码上传至服务器来开源。源码中包含了安卓助手端app的全部源码,arduino控制源码,主控板运行的ROS源码,SLAM导航源码,使用的是RPLidar A2,视频监控等,目前该源码经过在树莓派3B上ROS indigo版本下经过编译测试,可以正常运行,所有源码已上传至ROS小课堂的gerrit系统中,开放给大家进行下载,目前服务器端正在搭建禅道软件项目管理系统,搭建完成后,大家就可以在禅道上来进行提bug和更多需求,到时候我会根据bug和需求的描述来继续维护代码,当然也非常欢迎大家参与到项目中来,共同来维护代码,贡献自己的一份力量,下面来几张三轮全向移动机器人的图片供大家参考:
0x01 源码下载
现在ROS小课堂的所有源码都迁移到新代码服务器上,代码服务器网址为:https://code.corvin.cn ,具体下载该源码的命令如下:
git clone https://code.corvin.cn:3000/corvin_zhang/corvinRobot_YOYO.git
具体的下载流程如下图所示:
0x02 ROS源码简析
对于源码的解析,首先我们来看ROS相关的代码:
接下来看整个源码的编译过程,首先是第一次编译会出错,如下所示(编译过程日志太长,所以略有删减):
corvin@workspace:~/corvinRobot_YOYO/ROSCode$ catkin_make Base path: /home/corvin/corvinRobot_YOYO/ROSCode Source space: /home/corvin/corvinRobot_YOYO/ROSCode/src Build space: /home/corvin/corvinRobot_YOYO/ROSCode/build Devel space: /home/corvin/corvinRobot_YOYO/ROSCode/devel Install space: /home/corvin/corvinRobot_YOYO/ROSCode/install #### #### Running command: "cmake /home/corvin/corvinRobot_YOYO/ROSCode/src -DCATKIN_DEVEL_PREFIX=/home/corvin/corvinRobot_YOYO/ROSCode/devel -DCMAKE_INSTALL_PREFIX=/home/corvin/corvinRobot_YOYO/ROSCode/install -G Unix Makefiles" in "/home/corvin/corvinRobot_YOYO/ROSCode/build" #### -- The C compiler identification is GNU 4.8.4 -- The CXX compiler identification is GNU 4.8.4 -- Check for working C compiler: /usr/bin/cc -- Check for working C compiler: /usr/bin/cc -- works -- Detecting C compiler ABI info -- Detecting C compiler ABI info - done -- Check for working CXX compiler: /usr/bin/c++ -- Check for working CXX compiler: /usr/bin/c++ -- works -- Detecting CXX compiler ABI info -- Detecting CXX compiler ABI info - done -- Using CATKIN_DEVEL_PREFIX: /home/corvin/corvinRobot_YOYO/ROSCode/devel -- Using CMAKE_PREFIX_PATH: /opt/ros/indigo -- This workspace overlays: /opt/ros/indigo -- Found PythonInterp: /usr/bin/python (found version "2.7.6") -- Using PYTHON_EXECUTABLE: /usr/bin/python -- Using Debian Python package layout -- Using empy: /usr/bin/empy -- Using CATKIN_ENABLE_TESTING: ON -- Call enable_testing() -- Using CATKIN_TEST_RESULTS_DIR: /home/corvin/corvinRobot_YOYO/ROSCode/build/test_results -- Looking for include file pthread.h -- Looking for include file pthread.h - found -- Looking for pthread_create -- Looking for pthread_create - not found -- Looking for pthread_create in pthreads -- Looking for pthread_create in pthreads - not found -- Looking for pthread_create in pthread -- Looking for pthread_create in pthread - found -- Found Threads: TRUE -- Found gtest sources under '/usr/src/gtest': gtests will be built -- Using Python nosetests: /usr/bin/nosetests-2.7 -- catkin 0.6.19 -- BUILD_SHARED_LIBS is on -- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -- ~~ traversing 29 packages in topological order: -- ~~ - head_arduino_bridge (metapackage) -- ~~ - head_arduino_firmware -- ~~ - head_arduino_python -- ~~ - rbx1 (metapackage) -- ~~ - ros_arduino_bridge (metapackage) -- ~~ - ros_arduino_firmware -- ~~ - ros_arduino_python -- ~~ - head_arduino_msgs -- ~~ - ros_arduino_msgs -- ~~ - teleop_twist_keyboard -- ~~ - android_app_communication -- ~~ - bringup -- ~~ - check_sensor_status -- ~~ - description -- ~~ - navigation -- ~~ - projector_control -- ~~ - protect_motors -- ~~ - rbx1_bringup -- ~~ - rbx1_speech -- ~~ - camera_monitor -- ~~ - rbx1_vision -- ~~ - rplidar_ros -- ~~ - razor_imu_9dof -- ~~ - rbx1_dynamixels -- ~~ - rbx1_apps -- ~~ - rbx1_nav -- ~~ - rbx1_description -- ~~ - usb_cam -- ~~ - voice_system Scanning dependencies of target usb_cam [ 11%] Building CXX object usb_cam/CMakeFiles/usb_cam.dir/src/usb_cam.cpp.o [ 12%] Building CXX object rplidar_ros/CMakeFiles/rplidarNode.dir/sdk/src/arch/linux/timer.cpp.o Scanning dependencies of target xf_tts_node [ 13%] Building CXX object voice_system/CMakeFiles/xf_tts_node.dir/src/xf_tts.cpp.o /home/corvin/corvinRobot_YOYO/ROSCode/src/protect_motors/src/protect_motors.cpp:3:42: fatal error: ros_arduino_msgs/AnalogFloat.h: No such file or directory #include "ros_arduino_msgs/AnalogFloat.h" ^ compilation terminated. /home/corvin/corvinRobot_YOYO/ROSCode/src/projector_control/src/projector_control.cpp:11:53: fatal error: android_app_communication/androidLogMsg.h: No such file or directory #include "android_app_communication/androidLogMsg.h" ^ compilation terminated. /home/corvin/corvinRobot_YOYO/ROSCode/src/check_sensor_status/src/main.cpp:5:38: fatal error: head_arduino_msgs/Analog.h: No such file or directory #include "head_arduino_msgs/Analog.h" ^ compilation terminated. [ 14%] Building CXX object rplidar_ros/CMakeFiles/rplidarNode.dir/sdk/src/hal/thread.cpp.o Linking CXX executable /home/corvin/corvinRobot_YOYO/ROSCode/devel/lib/rplidar_ros/rplidarNodeClient Linking CXX executable /home/corvin/corvinRobot_YOYO/ROSCode/devel/lib/voice_system/xf_tts_node Linking CXX shared library /home/corvin/corvinRobot_YOYO/ROSCode/devel/lib/libusb_cam.so [ 15%] Building CXX object rplidar_ros/CMakeFiles/rplidarNode.dir/sdk/src/rplidar_driver.cpp.o Linking CXX executable /home/corvin/corvinRobot_YOYO/ROSCode/devel/lib/camera_monitor/camera_monitor_node Linking CXX executable /home/corvin/corvinRobot_YOYO/ROSCode/devel/lib/rplidar_ros/rplidarNode [ 15%] Built target usb_cam Scanning dependencies of target head_arduino_msgs_generate_messages_py [ 16%] Generating Python from MSG head_arduino_msgs/ArduinoConstants [ 17%] Generating Python from MSG head_arduino_msgs/Analog [ 18%] Generating Python from MSG head_arduino_msgs/SensorState [ 19%] Generating Python from MSG head_arduino_msgs/AnalogFloat [ 19%] Built target rplidarNodeClient [ 19%] [ 21%] [ 21%] Built target xf_tts_node [ 21%] Built target rplidarNode Generating Python from MSG head_arduino_msgs/Digital [ 88%] Built target camera_monitor_node [ 89%] Generating C++ code from ros_arduino_msgs/AnalogRead.srv [ 89%] Generating C++ code from ros_arduino_msgs/AlarmWrite.srv [ 90%] Generating C++ code from ros_arduino_msgs/AnalogWrite.srv [ 91%] Generating C++ code from ros_arduino_msgs/ServoWrite.srv [ 92%] Generating C++ code from ros_arduino_msgs/LightShow.srv [ 93%] Generating C++ code from ros_arduino_msgs/DigitalSetDirection.srv [ 93%] Built target head_arduino_msgs_generate_messages_cpp [ 94%] Generating C++ code from ros_arduino_msgs/DigitalRead.srv [ 95%] Generating C++ code from ros_arduino_msgs/ServoRead.srv [ 95%] Built target ros_arduino_msgs_generate_messages_cpp make: *** [all] Error 2 Invoking "make -j8 -l8" failed
第一次编译出错是因为找不到自定义的头文件,不过不要紧,只要我们source devel/setup.bash就可以了,具体操作如下图所示:
corvin@workspace:~/corvinRobot_YOYO/ROSCode$ ls build devel src corvin@workspace:~/corvinRobot_YOYO/ROSCode$ source devel/setup.bash corvin@workspace:~/corvinRobot_YOYO/ROSCode$ catkin_make Base path: /home/corvin/corvinRobot_YOYO/ROSCode Source space: /home/corvin/corvinRobot_YOYO/ROSCode/src Build space: /home/corvin/corvinRobot_YOYO/ROSCode/build Devel space: /home/corvin/corvinRobot_YOYO/ROSCode/devel Install space: /home/corvin/corvinRobot_YOYO/ROSCode/install #### #### Running command: "make cmake_check_build_system" in "/home/corvin/corvinRobot_YOYO/ROSCode/build" #### #### #### Running command: "make -j8 -l8" in "/home/corvin/corvinRobot_YOYO/ROSCode/build" #### [ 0%] Built target std_msgs_generate_messages_py [ 0%] Built target _head_arduino_msgs_generate_messages_check_deps_ServoWrite [ 0%] [ 0%] [ 0%] [ 0%] [ 0%] Built target _head_arduino_msgs_generate_messages_check_deps_Analog Built target _head_arduino_msgs_generate_messages_check_deps_AnalogRead Built target _head_arduino_msgs_generate_messages_check_deps_AnalogWrite Built target _head_arduino_msgs_generate_messages_check_deps_DigitalWrite Built target _head_arduino_msgs_generate_messages_check_deps_AnalogFloat [ 0%] Built target _head_arduino_msgs_generate_messages_check_deps_Digital [ 0%] [ 0%] Built target std_msgs_generate_messages_lisp Built target std_msgs_generate_messages_cpp [ 0%] [ 0%] Built target _head_arduino_msgs_generate_messages_check_deps_IIC Built target _head_arduino_msgs_generate_messages_check_deps_ArduinoConstants [ 0%] Built target _head_arduino_msgs_generate_messages_check_deps_DigitalRead [ 0%] Built target _head_arduino_msgs_generate_messages_check_deps_DigitalSetDirection [ 0%] [ 0%] Built target _head_arduino_msgs_generate_messages_check_deps_SensorState Built target _head_arduino_msgs_generate_messages_check_deps_ServoRead [ 0%] Built target _ros_arduino_msgs_generate_messages_check_deps_AnalogFloat [ 0%] Built target _ros_arduino_msgs_generate_messages_check_deps_ServoWrite [ 0%] [ 0%] Built target _ros_arduino_msgs_generate_messages_check_deps_AnalogRead Built target _ros_arduino_msgs_generate_messages_check_deps_SensorState [ 0%] Built target _ros_arduino_msgs_generate_messages_check_deps_DigitalWrite [ 0%] Built target _ros_arduino_msgs_generate_messages_check_deps_AnalogWrite [ 0%] Built target _ros_arduino_msgs_generate_messages_check_deps_Analog [ 0%] [ 0%] Built target _ros_arduino_msgs_generate_messages_check_deps_DigitalRead Built target _ros_arduino_msgs_generate_messages_check_deps_LightShow [ 0%] Built target _ros_arduino_msgs_generate_messages_check_deps_ArduinoConstants [ 1%] [ 2%] [ 3%] Building CXX object protect_motors/CMakeFiles/protect_motors_node.dir/src/protect_motors.cpp.o Building CXX object projector_control/CMakeFiles/projector_control_node.dir/src/projector_control.cpp.o Building CXX object check_sensor_status/CMakeFiles/check_sensor_status_node.dir/src/main.cpp.o [ 3%] [ 3%] [ 3%] Built target _ros_arduino_msgs_generate_messages_check_deps_ServoRead Built target _ros_arduino_msgs_generate_messages_check_deps_Digital Built target _ros_arduino_msgs_generate_messages_check_deps_AlarmWrite [ 3%] [ 3%] Built target _ros_arduino_msgs_generate_messages_check_deps_DigitalSetDirection Built target _android_app_communication_generate_messages_check_deps_androidLogMsg [ 4%] [ 5%] [ 7%] Built target rplidarNodeClient Built target camera_monitor_node Built target rbx1_nav_gencfg [ 8%] Built target razor_imu_9dof_gencfg [ 13%] Built target rplidarNode [ 27%] [ 39%] Built target head_arduino_msgs_generate_messages_py Built target head_arduino_msgs_generate_messages_lisp [ 41%] [ 41%] Built target usb_cam Built target xf_tts_node [ 54%] Built target head_arduino_msgs_generate_messages_cpp Scanning dependencies of target android_app_communication_generate_messages_py [ 79%] [ 82%] Scanning dependencies of target android_app_communication_generate_messages_lisp Built target ros_arduino_msgs_generate_messages_lisp Built target ros_arduino_msgs_generate_messages_py [ 83%] [ 84%] Scanning dependencies of target android_app_communication_generate_messages_cpp Scanning dependencies of target usb_cam_node Generating Lisp code from android_app_communication/androidLogMsg.msg Generating Python from MSG android_app_communication/androidLogMsg [ 97%] [ 97%] Built target ros_arduino_msgs_generate_messages_cpp Generating C++ code from android_app_communication/androidLogMsg.msg Scanning dependencies of target head_arduino_msgs_generate_messages [ 97%] Built target head_arduino_msgs_generate_messages Scanning dependencies of target ros_arduino_msgs_generate_messages [ 97%] Built target ros_arduino_msgs_generate_messages [ 97%] Built target android_app_communication_generate_messages_lisp [ 98%] [100%] Generating Python msg __init__.py for android_app_communication Building CXX object usb_cam/CMakeFiles/usb_cam_node.dir/nodes/usb_cam_node.cpp.o [100%] Built target android_app_communication_generate_messages_py [100%] Built target android_app_communication_generate_messages_cpp Scanning dependencies of target android_app_communication_generate_messages [100%] Built target android_app_communication_generate_messages Linking CXX executable /home/corvin/corvinRobot_YOYO/ROSCode/devel/lib/projector_control/projector_control_node [100%] Built target projector_control_node Linking CXX executable /home/corvin/corvinRobot_YOYO/ROSCode/devel/lib/protect_motors/protect_motors_node [100%] Built target protect_motors_node Linking CXX executable /home/corvin/corvinRobot_YOYO/ROSCode/devel/lib/check_sensor_status/check_sensor_status_node [100%] Built target check_sensor_status_node Linking CXX executable /home/corvin/corvinRobot_YOYO/ROSCode/devel/lib/usb_cam/usb_cam_node [100%] Built target usb_cam_node
0x03 rosjava源码简析
rosjava是使用java语言实现的一个ROS代码框架,基本上可以与ROS系统无缝衔接通信,你在ubuntu安装的ROS系统中用到的功能在rosjava中都可以实现,rosjava就是这个java版本的ros的源码,我们可以在该源码基础上开发出属于自己定义的各类通信topic消息格式,可以将其编译成jar包这样就可以直接在我们的安卓app中直接引用,这样我们的安卓app就可以直接和ROS系统通信了。关于rosjava的更详细介绍也可以去ROS Wiki的官网查看:http://wiki.ros.org/rosjava/
由于整个编译过程较长,可以直接看下面的编译过程(编译过程日志太长,所以略有删减):
corvin@workspace:~/corvinRobot_YOYO/rosjava$ catkin_make Base path: /home/corvin/corvinRobot_YOYO/rosjava Source space: /home/corvin/corvinRobot_YOYO/rosjava/src Build space: /home/corvin/corvinRobot_YOYO/rosjava/build Devel space: /home/corvin/corvinRobot_YOYO/rosjava/devel Install space: /home/corvin/corvinRobot_YOYO/rosjava/install #### #### Running command: "cmake /home/corvin/corvinRobot_YOYO/rosjava/src -DCATKIN_DEVEL_PREFIX=/home/corvin/corvinRobot_YOYO/rosjava/devel -DCMAKE_INSTALL_PREFIX=/home/corvin/corvinRobot_YOYO/rosjava/install -G Unix Makefiles" in "/home/corvin/corvinRobot_YOYO/rosjava/build" #### -- The C compiler identification is GNU 4.8.4 -- The CXX compiler identification is GNU 4.8.4 -- Check for working C compiler: /usr/bin/cc -- Check for working C compiler: /usr/bin/cc -- works -- Detecting C compiler ABI info -- Detecting C compiler ABI info - done -- Check for working CXX compiler: /usr/bin/c++ -- Check for working CXX compiler: /usr/bin/c++ -- works -- Detecting CXX compiler ABI info -- Detecting CXX compiler ABI info - done -- Using CATKIN_DEVEL_PREFIX: /home/corvin/corvinRobot_YOYO/rosjava/devel -- Using CMAKE_PREFIX_PATH: /home/corvin/corvinRobot_YOYO/ROSCode/devel;/opt/ros/indigo -- This workspace overlays: /home/corvin/corvinRobot_YOYO/ROSCode/devel;/opt/ros/indigo -- Found PythonInterp: /usr/bin/python (found version "2.7.6") -- Using PYTHON_EXECUTABLE: /usr/bin/python -- Using Debian Python package layout -- Using empy: /usr/bin/empy -- Using CATKIN_ENABLE_TESTING: ON -- Call enable_testing() -- Using CATKIN_TEST_RESULTS_DIR: /home/corvin/corvinRobot_YOYO/rosjava/build/test_results -- Looking for include file pthread.h -- Looking for include file pthread.h - found -- Looking for pthread_create -- Looking for pthread_create - not found -- Looking for pthread_create in pthreads -- Looking for pthread_create in pthreads - not found -- Looking for pthread_create in pthread -- Looking for pthread_create in pthread - found -- Found Threads: TRUE -- Found gtest sources under '/usr/src/gtest': gtests will be built -- Using Python nosetests: /usr/bin/nosetests-2.7 -- catkin 0.6.19 -- BUILD_SHARED_LIBS is on -- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -- ~~ traversing 13 packages in topological order: -- ~~ - rosjava_build_tools -- ~~ - rosjava_bootstrap -- ~~ - genjava -- ~~ - rosjava (metapackage) -- ~~ - head_arduino_msgs -- ~~ - ros_arduino_msgs -- ~~ - rosgraph_msgs -- ~~ - rosjava_test_msgs -- ~~ - rosjava_extras -- ~~ - std_srvs -- ~~ - android_app_communication -- ~~ - rocon_rosjava_core -- ~~ - zeroconf_jmdns_suite -- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Uploaded 6K [ 98%] Built target gradle-zeroconf_jmdns_suite Scanning dependencies of target head_arduino_msgs_generate_messages [ 98%] Built target head_arduino_msgs_generate_messages Scanning dependencies of target ros_arduino_msgs_generate_messages [ 98%] Built target ros_arduino_msgs_generate_messages warning: [options] bootstrap class path not set in conjunction with -source 1.7 1 warning Uploading: com/github/robotics_in_concert/rocon_rosjava_core/master_info/0.2.0/master_info-0.2.0.jar to repository remote at file:/home/corvin/corvinRobot_YOYO/rosjava/devel/share/maven/ Transferring 4K from remote Uploaded 4K Uploading: com/github/robotics_in_concert/rocon_rosjava_core/rocon_interactions/0.2.0/rocon_interactions-0.2.0.jar to repository remote at file:/home/corvin/corvinRobot_YOYO/rosjava/devel/share/maven/ Transferring 6K from remote Uploaded 6K Uploading: com/github/robotics_in_concert/rocon_rosjava_core/rosjava_utils/0.2.0/rosjava_utils-0.2.0.jar to repository remote at file:/home/corvin/corvinRobot_YOYO/rosjava/devel/share/maven/ Transferring 11K from remote Uploaded 11K [ 98%] Built target gradle-rocon_rosjava_core FAILURE: Build failed with an exception. * What went wrong: Could not resolve all dependencies for configuration ':runtime'. > Could not resolve org.ros.rosjava_messages:roscpp:1.11.21. Required by: org.ros.rosjava_messages:android_app_communication:0.0.0 > Could not GET 'https://repo1.maven.org/maven2/org/ros/rosjava_messages/roscpp/1.11.21/roscpp-1.11.21.pom'. > Connection to https://repo1.maven.org refused * Try: Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output. [100%] Built target android_app_communication_generate_messages_java_gradle Scanning dependencies of target android_app_communication_generate_messages [100%] Built target android_app_communication_generate_messages
我们编译rosjava源码的意义在于编译属于我们自己的项目,我们需要获得编译生成的jar包,我们的安卓app代码引用了该jar包才能与ROS机器人进行通信,才能控制我们的ROS系统,例如我在rosjava中创建了ros_arduino_msgs软件包,目录结构如下图所示:
当我们把整个rosjava代码编译完成后,需要在哪里找到编译完成的jar包呢?查看下图:
接下来就可以将该jar包复制到安卓app源码相应目录的libs下,再配置一下引用该jar包即可。
0x04 android源码简析
android_core为配套的安卓助手端app的源码,源码的目录结构如下:
在了解了安卓源码的目录结构后,就准备在android studio中打开编译了,具体的配置android studio环境需要大家提前配置好,如果有需要的话会专门再发布一篇教程来指导大家如何安装android studio配置java环境。下面的过程是你已经配置好android studio了,然后将该安卓源码导入编译即可,首先是打开android studio截图:
当接上手机后,点击项目旁边的三角运行按钮即可编译整个项目,然后将编译生成的apk安装进手机中:
当连接成功后app的界面如下图所示:
0x05 arduino源码解析
arduino的代码结构如下图所示:
在了解各个arduino代码后开始准备在arduino IDE中打开项目进行编译,这里我们打开三轮全向移动底盘arduino代码查看:
0x06 问题反馈
由于本人能力有限,如果大家在此过程中有任何问题,可以直接给我评论或者可以关注ROS小课堂的官方微信公众号,在公众号中给我发消息,我基本上每天都会处理公众号中的留言!当然,如果你要是顺便给ROS小课堂打个赏,我也会感激不尽的!