如果你从来没有接触过ROS系统,请先参考ROS官方教程熟悉ROS系统,了解各种ROS概念,然后再根据本教程通过ROS操作JetBot小车
使用前需要先安装系统,参考:
Jetson Nano提供的系统镜像是基于18.04版本Ubuntu系统,支持直接用apt安装ROS.使用下面的指令,按顺序安装,注意安装过程中是否有报错。
- # enable all Ubuntu packages:
- sudo apt-add-repository universe
- sudo apt-add-repository multiverse
- sudo apt-add-repository restricted
- # add ROS repository to apt sources
- sudo sh -c 'echo "deb http://packages.ros.org/ros/ubuntu $(lsb_release -sc) main" > /etc/apt/sources.list.d/ros-latest.list'
- sudo apt-key adv --keyserver 'hkp://keyserver.ubuntu.com:80' --recv-key C1CF6E31E6BADE8868B172B4F42ED6FBAB17C654
- # install ROS Base
- sudo apt-get update
- sudo apt-get install ros-melodic-ros-base
- # add ROS paths to environment
- sudo sh -c 'echo "source /opt/ros/melodic/setup.bash" >> ~/.bashrc'
安装python库
- # pip should be installed
- $ sudo apt-get install python-pip
- # install Adafruit libraries
- $ pip install Adafruit-MotorHAT
- $ pip install Adafruit-SSD1306
添加i2c到user用户组
- sudo usermod -aG i2c $USER
创建catkin工作空间保存我们的ROS程序包
- # create the catkin workspace
- mkdir -p ~/workspace/catkin_ws/src
- cd ~/workspace/catkin_ws
- catkin_make
- # add catkin_ws path to bashrc
- sudo sh -c 'echo "source ~/workspace/catkin_ws/devel/setup.bash" >> ~/.bashrc'
关闭当前终端,重新打开一个新的终端。确认ROS是否安装成功
- $ echo $ROS_PACKAGE_PATH
- /home/nvidia/workspace/catkin_ws/src:/opt/ros/melodic/share
- # git and cmake should be installed
- sudo apt-get install git cmake
- # clone the repo and submodules
- cd ~/workspace
- git clone --recursive https://github.com/dusty-nv/jetson-inference
- cd jetson-inference
- # build from source
- mkdir build
- cd build
- cmake ../
- make
- # install libraries
- sudo make install
【注意】由于Jetson nano服务器均在国外,部分资源需要能够上外网才能可以获取,否则可能安装失败。另外需要安装一下库
- sudo apt install libqt4-dev libglew-dev
- # install dependencies
- sudo apt-get install ros-melodic-vision-msgs ros-melodic-image-transport ros-melodic-image-publisher
- # clone the repo
- cd ~/workspace/catkin_ws/src
- git clone https://github.com/dusty-nv/ros_deep_learning
- # make ros_deep_learning
- cd ../ # cd ~/workspace/catkin_ws
- catkin_make
- # confirm that the package can be found
- rospack find ros_deep_learning
- /home/nvidia/workspace/catkin_ws/src/ros_deep_learning
- # clone the repo
- cd ~/workspace/catkin_ws/src
- git clone https://github.com/waveshare/jetbot_ros
- # build the package
- cd ../ # cd ~/workspace/catkin_ws
- catkin_make
- # confirm that jetbot_ros package can be found
- rospack find jetbot_ros
- /home/nvidia/workspace/catkin_ws/src/jetbot_ros
打开一个新终端,然后运行ros核心节点
- roscore
输出信息如下,则ros正常工作
【注意】roscore核心节点必须保持运行状态,否则其他所有的节点都不能工作
另外再打开一个终端,roscore节点不要关闭。运行如下命令启动jetbot_motors节点
- rosrun jetbot_ros jetbot_motors.py
再新建一个终端,输入rosnode list可以查看jetbot_motors节点是否启动。输入rostopic list可以查看jetbot_motor节点监听的话题
【注意】到2019/02/22为止, jotbot-ros只实现cmd_str方法,后续如果有其他更新,可以自行了解
cmd_str 通过发送字符串命令 (left/right/forward/backward/stop)控制jetbot运动。
打开一个新的终端,运行如下测试命令可以控制jetbot运动
- rostopic pub /jetbot_motors/cmd_str std_msgs/String --once "forward"
- rostopic pub /jetbot_motors/cmd_str std_msgs/String --once "backward"
- rostopic pub /jetbot_motors/cmd_str std_msgs/String --once "left"
- rostopic pub /jetbot_motors/cmd_str std_msgs/String --once "right"
- rostopic pub /jetbot_motors/cmd_str std_msgs/String --once "stop"
新建一个终端运行OLED节点
- rosrun jetbot_ros jetbot_oled.py
jetbot_oled 监听/jetbot_oled/user_text话题,接受字符信息并显示。运行如下命令显示“HELLO”字符 rostopic pub /jetbot_oled/user_text std_msgs/String --once "HELLO!"
新建一个终端运行teleop_key节点
- rosrun jetbot_ros teleop_key.py
程序运行后通过键盘输入W、S、D、A四个按键控制jetbot前后左右移动
将游戏手柄的USB接收器插到jetbot 新建一个终端输入以下命令
- ls /dev/input
显示如下:
其中的js0就是代表游戏摇杆手柄,输入如下命令测试设备是否正常工作
- sudo jstest /dev/input/js0
遥控手柄按下不同的按键,对应的按键值会改变.
【注意】如果运行命令后提示jstest命令找不到则需要运行如下命令安装对应的库。
- sudo apt-get install joystick
安装joy包,并启动joy节点。要获得通过ROS发布的摇杆数据,我们需要启动joy节点。
- sudo apt-get install ros-melodic-joy
- rosrun joy joy_node
显示信息如下:
新建一个终端运行如下命令显示joy节点信息
- rostopic echo joy
当按下游戏摇杆按下时,会输出类似如下的信息
其中axes[ ]表示摇杆的数据,buttons[ ]表示按键的数据
此时操作游戏手柄虽然可以显示ros发布的数据,但是要不能遥控jetbot。还需要运行teleop_joy节点,接收joy节点发布的话题信息,转换为/jetbot_motor/ cmd_str话题再发给jetbot_motors节点控制电机运动。新建一个终端运行如下命令启动终端teleop_joy节点。
- rosrun jetbot_ros teleop_joy.py
安装游戏手柄的A键,然后控制上下左右方向键既可以控制jetbot移动,松开A键,jetbot则停止。
修改jetbot_ros/scripts/teleop_joy.py程序中 axes[ ]和 buttons[ ] 的值可以设置不同的按键控制。
使用摄像头实时监控
启动jetbot_camera节点,启动jetbot摄像头视频流
- rosrun jetbot_ros jetbot_camera
将会发布图像格式为sensor_msgs::Image 的话题 jetbot_camera/raw
运行如下命令显示摄像头图像。
- rosrun rqt_image_view rqt_image_view
会显示如下窗口,选择话题为/jetbot_camera/raw
注意:此命令需要在图形界面下运行。可以在电脑端通过虚拟机安装ubuntu系统并安装ROS.
Jetbot 在~/.bashrc 文件最后面添加下面两行语句
- export ROS_HOSTNAME=jetbot.local
- export ROS_MASTER_URI=http://jetbot.local:11311
Ubuntu 系统在 ~/.bashrc 文件最后面添加下面两行语句
- export ROS_HOSTNAME=ubuntu.local
- export ROS_MASTER_URI=http://jetbot.local:11311
这样jetbot 和ubuntu虚拟机就可以通过ros节点通讯了,这样就可以在电脑端通过ubuntu虚拟机运行rqt_imge_view命令查看jetbot摄像头的实时图像了。