Isaac_learning
Isaac
机器人上安装依赖项
在isaac中文件夹中执行以下命令:
engine/build/scripts/install_dependencies_jetson.sh -u <jetson_username> -h <jetson_ip>
./engine/build/scripts/install_dependencies_jetson.sh -u nvidia -h 192.168.1.191
Run 一个程序
- 编译程序 在isaac的根目录去编译
bazel build //apps/samples/stereo_dummy
- 运行程序,执行如下命令
bazel run //apps/samples/stereo_dummy
run命令会先检查一下是否编译过了,如果没有编译先编译一下,然后再run.
- 打开浏览器 http://localhost:3000
执行程序添加配置参数,如下所示
bazel run //apps/samples/stereo_dummy – --config more_config.json
注意有一个–,用于分隔参数和程序
- 调试程序
bazel build -c dbg //apps/samples/pose_tensorrt_inference
gdb --args bazel-bin/engine/alice/tools/main --app apps/samples/pose_tensorrt_inference/pose_tensorrt_inference.app.json
编译所有的程序
bazel build …
编译一个目标平台的程序
bazel build //engine/gems/filters/examples:ekf_sin_exp
运行所有的测试:
bazel test … --jobs=1
- 运行一个测试
bazel test //engine/gems/optimization/tests:pso_ackley
- 运行连接检测:
bazel test --python_path=/usr/bin/python2.7 --config=lint …
导航包
熟悉导航包最好的方式是先通过模拟环境,建议使用 “flatsim”,flatsim使用一个range scan 使用了整个导航包。通过以下命令执行导航:
bazel run //apps/flatsim
默认情况下,机器人会四处漫游,从一个随机点行驶到下一个随机点。
打开浏览器查看http://localhost:3000 ,查看机器人的运行情况。
Isaac Sight 可视化
下面来看一下如何监测导航包,查看机器人的当前状态。Sight其实是一个Isaac的结点,它能够提供一个web服务,并且连接到设备。建议使用Chrome浏览器。
界面如下图所示
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-qYvo6dGR-1571883865645)(images/IsaacSight.png “Sight”)]
Map视图
Map视图展示了机器人的状态信息,使用它来查看机器人当前要去哪里。在仿真中使用flatsim或carter-sim应用程序运行导航堆栈时的可视化与使用carter应用程序的真实机器人基本相同。使用carter_sim或者carter application,将会展示3D点云
- Background: 是一个整个的全局地图,黑色,白色,灰色,黑色是机器人不能通过的区域,白色是已知区域,灰色区域是机器人不知道的区域。
- Robot pose estimate : 机器人的估计姿态显示为带有一个小凹口的蓝色圆圈。定位器使用多模态假设估计器,因此可以显示在姿态上稍有不同的多个机器人姿态指示器。
- Target and path:全局规划器计算的当前目标点和路径显示为红色和蓝色。最后一个计算全局计划的位置也会显示出来。
- Current measurement:当前测量的激光束显示为浅绿色。激光束击中障碍物的端点被视为红色圆圈。从机器人当前最佳姿态估计的角度对其显示的距离进行扫描。如果机器人定位良好,则光束端点与地图中被阻塞的单元匹配。
本地视图(Local View)
这个视图显示了机器人周围的障碍物。它可以用来分析为什么机器人可能不移动,或无法达到所需的目标。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-yRu2S8uT-1571883865646)(images/localView.png “LocalView”)]
- Background : 显示机器人的当前环境状态信息。
- Robot pose: 由于栅格地图始终围绕机器人居中,因此机器人将显示在上半部分视图中的固定位置。在这个视图中,机器人的前进方向是向下的。
- Current plans:显示轨迹规划器的本地计划和基于图形的规划器的全局计划。机器人试图按照轨迹生成器的计划行走。
Isaac Navigation
结点和消息
一个Isaac应用程序包含多个结点,导航包里包含以下结点:
-
全局定位结点:仅使用当前激光测量估计机器人的pose在地图中的位置,不使用任何先验信息。
-
粒子滤波局部化(ParticleFilterLocalization):使用距离扫描测量连续跟踪机器人的姿态。
-
全局规划器 :使用当前已知的地图和其他障碍物(如限制区域、附近障碍物和其他障碍物)计算到目标的路径。全局规划器使用Visibility Graph Algorithm算法。为了获得更好的性能,建议通过增加随机样本的数量来构建一个大(密集)图。如果生成图形太慢,则可以从文件加载预生成图形。
-
GlobalPlannerSmoother :使用捷径和其他策略改进全局规划器路径。
-
LqrPlanner:计算机器人在所需路径上平滑驱动的最佳轨迹。
-
DifferentialBaseControl:基本控制器,使用基本轨迹计划输出当前基本命令消息。
-
LocalMap :使用范围扫描测量创建机器人周围障碍物的表示。
-
DifferentialBaseOdometry:利用微分基的里程估计来估计机器人的自我运动
-
LocalizeBehavior:在全局和本地定位之间切换以保持机器人的本地化。
-
obstacleworld:提供一个到所有障碍物列表的接口,包括全局地图、本地地图、限制区域和其他障碍物。
-
robotmodel:提供范围扫描模型和差分基模型,以支持其他各种节点的计算。机器人的形状可以用圆的列表来描述。
-
websight:发布各种可视化并将数据从所有节点打印到web前端。
节点相互发送消息,如下图中的箭头所示。使用消息传递将应用程序分离为模块化实体。节点可以并行执行并定期运行,也可以在收到新消息时运行。一些节点,如map或range scan模型,不发布消息,而是充当服务提供者,其他节点直接链接到它们。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-hkhYZdm5-1571883865647)(images/navFrame.png “navigation frame”)]
导航包中有以下的输入和输出消息类型:
- RangeScanProto:包含单线激光数据,
- GoalProto: 包含目标位置
- DifferentialBaseControl:由控制器产生的差分基座所需的运动。它平滑、安全,可直接用于驱动机器人。
Carter机器人平台
Carter是一个双轮差速的机器人模型,使用一个16线激光传感器,Zed深度相机,一个IMU和一个TX2板卡。与定制的安装支架一起,它为isaac导航堆栈提供了一个强大而健壮的演示平台。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-SrlQg3fw-1571883865647)(images/Carter.png “Carter frame”)]
运行Carter应用程序
- 确保已经安装好依赖项,环境已经搭好了
- 编译arm版本程序,并布置到机器人上(TX2):
./engine/build/deploy.sh --remote_user nvidia -p //apps/carter:carter-pkg -d jetpack42 -h 192.168.1.191
经过下载和编译,然后会布置到Tx2上
- ssh登录到tx2
- 执行如下命令执行(on TX2)
./app/carter/carter -m
- 连接PS4 ,可以进行控制
Carter 应用结点
下面说一下Carter的应用结点,Carter使用的所有的Navigation包,增加一些特别的结点:
- LidarDriver: 多线激光的采集结点,发布LidarScan消息
- RangeScanFlattening:将激光雷达信息展平为平面二维范围扫描,由导航堆栈使用。
- SegwayRMPDriver:与Segway硬件通信,用于向Segway发送控制命令并从Segway接收车轮里程表数据。
- Joystick:一种通用的操纵杆驱动程序,它从连接的游戏板发布用户输入。
-
SegwayJoystick:Consumes joystick data, checks for the deadman switch and decides between automatic or manual control mode based on the user input.
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-1QBsttJW-1571883865648)(images/carterNodes.png “CarterNodes”)]