Wheeltec小车的开发实录(2)

19 篇文章 0 订阅
6 篇文章 0 订阅

小车初步启动控制

小车终端运行l:

roslaunch turn_on_wheeltec_robot turn_on_wheeltec_robot.launch

控制终端运行(多机通讯设置后,可以不必执行这一步)

export ROS_HOSTNAME=192.168.224.122(控制终端ip)

export ROS_MASTER_URI=http://192.168.224.208:11311(小车终端ip)

rostopic list

输出

 rostopic: error: you may only specify one input topic

rostopic echo /odom 

键盘控制

roslaunch wheeltec_robot_rc keyboard_teleop.launch

多机通讯设置(源自以下链接,此处只做备份使用)

ROS连接两台设备

利用Ros通信,两台电脑需要处于同一局域网下.
1、查看主机/从机 ip hostname

$ ifconfig           查看ip
如果电脑连接的时有线网,则显示结果中,etho 部分的 inet addr 后面就是该电脑的 IP 地址;

如果电脑连接的是无线,则 wlan0 部分的 inet addr 后就是 IP 地址。

$ cat /etc/hostname           查看hostname

2、修改hosts文件内容

$ sudo gedit /etc/hosts   注意hosts别打错了= =
A电脑(主机)

127.0.0.1     localhost
127.0.1.1     hostname_A

IP_A            hostname_A
IP_B            hostname_B

B电脑(从机)

127.0.0.1     localhost
127.0.1.1     hostname_B

IP_B            hostname_B
IP_A            hostname_A


3、修改bashrc文件内容

$ sudo gedit ~/.bashrc
在文件最后一行添加如下代码

A设备:

export ROS_MASTER_URI=http://hostname_A:11311

export ROS_HOSTNAME=hostname_A

B设备:

export ROS_MASTER_URI=http://hostname_A:11311

export ROS_HOSTNAME=hostname_B

A B 终端分别执行

source ~/.bashrc

4、测试

A:

$ roscore
$ rosrun turtlesim turtlesim_node

B:

$ rosrun turtlesim turtle_teleop_key
then, 就可以在从机B上用键盘控制主机A上小乌龟的移动啦
 

使用ROS连接两台电脑时,只能看到对方设备的IP,但是订阅不到ros消息_ros主从机通讯,从机接收不到主机的话题数据-CSDN博客

 一键终端输入

为了简化在终端的输入步骤我把需要的命令都做成了.sh文件,代码如下,执行方式是在终端中输入./文件名.sh,读者请根据自己的文件夹和ip修改

001start_roscar_PC.sh

echo " " | sudo mount -t nfs 192.168.31.101:/home/wheeltec/wheeltec_robot /mnt/ros1_7000
#export ROS_HOSTNAME=192.168.31.99
#export ROS_MASTER_URI=http://192.168.31.101:11311

./001_1SCP_SSH.sh

 001_1SCP_SSH.sh

#!/usr/bin/expect
set login "登录端的用户名"
set addr "192.168.31.101"
set password "登录端的密码"

spawn scp 001start_roscar_wheeltec.sh $login@$addr:~/wheeltec_robot/code_sh

expect "$login@$addr\'s password:"
send "$password\r"
expect "#"

spawn ssh -Y $login@$addr

expect "$login@$addr\'s password:"
send "$password\r"
expect "#"

send "./wheeltec_robot/code_sh/001start_roscar_wheeltec.sh\r" # 这是我要执行的指令文件存放在登陆段的文件夹中

interact

001start_roscar_wheeltec


cd ~/wheeltec_robot
source devel/setup.bash
#roslaunch turn_on_wheeltec_robot turn_on_wheeltec_robot.launch
#export ROS_IP=191.168.31.99 #这一句加上就打不开ros
roslaunch turn_on_wheeltec_robot mapping.launch

 报错

ERROR: cannot launch node of type [gmapping/slam_gmapping]: gmapping
ROS path [0]=/opt/ros/melodic/share/ros
ROS path [1]=/home/wheeltec/wheeltec_robot/src
ROS path [2]=/opt/ros/melodic/share

在小车终端下输入(不出现此错误则跳过)

sudo apt-get install ros-melodic-gmapping #根据自己的ros版本更改中间的名字我的是melodic

安装成功后输入

roslaunch turn_on_wheeltec_robot mapping.launch

雷达出错

