JetBot AI Kit 教程八、ROS
JetBot AI Kit 教程目录
- JetBot AI Kit 教程一、组装小车
- JetBot AI Kit 教程二、安装镜像
- JetBot AI Kit 教程三、电机驱动
- JetBot AI Kit 教程四、远程遥控
- JetBot AI Kit 教程五、自主避障
- JetBot AI Kit 教程六、目标跟踪
- JetBot AI Kit 教程七、目标巡线
- JetBot AI Kit 教程八、ROS
- JetBot AI Kit WIKI 主页
1. 前言
如果你从来没有接触过ROS系统,请先参考ROS官方教程熟悉ROS系统,了解各种ROS概念,然后再根据本教程通过ROS操作JetBot小车
2. 前期准备
使用前需要先安装系统,参考:
3. 安装melodic版本ROS
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
4. 创建catkin工作空间
创建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
5. 编译安装jetson-inference
# 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
6. 编译安装ros_deep_learning
# 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
7. 编译安装jetbot_ros
# 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
8. 测试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显示信息
新建一个终端运行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!"
使用键盘控制jetbot移动
新建一个终端运行teleop_key节点
rosrun jetbot_ros teleop_key.py
程序运行后通过键盘输入W、S、D、A四个按键控制jetbot前后左右移动
使用游戏摇杆控制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摄像头的实时图像了。