JetRacer ROS AI Kit 教程五、机器人移动控制

来自Waveshare Wiki
跳转至: 导航搜索

JetRacer ROS AI Kit 初级教程目录

步骤1、添加串口用户组

  • 在Jetson Nano 中输入命令 ls /dev ,查看驱动板是否正常连接jetson ,是否有发现ttyACM0,ttyACM1设备【其中ttyACM0 用于与微控制器通讯,ttyACM1用于与雷达通讯】
 ls /dev    
JetRacer ROS 21.png
  • 输入以下命令,添加串口用户组,否则没有权限操作串口。使用配置好的系统已经添加权限,可以跳过此步骤。
 ls -l /dev/ttyACM*            #查看串口用户组为 dialout
 id -Gn                        #查看当前用户所在的用户组,第一个为当前用户
 sudo adduser jetson dialout   #将当前用户加入到串口所在的用户组dialout
JetRacer ROS 22.png
  • 输入命令 sudo reboot 进行重启,密码是jetson【注意:重启之后才可使上述添加命令生效,且当没有串口权限时,开机后机器人底盘节点会一直报错】
sudo reboot    #重启Jetson Nano   

步骤2、启动机器人底盘控制节点

  • SSH连接机器人打开终端,输入以下命令启动机器人主节点。
roscore      #启动机器人主节点  
JetRacer ROS 14.png
  • 下述 roslaunch 命令也会自动启动主节点,但这里单独启动主节点是为了一直都保持与虚拟机连接,否则关闭底盘节点时会自动关闭主节点,从而导致虚拟机失联
  • 输入以下命令启动机器人底盘节点
roslaunch jetracer jetracer.launch     #启动机器人底盘节点  
JetRacer ROS 20.png
  • 打开Ubuntu虚拟机终端,在终端输入以下命令,检验多机通讯连接正常
rostopic list   
  • 运行代码后若出现下图所示内容,则说明多机通讯成功;若无法连接,则重新检查上面步骤中ip和hostname是否填错或者是否连接同一WiFi
JetRacer ROS-rostopic.jpg
  • 其中:
    • /cmd_vel 为机器人控制机器人运动速度话题
    • /imu 为机器人IMU话题
    • /motor/* 四个话题表示左右电机的实际编码速度和设置速度
    • /odom 为机器人编码里程计
    • /odom_combined 为机器人融合里程计,由编码里程计融合IMU数据所得。

步骤3、启动话题发布节点控制

  • 多机通讯正常后,请保持机器人底盘点运行正常,并将小车放于地面。
  • 在Ubuntu虚拟机中打开终端,输入以下命令启动话题发布节点
rosrun rqt_publisher rqt_publisher    #启动话题发布节点
Jetbot image17.png
  • 在弹出窗口中请选择话题 /cmd_vel ,点击“+” 新建一个话题,/cmd_vel为控制机器人运动的话题,linear->x表示机器人的线速度,范围为范围为-1.2m/s~1.2m/s,angular->x表示机器人前轮胎的转向角度,而非角速度,范围为-0.6弧度~0.6弧度。
  • 将linear.x的值改成0.5,右键单击选择publish selected Once 发布一次话题,机器人将前进0.5米后停止;若将linear.x 改为0,angular.z改为0.6,则机器人向左转动最大角度。
  • 注意:这里我们打开的话题是 cmd_vel,选择Twist 类型,选择其他的话题,则小车可能不移动
Jetbot image18.png
  • 按 Ctrl+C 关闭话题发布节点
  • 在机器人端重新打开一个终端,输入以下命令可以查看小车运动的话题信息
rostopic echo  /cmd_vel    #显示/cmd_vel接收话题
  • 重新启动话题发布节点,控制小车运动就可以看到机器人终端显示/cmd_vel接收话题
JetRacer ROS 24.png
  • 特别注意:这个的angular->z不是机器人的角速度,而是机器人轮胎的转向角度。

步骤4、通过键盘控制机器人移动

  • 在Ubuntu虚拟机端按“Ctrl+Alt+t”打开新的终端,并输入以下命令开启键盘控制话题节点
 roslaunch jetracer keyboard.launch  
JetRacer ROS-keyboard.jpg
  • 此时,您可以通过上下键控制机器人移动,移动数据可在机器人终端接收的话题中查看
Jetbot 73.png
  • 按ctrl+c中断节点运行并退出
  • 注意:以上控制都要在机器人主节点和机器人底盘节点启动的条件下才能有效,若按键或者在话题中修改相应数值后机器人没有动作,则可能是节点未打开或者多机通信异常,请重新检查节点运行和多机通信

步骤5、虚拟机接入游戏手柄控制

  • 将游戏手柄USB接收头查到电脑中,此时弹出一个框请选择连接到虚拟机 ->Ubuntu JetRacer。
Jetbot 79.png
  • 在虚拟机中运行如下命令,测试游戏手柄接入是否正常【注意:将游戏手柄的接收器接到虚拟机中控制,如果将游戏手柄接到jetson nano中控制会出现延迟严重的情况】
ls /dev/input/
Jetbot Image62.png
  • 其中的js0就是代表游戏摇杆手柄,运行如下命令测试游戏手柄是否正常
jstest /dev/input/js0    
Jetbot image63.png
  • 遥控手柄按下不同的按键,对应的按键值会改变
  • 按“Ctrl+C”结束节点
  • 在虚拟机中输入以下命令,启动游戏手柄控制节点
roslaunch jetracer joy.launch  
Jetbot image64.png
  • 打开手柄电源,按 HOME 键后会显示一颗红灯,然后按住左上角L1键,且同时控制左边摇杆左右方向控制机器人舵机转向,右边摇杆上下方向控制机器人前进后退。松开L1键,机器人停止
JetRacer ROS 25.png
  • 如果遥控不了,可以在虚拟机中输入以下命令,打开~/catkin_ws/src/jetracer_ros/scripts/teleop_joy.py程序,将 axes[ ]和 buttons[ ] 的值改成实际对应的按键值
sudo nano catkin_ws/src/jetracer_ros/scripts/teleop_joy.py   #打开遥控器程序文件
Jetbot image66.png