我的雷达是镭神n10p所以我找到了对应的launch驱动文件

复制lsx10p到小车工作空间下src的文件夹

编译

catkin_make -DCATKIN_WHITELIST_PACKAGES="lsx10"

报错

WARNING: package "orb_slam2_ros" should not depend on metapackage "image_common" but on its packages instead

我没有理会

接着按照雷达的型号修改来lsx10功能包下的lslidar_driver/launch/lslidar_serial.launch文件

我的是n10p

接着打开rviz

Global Option下的Fixed Fram下输入laser(下拉菜单没有就自己输入)

增加LaserScan话题

雷达可以正常显示了。

下一步修改ros原雷达驱动。

在wheeltec小车中,雷达启动文件是

roslaunch rplidar_ros rplidar.launch

原有的 rplidar.launch

<launch>
  <node name="rplidarNode"          pkg="rplidar_ros"  type="rplidarNode" output="screen">
   <param name="serial_port"         type="string" value="/dev/wheeltec_lidar"/>

    <param name="serial_baudrate"     type="int"    value="115200"/>
    <!--A1/A2 -->
    <!-- <param name="serial_baudrate"     type="int"    value="256000"/>-->
    <!--A3 -->
    <!--<param name="serial_baudrate"     type="int"    value="1000000"/>--> 
    <!--S2 -->
    <param name="frame_id"            type="string" value="laser"/>
    <param name="inverted"            type="bool"   value="false"/>
    <param name="angle_compensate"    type="bool"   value="true"/>
     
  </node>
</launch>

在导航的启动文件中我们发现雷达的launch文件是wheeltec_lidar.launch

开头第一句可以选择雷达型号

<arg name="rplidar_mode"  default="ls_M10_uart" 
    doc="opt:  ls_M10_uart, ls_M10P_uart, ls_M10P_PLUS_uart, ls_M10_net, ls_M10P_net, ls_M10P_PLUS_net, ls_N10, ls_N10P, ld_14, ld_19, rplidar_A1_A2, rplidar_A3, rplidar_S1"/>

 我对应型号修改后是

<arg name="rplidar_mode"  default="ls_N10P" 
    doc="opt:  ls_M10_uart, ls_M10P_uart, ls_M10P_PLUS_uart, ls_M10_net, ls_M10P_net, ls_M10P_PLUS_net, ls_N10, ls_N10P, ld_14, ld_19, rplidar_A1_A2, rplidar_A3, rplidar_S1"/>

编译修改后的包

catkin_make -DCATKIN_WHITELIST_PACKAGES="turn_on_wheeltec_robot"

建图

小车终端下输入:

roslaunch turn_on_wheeltec_robot mapping.launch

电脑控制端打开rviz

在电脑控制端下输入rviz

配置rviz界面

Global Option在的Fixed Frame选择map!

按照显示添加RobotModel、TF;

按照话题添加LaserScan和Map;

此时才会显示地图

新开一个小车控制端口输入键盘控制命令

roslaunch wheeltec_robot_rc keyboard_teleop.launch

操纵小车移动,建立完整的地图

此外如果小车的初始位置不对,去找机身上的reset按键,按一下

保存地图

方法一:

这种方法保存的名字的默认的wheeltec,roslaunch turn_on_wheeltec_robot map_saver.launch;

地图保存在: 工作空间目录/src/turn_on_wheeltec_robot/map

这个方法保存的地图在之后的导航中会直接调用该地图。

方法二:

rosrun map_server map_saver -f 地图名

直接保存在工作空间目录下,但是好处是自主命名。

导航

roslaunch turn_on_wheeltec_robot navigation.launch 

rviz配置

启动rviz和配置rviz的方式初步与建图是一致的

如果出现:点击2D Pose estimate后机器人位置没有改变的问题

仔细检查之前的“多机通讯设置”中的ip是否出错

如果没有设置静态ip 那么机器的ip地址会发生变化,导致出错,建议固定ip

固定ip的方式见以下链接:

Wheeltec小车的开发实录(0)-CSDN博客

总体需要添加的检测项如下

 

其中两个map订阅的话题一个是全局地图一个是局部地图

path设置

新加的两个path一个是全局一个是局部

左键选中

单击地图上的一点,便会自动规路径到达目标点

多个目标点

选中后,单击介个地图点就可以,别的方法教学视频有我就不写了。rviz配置那一节里了。

  • 21
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值